web使用BOM对象实现放大镜


<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <title>商品放大镜</title>
    <style type="text/css">
        * {
            margin: 0;
            padding: 0;
        }
        
        #smallBox {
            position: relative;
            z-index: 1;
            width: 350px;
            height: 350px;
            margin: 50px;
            border: 1px solid #ccc;
        }
        
        #zoom {
            display:none ;
            width: 150px;
            height: 150px;
            position: absolute;
            background: #ffddcc;
            border: 1px solid #ccc;
            filter: alpha(opacity=50);
            opacity: 0.5;
        }
        
        #bigBox {
            display: none;
            position: absolute;
            top: 0;
            left: 350px;
            width: 540px;
            height: 540px;
            overflow: hidden;
            border: 1px solid #ccc;
            z-index: 1;
        }
        
        #bigBox img {
            position: absolute;
            z-index: 5
        }
    </style>
</head>

<body>
    <div id="smallBox">
        <div id="zoom"></div>
        <img src="images/01.jpg" />
    </div>
    <div id="bigBox">
        <img src="images/001.jpg" />
    </div>
    <script type="text/javascript">
      var smallBox=document.getElementById("smallBox")
      var zoom=document.getElementById("zoom")
      var bigBoximg=document.querySelector("img")
      var bigbox=document.getElementById("bigBox")
      
      //鼠标移入事件
      smallBox.onmouseover=function(){
        zoom.style.display="block";
        bigbox.style.display="block"
      }
      //鼠标移出事件
      smallBox.onmouseout=function(){
        zoom.style.display="none";
        bigbox.style.display="none"
      }
      //鼠标持续移动
      smallBox.onmousemove=function(e){
          var event=event||window.event
          //获取鼠标指针在小图的位置
          var boxX=event.pageX-smallBox.offsetLeft
          var boxY=event.pageY-smallBox.offsetTop
          //放大镜的坐标
          var zoomx=boxX-zoom.offsetWidth/2;
          var zoomy=boxY-zoom.offsetTop/2;
      
          //设置边界
          if(zoomx<0)zoomx=0
          else if(zoomx>smallBox.offsetWidth-zoom.offsetWidth) zoomx=smallBox.offsetWidth-zoom.offsetWidth
          if(zoomy<0) zoomy=0
          else if(zoomy>smallBox.offsetHeight-zoom.offsetHeight) zoomy=smallBox.offsetHeight-zoom.offsetHeight
          
        //设置放大镜的位置
          zoom.style.left=zoomx+"px"
          zoom.style.top=zoomy+"px"
         
        //设置大图移动
        var bigMove=bigBoximg.offsetWidth-bigbox.offsetWidth;//大图移动距离
        var zoomMove=smallBox.offsetWidth-zoom.offsetWidth;//放大镜移动距离
        var rate=bigMove/zoomMove;
        
        bigBoximg.style.left=-rate*zoomx+"px"
        bigBoximg.style.top=-rate*zoomy+"px"
        
      }

    </script>
</body>

</html>

最终效果

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值