简单实现js放大镜效果


Posted in Javascript onJuly 24, 2017

本文实例为大家分享了js放大镜效果展示的具体代码,供大家参考,具体内容如下

具体代码如下:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Document</title>
  <style>
    body,div,img{
      margin:0;
      padding:0;
    }
    img{
      display:block;
      border:none;
    }
    #box{
      position:absolute;
      top:20px;
      left:20px;
      width:350px;
      height:350px;
      box-shadow:3px 3px 10px 0 #111111;

    }
    #box img{
      width:100%;
      height:100%;

    }
    #mark{
      display:none;
      position:absolute;
      top:0;
      left:0;
      width:175px;
      height:175px;
      background:#000;
      opacity: 0.5;
      filter:alpha(opacity=50);
      cursor:move;

    }
    #boxRight{
      display:none;
      position:absolute;
      top:20px;
      left:380px;
      width:350px;
      height:350px;
      overflow:hidden;
    }
    /*我们右侧的图片的大小是需要严格计算的:
      mark的width是box的width的一半,那么我们的大图宽度也应该是小图的二倍
    */
    #boxRight img{
      position:absolute;
      top:0;
      left:0;
      width:200%;
      height:200%;
    }
  </style>
</head>
<body>
  <div id='box'>
    <img src="img/iphone.jpg" alt="">
    <div id='mark'></div>
  </div>
  <div id='boxRight'>
    <img src="img/iphone_big.jpg" alt="">
  </div>
  <script>
    //放大镜的原理: 我们的mark横向是box的一半,纵向也是box的一半,那么右侧的大图横向(纵向)应该是左侧小图的2倍
    var box = document.getElementById('box');
    var mark = document.getElementById('mark');
    var boxRight = document.getElementById('boxRight');
    //设置mark这个盒子
    function setPosition(e){
      var top = e.clientY - box.offsetTop - (mark.offsetHeight/2);
      var left = e.clientX - box.offsetLeft - (mark.offsetWidth/2);
      //边界判断
      var tempL = 0,tempT = 0;
      var minL = 0,minT = 0,maxL = box.offsetWidth - mark.offsetWidth,maxT = box.offsetHeight - mark.offsetHeight ;

      if(left<minL){
        mark.style.left = minL + "px";
        tempL = minL;
      }else if(left>maxL){
        mark.style.left = maxL + "px";
        tempL = maxL;
      }else{
        mark.style.left = left + "px";
        tempL = left;
      }
      if(top<minT){
        mark.style.top = minT + "px";
        tempT = minT;
      }else if(top>maxT){
        mark.style.top = maxT + "px";
        tempT = maxT;
      }else{
        mark.style.top = top + "px";
        tempT = top;
      }
      //右侧图片跟着运动:左侧移动多少,右侧跟着移动他的2倍即可
      var oImg = boxRight.getElementsByTagName("img")[0];
      oImg.style.left = -tempL*2 + "px";
      oImg.style.top = -tempT*2 + "px";

    }
    box.onmouseenter = function(e){
      e = e || window.event;
      
      mark.style.display = "block";
      setPosition(e);
      boxRight.style.display = "block";

    }
    box.onmousemove = function(e){
      e = e || window.event;
      setPosition(e);

    }
    box.onmouseleave = function(e){
      e = e || window.event;
      mark.style.display = "none";
      boxRight.style.display = "none";
      
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
IE和Firefox下javascript的兼容写法小结
Dec 10 Javascript
JS 获取span标签中的值的代码 支持ie与firefox
Aug 24 Javascript
jquery选择器、属性设置用法经验总结
Sep 08 Javascript
js单独获取一个checkbox看其是否被选中
Sep 22 Javascript
jquery.form.js实现将form提交转为ajax方式提交的方法
Apr 07 Javascript
jQuery()方法的第二个参数详解
Apr 29 Javascript
javascript类型系统 Array对象学习笔记
Jan 09 Javascript
javascript先序遍历DOM树的方法
Feb 27 Javascript
JSON在Javascript中的使用(eval和JSON.parse的区别)详细解析
Sep 05 Javascript
小程序分享模块超级详解(推荐)
Apr 10 Javascript
vue.js中使用微信扫一扫解决invalid signature问题(完美解决)
Apr 11 Javascript
vue3.0生命周期的示例代码
Sep 24 Javascript
Vue列表页渲染优化详解
Jul 24 #Javascript
javascript cookie的基本操作(添加和删除)
Jul 24 #Javascript
JavaScript取得gridview中获取checkbox选中的值
Jul 24 #Javascript
Javascript之图片的延迟加载的实例详解
Jul 24 #Javascript
在React中如何优雅的处理事件响应详解
Jul 24 #Javascript
使用AngularJS编写多选按钮选中时触发指定方法的指令代码详解
Jul 24 #Javascript
想用好React的你必须要知道的一些事情
Jul 24 #Javascript
You might like
超外差式晶体管收音机的组装与统调
2021/03/01 无线电
php实现jQuery扩展函数
2009/10/30 PHP
PHP中遍历stdclass object的实现代码
2011/06/09 PHP
在WAMP环境下搭建ZendDebugger php调试工具的方法
2011/07/18 PHP
PhpStorm terminal无法输入命令的解决方法
2016/10/09 PHP
PHP实现的curl批量请求操作示例
2018/06/06 PHP
javascript数组去掉重复
2011/05/12 Javascript
基于jquery的多彩百分比 动态进度条 投票效果显示效果实现代码
2011/08/28 Javascript
Javascript模块化编程(一)模块的写法最佳实践
2013/01/17 Javascript
jQuery CSS()方法改变现有的CSS样式表
2014/09/09 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
apply和call方法定义及apply和call方法的区别
2015/11/15 Javascript
基于jquery实现日历签到功能
2020/09/11 Javascript
浅谈bootstrap源码分析之tab(选项卡)
2016/06/06 Javascript
JS遍历数组和对象的区别及递归遍历对象、数组、属性的方法详解
2016/06/14 Javascript
Javascript操作表单实例讲解(下)
2016/06/20 Javascript
JS+HTML5实现的前端购物车功能插件实例【附demo源码下载】
2016/10/17 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
微信小程序使用request网络请求操作实例
2017/12/15 Javascript
小程序获取周围IBeacon设备的方法
2018/10/31 Javascript
详解vue 组件
2020/06/11 Javascript
linux环境下的python安装过程图解(含setuptools)
2017/11/22 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
python计算两个数的百分比方法
2018/06/29 Python
TensorFlow实现模型评估
2018/09/07 Python
Python3 Post登录并且保存cookie登录其他页面的方法
2018/12/28 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
控制工程专业个人求职信
2013/09/25 职场文书
党员示范岗材料
2014/12/19 职场文书
四年级数学上册教学计划
2015/01/20 职场文书
会议通知范文
2015/04/15 职场文书
人事任命通知书
2015/04/21 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
单位收入证明范本
2015/06/18 职场文书
陶瓷类经典广告语集锦
2019/10/25 职场文书
Vue全家桶入门基础教程
2021/05/14 Vue.js