js模仿jd商品放大镜

Posted 做个机灵鬼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js模仿jd商品放大镜相关的知识,希望对你有一定的参考价值。

思路:

1.利用定位把遮挡盒子与放大图片的盒子写出来,并且利用display:none隐藏起来
2.获取鼠标在盒子内的坐标,
3.设置遮挡盒子在盒子移动,并设置超出盒子是隐藏遮挡盒子
4.利用等比例算法 投射出右边的大图片

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .prve_img 
            width: 400px;
            height: 400px;
            margin: 50px auto;
            border: 1px solid #ccc;
            position: relative;
            
        
        .mask 
            display: none;
            position: absolute;
            top: 0;
            left: 0;
            width: 300px;
            height: 300px;
            border: 1px solid #ccc;
            background-color: yellow;
            /* 半透明效果 */
            opacity: .5;
            cursor: crosshair;
        
        .big 
            display: none;
            position: absolute;
            top: -1px;
            left: 400px;
            width: 500px;
            height: 500px;
           border: 1px solid #ccc;
           background-color: pink;
           overflow: hidden;

        
        .big img 
            position: absolute;
            top: 0;;
            left: 0;
        
    </style>
    <script>
        
        window.addEventListener('load',function()
           //1.鼠标经过盒子的时候,显示出两个盒子
           var mask = document.querySelector('.mask');
           var big = document.querySelector('.big');
           var prveimg = document.querySelector('.prve_img');
           var bigImg = document.querySelector('.bigImg');
           //绑定一个鼠标经过事件
           prveimg.addEventListener('mouseover',function()
               mask.style.display = 'block';
               big.style.display = 'block';
           );
           prveimg.addEventListener('mouseout',function()
               mask.style.display = 'none';
               big.style.display = 'none';
           );
           //2.获取鼠标在盒子内移动时坐标
           prveimg.addEventListener('mousemove',function(event)
               var x = event.pageX - prveimg.offsetLeft;
               var y = event.pageY - prveimg.offsetTop;
              //限制黄色盒子的移动距离
              //让光标定到盒子的中间
              var maskX = x - mask.offsetWidth / 2;
              var maskY = y - mask.offsetHeight / 2;
              //盒子最大的移动移动距离
              var maskMax =  prveimg.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盒子动起来
               mask.style.left = maskX  + 'px';
               mask.style.top = maskY + 'px';
               
               //mask的移动距离 / mask的最大移动距离 = bigMig的移动距离 / big的最大移动距离
               //big的最大移动距离
               //这里图片比盒子大用图片的尺寸去见
               //盒子是正方形 所有可以共用最大移动巨鹿
               var bigImgMax = bigImg.offsetWidth - big.offsetWidth;
               var bigX = bigImgMax * maskX / maskMax;
               var bigY = bigImgMax * maskY / maskMax;
               bigImg.style.left = -bigX + 'px';
               bigImg.style.top = -bigY + 'px';
           )
           

        )
    </script>
</head>
<body>
    <div class="prve_img">
        <img src="img/s3.png" alt="">
        <div class="mask"></div>
        <div class="big">
            <img src="img/big.jpg" alt="" class="bigImg">
        </div>
    </div>
</body>
</html>

以上是关于js模仿jd商品放大镜的主要内容,如果未能解决你的问题,请参考以下文章

利用JS实现购物网站商品放大镜效果

商品图片放大镜

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)

JS实现淘宝商品图片放大效果(放大镜)