使用js实现放大镜

html

   <div id="detail_box">
        <!-- previw_box    left-->
        <div class="previw_box">
            <!--previw  -->
            <div class="previw">
                <!-- small_pic -->
                <div class="small_pic">
                    <img src="./images/small_img.jpg" alt="">
                    <div class="mask"></div>
                </div>
                <!-- big_pic -->
                <div class="big_pic">
                    <img src="./images/big-img.jpg" alt="">
                </div>
            </div>
            <!--bot_pic  -->
            <div class="bot_pic"></div>
        </div>
        <!-- right -->
        <div class="right"></div>
    </div>

css

    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }

        #detail_box {
            width: 1200px;
            height: 550px;
            background-color: aqua;
            margin: 20px auto;
        }

        /* ---------- */
        .previw_box {
            width: 450px;
            height: 550px;
            float: left;

        }

        .previw_box .previw {
            width: 450px;
            height: 450px;
            border: 1px solid #666;
            position: relative;
        }

        .previw_box .previw .small_pic img {
            width: 100%;
            height: 100%;
        }

        .previw_box .previw .mask {
            width: 300px;
            height: 300px;
            background-color: #FFEEA7;
            opacity: 0.8;
            position: absolute;
            left: 0;
            top: 0;
            display: none;
        }

        .big_pic {
            width: 540px;
            height: 540px;
            border: 1px solid #333;
            overflow: hidden;
            position: absolute;
            left: 450px;
            top: 0;
            display: none;
        }

        .big_pic img {
            /* 注意  大图需要定位 */
            position: absolute;
            left:0;
            top: 0;
        }

        /* ------- */

        .bot_pic {
            width: 100%;
            height: 100px;
            background-color: chartreuse;
        }

        .right {
            width: 750px;
            height: 550px;
            background-color: red;
            opacity: 1;
            float: right;

        }
    </style>

js

 <script>
        //1.功能一: 鼠标经过previw 区  让 mask 和 big_pic显示,移开隐藏
        var previw = document.querySelector('.previw');
        var mask = document.querySelector('.mask');
        var big_pic = document.querySelector('.big_pic');

        previw.onmouseenter = function () {
            mask.style.display = "block";
            big_pic.style.display = "block"

        }
        previw.onmouseleave = function () {
            mask.style.display = "none";
            big_pic.style.display = "none"

        }

        //2.功能二  ,mask跟着鼠标在移动  (在盒子内移)previw 区

        previw.onmousemove = function (e) {
            // 鼠标在盒子内的坐标
            var x = e.pageX - previw.offsetLeft;
            var y = e.pageY - previw.offsetTop;
            console.log(x, y);

            //此坐标赋值 mask的left 和top   maskX  mask移动的距离
            var maskX = x - mask.offsetWidth / 2;
            var maskY = y - mask.offsetWidth / 2


            //mask最大的移动距离是 previw.offsetWidth-mask.offsetWidth  最小的距离 0
            var maskMax = previw.offsetWidth - mask.offsetWidth;

            if (maskX <= 0) {
                maskX = 0;
            }else if(maskX>=maskMax){
                maskX=maskMax
            }

            if (maskY <= 0) {
                maskY = 0;
            }else if(maskY>=maskMax){
                maskY=maskMax
            }
            mask.style.left = maskX + 'px';
            mask.style.top = maskY + 'px';
// -------------------------------------------------------------

  //大图跟着 mask 同步移动
  //大图最大的移动距离
  var big_pic= document.querySelector('.big_pic');
  var bigimg=   document.querySelector('.big_pic img')

   var bigpicMax= big_pic.offsetWidth-bigimg.offsetWidth;

    bigimg.style.left=maskX*bigpicMax/maskMax+'px';
    bigimg.style.top=maskY*bigpicMax/maskMax+'px';



    /* 
        maskX                      ?
    ----------------------=------------------------
        maskMax                     bigpicMax
    
    */



}

    </script>

效果图

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值