JavaScript放大镜效果js源码带详细注释图片的放大js练习小实例

效果图呈上:

 

body部分源码:

 

<body>
  <div id="small">
    <img src="./1.jpg">
    <div id="mark"></div>  //small嵌套mark
  </div>
  <div id="big">
    <img src="./1.jpg" id="img">
  </div>
</body>

 

CSS部分源码

 

 

<style>  //标红的均为主要代码,其他的为次要代码可根据个人或者图片需要更改
  *{
    margin: 0;
    padding: 0;
  }
  #small{
    height: 281px;
    width: 500px;
    position: absolute;
    left: 100px;  //这个可以更改,但是后面要根据这个进行一些操作
    top: 100px;
  }
  #small img{  //将img在small范围内全部显示出来的css固定样式
    height: 100%;
    width: 100%;
   }
  #mark{
    height: 100px;
    width: 100px;
    background: rgba(255, 255, 255, 0.5);
    position: absolute;    //根据small进行定位,后续进行应用计算
    left: 0;
    top: 0;
    display: none;    //默认不显示,根据浏览器事件进行设置
  }
  #big{
    width: 400px;
    height: 400px;
    position: absolute;  //父节点为定位元素,img的定位就有基点
    top: 100px;
    left: 700px;
    border: 1px solid black;
    overflow: hidden;    //只显示放大的部分
    display: none;    //默认不显示,根据浏览器事件进行设置
  }
  #big img{
    height: 1125px;  //这是原图片大小
    width: 2000px;
    position: absolute;  //根据鼠标事件进行left和top值得动态移动
    left: 0;
    top: 0;
  }
</style>

 

JavaScript部分源码

 

<script>
  window.onload = function(){
    var oSmall = document.getElementById("small");

    var oBig = document.getElementById("big");

    var oMark = document.getElementById("mark");    //获取需要进行应用与操作的节点
    var oImg = document.getElementById("img");

    oSmall.onmouseover = function(){
      oMark.style.display = "block";    //在鼠标移入oSmall对象时,oMark设置为显示,oBig设置为显示
      oBig.style.display = "block";

      document.onmousemove = function(ev){  //在鼠标移入oSmall对象的同事,进行文档中的鼠标移动事件,设置鼠标事件的形参来传入鼠标事件,使用鼠标事件属性
        var e = ev || window.event;      //对鼠标事件进行浏览器兼容
        var l = e.pageX - oSmall.offsetLeft - 50;  //e.pagrX获取鼠标基于X轴上在html页面上的坐标位置,返回一个数字,减去oSmall.offsetLeft,也就是oSmall对象的左偏移,减去之后鼠标就可以在oMark对象的左边缘,而- 50 是为了让鼠标处于oMark居中的位置,oMark宽度为100,减去50即居中,优化用户体验
        
        if (l <= 0) {  //限制oMark对象的left值出界,如果不懂出界是什么可以删掉四个if语句来观察效果
          l = 0;      
        }      
        if (l >=400 ) {  //400是oSmall的宽度减去oMark的宽度
          l = 400;
        }
              
        var t = e.pageY - oSmall.offsetTop - 50;  //e.pagrY获取鼠标基于Y轴上在html页面上的坐标位置,返回一个数字,减去oSmall.offsetTop,也就是oSmall对象的上偏移,减去之后鼠标就可以在oMark对象的上边缘,最终处于左上角,而- 50 是为了让鼠标处于oMark居中的位置,oMark高度为100,减去50即居中,优化用户体验

        if (t <= 0) {  //限制oMark对象的top值出界 
          t = 0;
        }
        if (t >= 181) {  //181是oSmall的高度减去oMark的高度
          t = 181;
        }

      oMark.style.left = l + "px";  //无论是l或者是t返回的都是number类型,需要跟px进行字符串拼接
      oMark.style.top = t + "px";

      oImg.style.left = l * -4 + 'px';  //这是oBig对象下的oImg对象对应的left值,想更全面的看到语句的作用把big的css的overflow:hidden注释掉然后可以更加全面地观察
      oImg.style.top = t * -4 + 'px';
    }
  }
  oSmall.onmouseout = function(){  //鼠标移出则oMark对象和oBig对象全部隐藏
    oMark.style.display = "none";
    oBig.style.display = "none";  
  }
}
</script>

 

 

  如果那些js语句很困惑可以上百度详细看看对应语句的功能与用法,也可以把感兴趣的语句注释掉观察没了那个语句会发生什么变化,还可以在谷歌或者搜狐按F12观察html元素宽度高度对应属性的变化,这是我个人的解惑小技巧,希望能对你也有一些帮助!

posted @ 2020-11-07 22:40  丨树街猫  阅读(226)  评论(0编辑  收藏  举报