放大镜效果(offset)

2023-02-07 17:18:57

放大镜效果(offset)

注:

preview_img 初始图片(需要放大的图片)

mask 遮挡层

big 大盒子

1、当我们鼠标经过 preview_img 就显示和隐藏 mask 遮挡层 和 big 大盒子

2、设置黄色遮罩层

鼠标移动的时候,让黄色的盒子跟着鼠标来走

preview_img.addEventListener('mousemove', function(e) {
// (1). 先计算出鼠标在盒子内的坐标
        var x = e.pageX - this.offsetLeft;
        var y = e.pageY - this.offsetTop;
        // 此时盒子是沿着鼠标的左上角对齐的,我们需要他们中心对齐
        // (2) 减去盒子高度 300的一半 是 150 就是我们mask 的最终 left 和top值了
        // (3) 我们mask 移动的距离
        var maskX = x - mask.offsetWidth / 2;
        var maskY = y - mask.offsetHeight / 2;
        // (4) 如果x 坐标小于了0 就让他停在0 的位置(限制遮罩层的移动距离)
        // 遮挡层的最大移动距离
        var maskMax = preview_img.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';

}

3、当我们遮罩层移动时 ,大图片也要跟随移动距离小图片移动距离

计算大图片的移动距离 = 遮挡层移动距离 * 大图片最大移动距离 / 遮挡层的最大移动距离

var bigIMg = document.querySelector('.bigImg');
        // 大图片最大移动距离
        var bigMax = bigIMg.offsetWidth - big.offsetWidth;
        // 大图片的移动距离 X Y
        var bigX = maskX * bigMax / maskMax;
        var bigY = maskY * bigMax / maskMax;
        bigIMg.style.left = -bigX + 'px';
        bigIMg.style.top = -bigY + 'px';

 

  • 作者:ES6
  • 原文链接:https://blog.csdn.net/weixin_48340600/article/details/108828034
    更新时间:2023-02-07 17:18:57