第三个模块:移动黄色遮挡层,大图片跟随移动功能。**
代码在文章末尾,为方便理解先给大家对本例进行一下讲解:
第一部分:
preview_img 代表装手机图片的盒子 ,mask代表用来遮罩的淡黄色盒子,big代表用来装放大效果手机图片的大盒子
那么显而易见第一个模块主要就是做一个显示与隐藏的效果
然后重头戏,第二个模块就来了
重点部分第二个模块解析:
第二个模块主要是做一个黄色的遮挡层跟随鼠标功能。
把鼠标坐标给遮挡层不合适。因为遮挡层坐标以父盒子为准。
首先是获得鼠标在盒子的坐标。之后把数值给遮挡层做为left和top值。
此时用到鼠标移动事件,但是还是在小图片盒子内移动。
我们发现,遮挡层位置不对,需要再减去盒子自身高度和宽度的一半。
遮挡层不能超出小图片盒子范围。如果小于零,就把坐标设置为0,如果大于遮挡层最大的移动距离,就把坐标设置为最大的移动距离
遮挡层的最大移动距离:小图片盒子宽度减去遮挡层盒子宽度
第三个模块:
移动黄色遮挡层,大图片跟随移动功能。并且求大图片的移动距离公式
主要最后的式子里是-bigx和-bigy,因为放大镜效果是当我们鼠标在图片上往右走时,big盒子里的大图片实际上是往左走的。所以要加负号
代码示例:
window.addEventListener(‘load’,function() {
var preview_img = this.document.querySelector(‘.preview_img’);
var mask = this.document.querySelector(‘.mask’);
var big = this.document.querySelector(‘.big’);
//当鼠标经过preview_img 就显示和隐藏mask遮挡层和big大盒子
preview_img.addEventListener(‘mouseover’,function() {
mask.style.display = ‘block’;
big.style.display = ‘block’;
})
preview_img.addEventListener(‘mouseout’,function(){
mask 《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】 .style.display = ‘none’;
big.style.display = ‘none’;
})
//2.鼠标移动的时候,让黄色的盒子跟着鼠标来走
preview_img.addEventListener(‘mousemove’,function(e) {
//先计算出鼠标在盒子内的坐标
var x = e.pageX - this.offsetLeft;
var y = e.pageY - this.offsetTop;
//盒子高度300的一半是150
//我们mask移动的距离
var maskx = x - mask.offsetWidth / 2;
var masky = y - mask.offsetHeight / 2
//如果x坐标小于0就让他停在0的位置
//maskmax遮挡层最大移动距离