JQ实现放大镜效果

<!DOCTYPE html>
<html>

    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            *{
                margin: 0;
                padding: 0;
            }
            #box {
                width: 400px;
                height: 400px;
                border: 5px solid #ddd;
                margin: 100px auto;
                position: relative;
            }
            #box .simg {
                width: 400px;
                height: 400px;
                position: relative;
                
            }
            #box .simg .move {
                width: 100px;
                height: 100px;
                background: rgba(255,255,255,0.5);
                border: 1px solid #000;
                position: absolute;
                left: 0;
                top: 0;
                display: none;
            }
            #box .simg .shade {
                width: 100%;
                height: 100%;
                position: absolute;
                left: 0;
                top: 0;
                background: rgba(0,0,0,0);
            }
            #box .bimg {
                width: 300px;
                height: 300px;
                background: red;
                position: absolute;
                left: 430px;
                top: 50px;
                overflow: hidden;
                display: none;
            }
            
            #box .bimg img {
                position: absolute;
            }
            
        </style>

    </head>

    <body>
        <div id="box">
            <div class="simg">
                <img src="img/simg.jpg" />
                <span class="move"></span>
                <span class="shade"></span>
            </div>

            <div class="bimg">
                <img src="img/bimg.jpg" />
            </div>

        </div>

        <script type="text/javascript" src="js/jquery-1.11.3.js"></script>
        <script type="text/javascript">
            //鼠标移动到遮罩层上显示小区块跟大图
            $("#box .shade").hover(function(){
                $("#box .move").show();
                $("#box .bimg").show();
            },function(){ //鼠标移出到遮罩层上隐藏小区块跟大图
                $("#box .move").hide();
                $("#box .bimg").hide();
            });
            
            //让透明的小区块跟随鼠标的位置移动
            $("#box .shade").mousemove(function(e){
                
                var $x = e.clientX;//鼠标与浏览器X轴的距离
                var $y = e.clientY;//鼠标与浏览器Y轴的距离
                var $l = $("#box").offset().left; //获取BOX与浏览器窗口左边的距离   offset设置盒子的位子
                var $t = $("#box").offset().top; //获取BOX与浏览器窗口上边的距离
                
                //小区块的长度
                var $w = $("#box .move").width()/2;
                //小区块的高度
                var $h = $("#box .move").height()/2;
                var $left = $x - $l - $w; //透明小区块左面的距离
                var $top = $y - $t - $h;  //透明小区块上面的距离
                //alert($left+":"+$top)
                
                //做判断,不能让透明区块移出去
                if($top < 0){ //不让他从上面跟下面出去
                    $top = 0;
                    }else if($top > ($("#box .shade").height() - $h * 2 - 2)){
                        $top = $("#box .shade").height() - $h * 2 - 2;
                    };
                    
                if($left < 0){//不让他从左面跟右面出去
                    $left = 0;
                    }else if($left >  ($("#box .shade").width() - $w * 2 - 2)){
                        $left = $("#box .shade").width() - $w * 2 - 2;
                    }
                //跟随鼠标移动
                $("#box .move").css({left:$left,top:$top});
                
                var $yd_w = $("#box .shade").width() - $w * 2; //透明区块能滑动的最大宽度
                var $yd_h = $("#box .shade").height() - $h * 2; //透明区块能滑动的最大高度
                
                
                //滑动宽度的比例
                var $yd_wbl = $left / $yd_w;
                //滑动高度的比例
                var $yd_hbl = $top / $yd_h;
                
                var $big_left = ($("#box .bimg img").width() - $("#box .bimg").width()) * $yd_wbl; //大图对应的左面的距离
                var $big_top = ($("#box .bimg img").height() - $("#box .bimg").height()) * $yd_hbl; //大图对应的上面的距离
                
                //alert($big_left+":"+$big_top)
                
                $("#box .bimg img").css({left:-$big_left,top:-$big_top});
                
            });
        </script>

    </body>

</html>


hover() 有两个参数 over,out

over:鼠标移到元素上要触发的函数

out:鼠标移出元素要触发的函数


另外说一下 pageX/Y 和 clientX/Y 的区别(本文未运用)

screenX:鼠标位置相对于用户屏幕水平偏移量,而screenY也就是垂直方向的,此时的参照点也就是原点是屏幕的左上角。

clientX:跟screenX相比就是将参照点改成了浏览器内容区域的左上角,该参照点会随之滚动条的移动而移动。

pageX:参照点也是浏览器内容区域的左上角,但它不会随着滚动条而变动

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值