22.通过元素的偏移量实现放大镜效果

HTML部分: 

<div class="box">

        <img class="yuan" src="images/ldh.jpeg" alt="">

        <div class="mark"></div>

        <div class="big">

            <img class="big_img" src="images/ldh.jpeg" alt="">

        </div>

    </div>

js部分: 

    <script>

        // 1、获取元素

        var box = document.querySelector('.box');

        var mask = document.querySelector('.mark');

        var big = document.querySelector('.big');

        // 2、当鼠标经过和离开box盒子,让遮罩和大盒子显示和隐藏

        box.addEventListener('mouseover', function() {

            mask.style.display = "block";

            big.style.display = "block";

        })

        box.addEventListener('mouseout', function() {

                mask.style.display = "none";

                big.style.display = "none";

            })

            // 3、鼠标移动事件,让遮罩盒子跟随鼠标,先计算出鼠标在盒子内的坐标

        box.addEventListener('mousemove', function(e) {

            var x = e.pageX - this.offsetLeft;

            var y = e.pageY - this.offsetTop;

            // 4、要限制遮罩盒子的移动距离,通过判断遮罩盒子的left和top来限定

            var maskX = x - mask.offsetWidth / 2;

            var maskY = y - mask.offsetHeight / 2;

            //遮罩盒子可以移动的最大距离 box的宽度减去遮罩盒子的宽度

            var maskMax = box.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;

            }

            // 把获取的坐标给到遮罩盒子的top和left

            mask.style.left = maskX + 'px';

            mask.style.top = maskY + 'px';

            // 4、大图片的移动距离 = 遮罩层的移动距离 * 大图片最大移动距离 / 遮罩层最大移动距离

            var big_img = document.querySelector('.big_img');

            // 大图片的最大移动距离 = 大图片的宽度 - 大盒子的宽度

            var big_imgMax = big_img.offsetWidth - big.offsetWidth;

            // 大图片的移动距离

            var bigX = maskX * big_imgMax / maskMax;

            var bigY = maskY * big_imgMax / maskMax;

            big_img.style.left = -bigX + 'px';

            big_img.style.top = -bigY + 'px';

        })

    </script>

最近在发现了一个更简单的实现大图片的移动距离的方法,只需要两句代码即可实现:

            big_img.style.left = -2 * maskX + 'px';

            big_img.style.top = -2 * maskY + 'px';

在布局样式的时候,因为被放大的图片 big_img的宽度和高度被设置为200%,所以在计算大图片的移动可以直接通过 负2倍 * maskX来实现

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr_LiuP

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值