美文网首页
用原生js来写放大镜

用原生js来写放大镜

作者: chiupen | 来源:发表于2018-06-06 21:49 被阅读0次

    个人风格是 es5 为主,目前在学习 es6 所以看上去代码有点怪怪的,但反正只有一个我看而已。=v=

    //获取对应的变量
    let box = document.querySelector('.box');
    let smallBox = document.querySelector('.small-box'); //小盒子
    let bigBox = document.querySelector('.big-box'); //大盒子
    let mask = document.querySelector('.mask'); //蒙板
    let bigBoxImg = document.querySelector('.big-box>img'); //大盒子的图片
    
    smallBox.onmouseenter = function () {
        bigBox.style.display = 'block';
            mask.style.display = 'block';
    
            //蒙版在小盒子里面移动
            document.onmousemove = function (e) {
            //兼容处理
                let event = e || window.event;
            //计算坐标
            let x = event.clientX - box.offsetLeft - mask.offsetWidth/2;
                let y = event.clientY - box.offsetTop - mask.offsetHeight/2;
            //边界判断
                if(x<0){
                    x= 1;
                }else if(x >= smallBox.offsetWidth - mask.offsetWidth-1){
                    x = smallBox.offsetWidth - mask.offsetWidth-1
                }
                if(y<0){
                    y = 1;
                }else if (y>= smallBox.offsetHeight - mask.offsetHeight-1){
                    y = smallBox.offsetHeight - mask.offsetHeight-1
                }
            //边界判断<0 后x和y等于1 是为了抵消掉边框的1px。
    
             //蒙版移动
                mask.style.left = x +'px';
                mask.style.top = y +'px';
    
            //关联大盒子
            //公式: 大盒子图片的移动距离 = 蒙板移动的距离/小盒子的宽度(高度) * 大盒子的宽度(高度)
                bigBoxImg.style.left = -x /smallBox.offsetWidth * bigBox.offsetWidth +'px';
                bigBoxImg.style.top = -y /smallBox.offsetHeight* bigBox.offsetHeight +'px';
    
            }
        };
    
        console.log(bigBoxImg.style.left);
    
        smallBox.onmouseleave = function () {
            console.log(456);
            bigBox.style.display = 'none';
            mask.style.display = 'none';
            document.onmousemove = null;
        }
    

    相关文章

      网友评论

          本文标题:用原生js来写放大镜

          本文链接:https://www.haomeiwen.com/subject/xpbisftx.html