简单实现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 相关文章推荐
jquery提升性能最佳实践小结
Dec 06 Javascript
node.js中的fs.lchownSync方法使用说明
Dec 16 Javascript
js中键盘事件实例简析
Jan 10 Javascript
JavaScript动态创建div等元素实例讲解
Jan 06 Javascript
学习JavaScript设计模式之观察者模式
Apr 22 Javascript
JavaScript的String字符串对象常用操作总结
May 26 Javascript
jQuery中的一些常见方法小结(推荐)
Jun 13 Javascript
纯JS实现轮播图
Feb 22 Javascript
jQuery插件FusionCharts绘制2D环饼图效果示例【附demo源码】
Apr 10 jQuery
实现一个完整的Node.js RESTful API的示例
Sep 29 Javascript
ES6 中可以提升幸福度的小功能
Aug 06 Javascript
带你使用webpack快速构建web项目的方法
Nov 12 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 Memcache 中实现消息队列
2009/11/24 PHP
解析php通过cookies获取远程网页的指定代码
2013/06/25 PHP
php检测iis环境是否支持htaccess的方法
2014/02/18 PHP
Windows下Apache + PHP SESSION丢失的解决过程全纪录
2015/04/07 PHP
PHP面向对象之后期静态绑定功能介绍
2015/05/18 PHP
php基本函数汇总
2015/07/09 PHP
mysql查找删除重复数据并只保留一条实例详解
2016/09/24 PHP
php获取手机端的号码以及ip地址实例代码
2018/09/12 PHP
JS在IE和FF下attachEvent,addEventListener学习笔记
2009/11/26 Javascript
基于jquery的鼠标拖动效果代码
2012/05/30 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
d3.js实现简单的网络拓扑图实例代码
2016/11/06 Javascript
使用微信内嵌H5网页解决JS倒计时失效问题
2017/01/13 Javascript
cropper js基于vue的图片裁剪上传功能的实现代码
2018/03/01 Javascript
js中的数组对象排序分析
2018/12/11 Javascript
微信小程序调用天气接口并且渲染在页面过程详解
2019/06/24 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
小程序实现图片预览裁剪插件
2019/11/22 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
Python实现并行抓取整站40万条房价数据(可更换抓取城市)
2016/12/14 Python
python简易实现任意位数的水仙花实例
2018/11/13 Python
python集合删除多种方法详解
2020/02/10 Python
使用python实现时间序列白噪声检验方式
2020/06/03 Python
Nike荷兰官方网站:Nike.com (NL)
2018/04/19 全球购物
Crabtree & Evelyn英国官网:瑰珀翠护手霜、香水、沐浴和身体护理
2018/04/26 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
AJAX都有哪些有点和缺点
2012/11/03 面试题
护理专科自荐书范文
2014/02/18 职场文书
陈胜吴广起义口号
2014/06/20 职场文书
党的群众路线教育实践活动对照检查材料思想汇报(党员篇)
2014/09/25 职场文书
广告设计专业毕业生自我鉴定
2014/09/27 职场文书
奔腾年代观后感
2015/06/09 职场文书
如何写通讯稿
2015/07/22 职场文书
清明扫墓感想
2015/08/11 职场文书
2016公司新年问候语
2015/11/11 职场文书
pytorch 预训练模型读取修改相关参数的填坑问题
2021/06/05 Python