zoukankan      html  css  js  c++  java
  • JavaScript实现放大镜功能

    直接上代码了,相关解释说明见代码中的注释部分。

      1 <!DOCTYPE html>
      2 <html>
      3   <head>
      4     <meta charset="utf-8">
      5     <title>magnifier</title>
      6     <style>
      7       *{
      8         margin: 0;
      9         padding: 0
     10       }
     11       #demo{
     12         display: block;
     13         width: 1000px;
     14         height: 600px;
     15         margin: 50px;
     16         position: relative;
     17         border: 1px solid #ccc;
     18       }
     19       #small-box{
     20         position: relative;
     21         float: left;
     22         width: 192px;
     23         height: 108px;
     24         z-index: 1;
     25       }
     26       #mark {
     27         position: absolute;
     28         display: block;
     29         width: 192px;
     30         height: 108px;
     31         z-index: 10;
     32         background: #fff;
     33         filter: alpha(opacity = 0);
     34         opacity: 0;
     35         cursor: move;
     36 
     37       }
     38       #float-box{
     39         display: none;
     40         width: 50px;
     41         height: 50px;
     42         position: absolute;
     43         background: #ffffcc;
     44         border: 1px solid #ccc;
     45         filter:alpha(opacity=50);
     46         opacity: 0.5;
     47         cursor: move;
     48       }
     49       #big-box{
     50         display: none;
     51         position: absolute;
     52         /* float: left;*/
     53         top: 0px;
     54         left: 300px;
     55         width: 500px;
     56         height: 500px;
     57         overflow: hidden;
     58         border: 1px solid #ccc;
     59         z-index: 5;
     60       }
     61       #big-box img{
     62         position: absolute;
     63         overflow: hidden;
     64         z-index: 5;
     65       }
     66     </style>
     67     <script>
     68       //页面加载完毕后执行
     69       //三个鼠标事件
     70       //onmouseover:鼠标指针移到制定对象上时发生
     71       //onmouseout:鼠标指针移出指定对象时发生
     72       //onmousemove:鼠标指针移动时发生
     73 
     74       //offsetLeft:子元素相对于父元素的左位移
     75       //offsetTop:子元素相对于父元素的上部位移
     76       //offsetWidth:元素展示出的宽度,不包含滚动条未展示出的内容
     77       //offsetHeight:元素展示出的高度,不包含滚动条未展示出的内容
     78       //event.clientX:鼠标的X轴坐标,相对于整个页面
     79       //event.clientY:鼠标的Y轴坐标,相对于整个页面
     80 
     81       //offsetLeft和style.left的区别
     82       //1.style.left返回的是字符串,如50px,offsetLeft返回的是数值如50;
     83       //2.style.left是可读写的,offsetLeft是只读的,所以要改变DIV的位置,只能修改style.left;
     84       //3.style.left的值需要事先定义,否则取值为空,而且要定义在html代码中,写在样式表中无法获取
     85 
     86       //比例计算
     87       //小图片比大图片的值等于放大镜(模糊层)比放大后图片展示区域的值,即示例中的big-box
     88       window.onload=function () {
     89         var objDemo=document.getElementById("demo");
     90         var objSmallBox=document.getElementById("small-box");
     91         var objMark=document.getElementById("mark");
     92         var objFloatBox=document.getElementById("float-box");
     93         var objBigBox=document.getElementById("big-box");
     94         var objBigBoxImage=objBigBox.getElementsByTagName("img")[0];
     95         objMark.onmouseover=function(){
     96           objFloatBox.style.display = "block";
     97           objBigBox.style.display = "block";
     98         }
     99         objMark.onmouseout=function () {
    100           objFloatBox.style.display = "none";
    101           objBigBox.style.display = "none";
    102       }
    103       objMark.onmousemove=function(ev){
    104         var _event=ev;
    105         var left=_event.clientX -  objDemo.offsetLeft - objSmallBox.offsetLeft - objFloatBox.offsetWidth / 2;
    106         var top=_event.clientY - objDemo.offsetTop - objSmallBox.offsetTop - objFloatBox.offsetHeight / 2;
    107         /*alert(left);
    108         alert(top);*/
    109         if (left < 0) {
    110           left = 0;
    111         }else if(left > (objSmallBox.offsetWidth - objFloatBox.offsetWidth)) {
    112           left = objSmallBox.offsetWidth - objFloatBox.offsetWidth;
    113         }
    114         if(top < 0){
    115           top = 0;
    116         }else if(top > (objSmallBox.offsetHeight - objFloatBox.offsetHeight)){
    117           top = objSmallBox.offsetHeight - objFloatBox.offsetHeight;
    118         }
    119         objFloatBox.style.left = left + "px";
    120         objFloatBox.style.top = top + "px";
    121 
    122         var percentX = left / (objSmallBox.offsetWidth - objFloatBox.offsetWidth);
    123         var percentY = top / (objSmallBox.offsetHeight - objFloatBox.offsetHeight);
    124 
    125         objBigBoxImage.style.left = - percentX * (objBigBoxImage.offsetWidth - objBigBox.offsetWidth) + "px";
    126         objBigBoxImage.style.top = - percentY * (objBigBoxImage.offsetHeight - objBigBox.offsetHeight) + "px";
    127 
    128       }
    129       }
    130     </script>
    131   </head>
    132   <body>
    133     <div id="demo">
    134       <div id="small-box">
    135         <div id="mark"></div>
    136         <div id="float-box"></div>
    137         <img src="./images/guilin.jpg" style="192px;height:108px" />
    138       </div>
    139       <div id="big-box">
    140         <img src="./images/guilin.jpg" />
    141       </div>
    142     </div>
    143   </body>
    144 </html>

    效果如图所示:

  • 相关阅读:
    原子操作--sync/atomic的用法
    基础的排序算法以及查找算法
    (三)MySQL终极篇
    (二)MySQL中级篇
    数据库表添加索引对性能的影响
    事务的四大特性以及事务的隔离级别
    int 和Integer
    数据库三范式
    Java反射
    获取Class实例的三种方式
  • 原文地址:https://www.cnblogs.com/iaknehc/p/7440807.html
Copyright © 2011-2022 走看看