仿京东放大镜_最详解

在这里插入图片描述
优快云下载地址:
仿京东放大镜_开箱即用.rar

要点1
限制蓝色遮罩层在小盒子内可移动范围

var left = e.pageX - this.offsetLeft - mask.offsetWidth / 2;
var top = e.pageY - this.offsetTop - mask.offsetHeight / 2;
var smallLeftMax = this.offsetWidth - mask.offsetWidth;
var smallTopMax = this.offsetHeight - mask.offsetHeight;
left = left <= 0 ? 0 : left;
top = top <= 0 ? 0 : top;
left = left >= smallLeftMax ? smallLeftMax : left;
top = top >= smallTopMax ? smallTopMax : top;

在这里插入图片描述
蓝色遮罩层可移动的限制条件,等同于把小盒子划分成了9个区域,给定了鼠标经过每个区域时,蓝色遮罩层的 left 和 top值

鼠标在1、4、7区域,left = 0,在3、6、9区域,left = smallLeftMax
在1、2、3区域,top = 0,在7、8、9区域,top = smallTopMax
在2、5、8区域,left = e.pageX - this.offsetLeft - mask.offsetWidth / 2
在4、5、6区域,top = e.pageY - this.offsetTop - mask.offsetHeight / 2

要点2
计算大图跟随蓝色遮罩层的移动公式
在这里插入图片描述
大图宽 – 大盒的宽 = 大图left最大移动距离
imgLeft = -left / smallLeftMax * bigLeftMax;
imgTop = -top / smallTopMax * bigTopMax;
注:遮挡层和大图片移动方向相反,所以有负号

要点3
遮挡层 、小图和小盒、大盒、大图 四者的大小关系

遮挡层200200
小图和小盒一样大小450450
大盒600600
大图13501350

在这里插入图片描述
600 / 1350 = 200 / 450
满足以上关系才可以使蓝色遮罩层大盒里的大图在同一个位置

要点4
在这里插入图片描述
鼠标经过
1、出现红色边框;

for (var i = 0; i < lis.length; i++) {
            lis[0].className = 'active';
            lis[i].addEventListener('mouseover', function() {
                for (var i = 0; i < lis.length; i++) {
                    lis[i].className = '';
                }
                this.className = 'active';
            })
        }

2、小盒子里面的小图发生变换;
3、大盒子里面的大图发生变换

 for (var i = 0; i < listImg.length; i++) {
            (function(i) {
                listImg[i].addEventListener('mouseover', function() {
                    bigImg.src = 'images/' + [i + 1] + '_big.jpg';
                    smallImg.src = this.src;
                })
            })(i);
        }

实现上面2、3需求,我用到了立即执行函数,不过也可以用let解决,for循环遍历结束只能得到最后一个的问题

for (let i = 0; i < listImg.length; i++) {
    listImg[i].addEventListener('mouseover', function() {
        bigImg.src = 'images/' + [i + 1] + '_big.jpg';
        smallImg.src = this.src;
    })
}

好啦,分享就到这里啦,快去下载试一试,看一看效果吧~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

我来C咯

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

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

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

打赏作者

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

抵扣说明:

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

余额充值