【原生JS】简单放大镜效果

这里写图片描述

演示地址:点我

<!DOCTYPE html>
<html>

    <head>
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
            * {
                margin: 0;
                padding: 0;
            }
            img{
                vertical-align: top;
            }
            .fdj {
                width: 350px;
                height: 350px;
                position: relative;
                margin: 100px auto;
                border: 1px solid gainsboro;
            }
            .small {
                position: relative;
            }
            .small img {
                width: 350px;
            }
            .mask {
                width: 100px;
                height: 100px;
                background: rgba(255, 255, 0, 0.4);
                position: absolute;
                left: 0;
                top: 0;
                cursor: move;
                display: none;
            }
            .big {
                position: absolute;
                top: 0;
                left: 360px;
                width: 500px;
                height: 500px;
                border: 1px solid gainsboro;
                overflow: hidden;
                display: none;
            }
            .big img{
                position: absolute;
                left: 0;
                top: 0;
            }
        </style>
    </head>

    <body>
        <div class="fdj">
            <div class="small">
                <img src="http://cdn.attach.qdfuns.com/notes/pics/201702/08/162503mw0fawb5b02va22i.jpg" />
                <div class="mask"></div>
            </div>
            <div class="big">
                <img src="http://cdn.attach.qdfuns.com/notes/pics/201702/08/162503mw0fawb5b02va22i.jpg" />
            </div>
        </div>
    </body>
    <script type="text/javascript">
        var fdj = document.querySelector('.fdj') // 获得最大的盒子
        var small = document.querySelector('.small'); //获取小图片盒子
        var big = document.querySelector('.big'); //获取大图片盒子
        var bigs = big.children[0] //大图片 
        var smalls = small.children[0] //小图片
        var mask = small.children[1]; //遮罩 

        //鼠标移入小图片盒子
        small.onmouseover = function() {
            //鼠标移入图片盒子将遮罩与大图片显示
            mask.style.display = 'block';
            big.style.display = ' block';
        };

        //鼠标移出小图片盒子
        small.onmouseout = function() {
            //鼠标移出小图片盒子将遮罩与大图片隐藏
            mask.style.display = 'none';
            big.style.display = 'none';
        };

        var x=0;
        var y=0;
        //鼠标在小图片上移动时
        small.onmousemove = function(ev) {
            var ev = event || window.event;
        //让鼠标在遮罩正中
            //鼠标X坐标与Y坐标
            x = ev.clientX -this.offsetParent.offsetLeft- mask.offsetWidth / 2 ;  
            y = ev.clientY -this.offsetParent.offsetTop- mask.offsetHeight / 2 ;
            //将遮罩限制在小图片盒子中

            if (x<0) {
                x=0;
            }else if(x>small.offsetWidth-mask.offsetWidth){
                x = small.offsetWidth-mask.offsetWidth;
            }

            if(y<0){
                y=0;
            }else if(y>small.offsetHeight-mask.offsetHeight){
                y= small.offsetHeight-mask.offsetHeight
            }
            mask.style.left = x + 'px';
            mask.style.top = y + 'px';

            //大图与小图的比例

            /*var scalX = bigs.offsetWidth/small.offsetWidth;
            var scalY = bigs.offsetHeight/small.offsetHeight;*/

            var scalX = x/(small.offsetWidth-mask.offsetWidth);
            var scalY = y/(small.offsetHeight-mask.offsetHeight);

            bigs.style.left = -(x*scalX)+'px';
            bigs.style.top = -(y*scalY)+'px';

        };

    </script>

</html>
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是一个简单原生JS实现放大镜功能的代码: HTML: ``` <div class="container"> <img src="image.jpg" alt="product image" id="product-image"> <div class="magnifier"></div> </div> ``` CSS: ``` .container { position: relative; } .magnifier { position: absolute; width: 200px; height: 200px; border: 1px solid #ccc; display: none; pointer-events: none; background-repeat: no-repeat; background-size: 400px 400px; background-position: 0 0; } ``` JS: ``` const container = document.querySelector('.container'); const magnifier = document.querySelector('.magnifier'); const productImage = document.querySelector('#product-image'); container.addEventListener('mousemove', e => { const containerRect = container.getBoundingClientRect(); const x = e.clientX - containerRect.left; const y = e.clientY - containerRect.top; const magnifierSize = 200; const imageWidth = productImage.width; const imageHeight = productImage.height; const ratioX = imageWidth / containerRect.width; const ratioY = imageHeight / containerRect.height; const bgPosX = -x * ratioX + magnifierSize / 2; const bgPosY = -y * ratioY + magnifierSize / 2; magnifier.style.display = 'block'; magnifier.style.left = `${x - magnifierSize / 2}px`; magnifier.style.top = `${y - magnifierSize / 2}px`; magnifier.style.backgroundImage = `url(${productImage.src})`; magnifier.style.backgroundPosition = `${bgPosX}px ${bgPosY}px`; }); container.addEventListener('mouseleave', () => { magnifier.style.display = 'none'; }); ``` 这段代码会在鼠标移动到图片上时,显示一个放大镜,并在放大镜内显示鼠标所在位置的图片放大后的部分。当鼠标移开图片时,放大镜会隐藏。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值