简单实现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 相关文章推荐
js 中{},[]中括号,大括号使用详解
May 12 Javascript
使用Jquery来实现可以输入值的下拉选单 雏型
Dec 06 Javascript
jquery移除button的inline onclick事件(已测试及兼容浏览器)
Jan 25 Javascript
javascript实现粘贴qq截图功能(clipboardData)
May 29 Javascript
Laravel中常见的错误与解决方法小结
Aug 30 Javascript
Vue.js每天必学之构造器与生命周期
Sep 05 Javascript
使用JQuery选择HTML遍历函数的方法
Sep 17 Javascript
基于JS实现html中placeholder属性提示文字效果示例
Apr 19 Javascript
详解Vue2.0配置mint-ui踩过的那些坑
Apr 23 Javascript
layui的表单提交以及验证和修改弹框的实例
Sep 09 Javascript
js实现简单的日历显示效果函数示例
Nov 25 Javascript
简单谈谈offsetleft、offsetTop和offsetParent
Dec 04 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
php常用Stream函数集介绍
2013/06/24 PHP
php获取中文拼音首字母类和函数分享
2014/04/24 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
php如何利用pecl安装mongodb扩展详解
2019/01/09 PHP
PHP常用正则表达式精选(推荐)
2019/05/28 PHP
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
基于javascript实现图片预加载
2016/01/05 Javascript
基于jquery实现轮播焦点图插件
2016/03/31 Javascript
将RGB值转换为灰度值的简单算法
2019/10/09 Javascript
Vue select 绑定动态变量的实例讲解
2020/10/22 Javascript
JavaScript实现瀑布流布局的3种方式
2020/12/27 Javascript
[02:57]2014DOTA2国际邀请赛-观众采访
2014/07/19 DOTA
Python 流程控制实例代码
2009/09/25 Python
使用PYTHON接收多播数据的代码
2012/03/01 Python
Python使用metaclass实现Singleton模式的方法
2015/05/05 Python
Python3的urllib.parse常用函数小结(urlencode,quote,quote_plus,unquote,unquote_plus等)
2016/09/18 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
Python基于plotly模块实现的画图操作示例
2019/01/23 Python
详解PyTorch手写数字识别(MNIST数据集)
2019/08/16 Python
Django模板语言 Tags使用详解
2019/09/09 Python
Pytorch使用MNIST数据集实现CGAN和生成指定的数字方式
2020/01/10 Python
Python处理PDF与CDF实例
2020/02/26 Python
基于Python3读写INI配置文件过程解析
2020/07/23 Python
Python列表元素删除和remove()方法详解
2021/01/04 Python
浅析两列自适应布局的3种思路
2016/05/03 HTML / CSS
css3打造一款漂亮的卡哇伊按钮
2013/03/20 HTML / CSS
AssertionError 跟一下那个类是 “is – a”的关系
2012/02/21 面试题
运动会闭幕式解说词
2014/02/21 职场文书
高中军训感言1000字
2014/03/01 职场文书
客服专员岗位职责
2015/02/10 职场文书
乡镇党建工作总结2015
2015/05/19 职场文书
2015年关爱留守儿童工作总结
2015/05/22 职场文书
宿舍卫生管理制度
2015/08/05 职场文书
汽车销售合同文本
2019/08/08 职场文书
html5中sharedWorker实现多页面通信的示例代码
2021/05/07 Javascript