简单实现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 相关文章推荐
jsPDF生成pdf后在网页展示实例
Jan 16 Javascript
基于js与flash实现的网站flv视频播放插件代码
Oct 14 Javascript
js获取滚动距离的方法
May 30 Javascript
浅谈JavaScript中setInterval和setTimeout的使用问题
Aug 01 Javascript
js实现点击向下展开的下拉菜单效果代码
Sep 01 Javascript
自己动手写的javascript前端等待控件
Oct 30 Javascript
jquery实现图片预加载
Dec 25 Javascript
jQuery操作cookie
Aug 08 Javascript
vue2.0 和 animate.css的结合使用
Dec 12 Javascript
详解使用React进行组件库开发
Feb 06 Javascript
jquery获取元素到屏幕四周可视距离的方法
Sep 05 jQuery
微信小程序收货地址API兼容低版本解决方法
May 18 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
jQuery提交多个表单的小例子
2013/06/30 Javascript
通过action传过来的值在option获取进行验证的方法
2013/11/14 Javascript
JQuery结合CSS操作打印样式的方法
2013/12/24 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
2015/06/16 Javascript
如何用jQuery实现ASP.NET GridView折叠伸展效果
2015/09/26 Javascript
javascript实现右侧弹出“分享到”窗口效果
2016/02/01 Javascript
AngularJS ngModel实现指令与输入直接的数据通信
2016/09/21 Javascript
js正则表达式注册页面表单验证
2016/10/11 Javascript
浅谈$_FILES数组为空的原因
2017/02/16 Javascript
mui上拉加载更多下拉刷新数据的封装过程
2017/11/03 Javascript
原生JS实现的双色球功能示例
2018/02/02 Javascript
layui自己添加图片按钮并点击跳转页面的例子
2019/09/14 Javascript
Vue.js组件props数据验证实现详解
2019/10/19 Javascript
Vue通过provide inject实现组件通信
2020/09/03 Javascript
小程序实现密码输入框
2020/11/16 Javascript
Nest.js散列与加密实例详解
2021/02/24 Javascript
Python基于smtplib实现异步发送邮件服务
2015/05/28 Python
python写日志封装类实例
2015/06/28 Python
在Django的模型中执行原始SQL查询的方法
2015/07/21 Python
一键搞定python连接mysql驱动有关问题(windows版本)
2016/04/23 Python
独特的python循环语句
2016/11/20 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
基于循环神经网络(RNN)实现影评情感分类
2018/03/26 Python
更新pip3与pyttsx3文字语音转换的实现方法
2019/08/08 Python
Python 线程池用法简单示例
2019/10/02 Python
Django app配置多个数据库代码实例
2019/12/17 Python
Python3爬虫中关于中文分词的详解
2020/07/29 Python
python中PyQuery库用法分享
2021/01/15 Python
机械专业毕业生自荐信
2013/11/02 职场文书
机电一体化专业应届生求职信
2013/11/27 职场文书
人事文员岗位职责
2014/02/16 职场文书
2014年控辍保学工作总结
2014/12/08 职场文书
2016年大学光棍节活动总结
2016/04/05 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
《妈妈别哭,有我在》读后感3篇
2020/01/13 职场文书
Android开发EditText禁止输入监听及InputFilter字符过滤
2022/06/10 Java/Android