案例:放大镜

来自CloudWiki
跳转至: 导航搜索

<!DOCTYPE html> <html> <head>

   <meta charset="utf-8">
   <meta http-equiv="X-UA-Compatible" content="IE=edge">
   <title>放大镜</title>
   <link rel="stylesheet" href="">
   <style>
       body{
           margin: 0;
           padding: 0;
       }
       img{
           display: block;
       }
       .header{
           height:100px;
       }
       .center{
           width:800px;
           margin:0 auto;
       }
       .box{
           position:relative;
           width:400px;
       }
       .box .thumb{
           position:relative;
           width:400px;
           height:400px;
       }
       .box .thumb img{
           width:100%;
           height:100%;
       }
       .box .thumb .move{
           position:absolute;
           top:0px;
           left:0px;
           display:none;
           width:200px;
           height:200px;
           background-color: rgba(0,0,0,0.4);
       }
       .box .scale{
           display:none;
           position:absolute;
           right:-420px;
           top:0;
           width:400px;
           height:400px;
           border:1px solid #ccc;
           overflow:hidden;
       }
       .box .scale img{
           position:absolute;
           left:0;
           top:0;
       }
       .box .thumb:hover .move{
           display:block;
       }
       .box .thumb:hover+.scale{
           display:block;
       }
   </style>

</head> <body>

           <img src="img/lianyiqunSmall1.jpg">
           <img src="img/lianyiqunBig1.jpg">

<script>

  var zmFdj=function(){
    var thumbElem=document.getElementsByClassName("thumb")[0],
   // 获取缩略图距离页面左边的距离(可能有滚动条)
       thumbPosX=Math.round(thumbElem.getBoundingClientRect().left+document.documentElement.scrollLeft),
   // 获取缩略图距离页面顶部的距离
       thumbPosY=Math.round(thumbElem.getBoundingClientRect().top+document.documentElement.scrollTop);
   // 获取移动的元素
   var moveElem=document.getElementsByClassName("move")[0];
   thumbElem.onmousemove=function(e){
       // 获取移动的元素的宽和高
       var moveElemW=moveElem.offsetWidth;
       var moveElemH=moveElem.offsetHeight;
       // 计算移动元素距离缩略图左边和顶部的距离
       var x=e.pageX-thumbPosX;
       var y=e.pageY-thumbPosY;
       // 设置鼠标指针在移动元素的中间位置
       moveElem.style.left=x-moveElemW/2+"px";
       moveElem.style.top=y-moveElemH/2+"px";
       // 移动元素不能超出区域
       if(parseInt(moveElem.style.left)<0){
           moveElem.style.left=0;
       }else if(parseInt(moveElem.style.left)>(thumbElem.offsetWidth-moveElemW)){
           moveElem.style.left=thumbElem.offsetWidth-moveElemW+"px";
       }
       if(parseInt(moveElem.style.top)<0){
           moveElem.style.top=0;
       }else if(parseInt(moveElem.style.top)>(thumbElem.offsetHeight-moveElemH)){
           moveElem.style.top=thumbElem.offsetHeight-moveElemH+"px";
       }
       // 放大的倍数
       var sca=thumbElem.offsetWidth/moveElemW;
       var scaleEle=document.getElementsByClassName("scale")[0];
       // 放大图片的位置
       // 向左边拉动放大镜20px 放大倍数是两倍 就是要把大图的定位的left值向负方向移动  2*20px
       var img=scaleEle.getElementsByTagName("img")[0];
       img.style.left=-(sca*parseInt(moveElem.style.left))+"px";
       img.style.top=-(sca*parseInt(moveElem.style.top))+"px";
   }
  }
  zmFdj();


</script> </body> </html>