简单实现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 相关文章推荐
快速查找数组中的某个元素并返回下标示例
Sep 03 Javascript
jQuery选择器全集详解
Nov 24 Javascript
基于js实现投票的实例代码
Aug 04 Javascript
Web开发必知Javascript技巧大全
Feb 23 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
使用jQuery ajaxupload插件实现无刷新上传文件
Apr 23 jQuery
浅谈JS中的常用选择器及属性、方法的调用
Jul 28 Javascript
基于jQuery实现定位导航位置效果
Nov 15 jQuery
Vue 项目代理设置的优化
Apr 17 Javascript
详解angularjs4部署文件过大解决过程
Dec 05 Javascript
利用js实现简易红绿灯
Oct 15 Javascript
Vue 实现一个简单的鼠标拖拽滚动效果插件
Dec 10 Vue.js
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读取30天之内的根据算法排序的代码
2008/04/06 PHP
PHP抓取、分析国内视频网站的视频信息工具类
2014/04/02 PHP
Yii模型操作之criteria查找数据库的方法
2016/07/15 PHP
gearman中worker常驻后台,导致MySQL server has gone away的解决方法
2020/02/27 PHP
JQuery困惑—包装集 DOM节点
2009/10/16 Javascript
一个基于jquery的图片切换效果
2010/07/06 Javascript
JavaScript 数组详解
2013/10/10 Javascript
网页防止tab键的使用快速解决方法
2013/11/07 Javascript
ExtJS4给Combobox设置列表中的默认值示例
2014/05/02 Javascript
浅谈javascript中this在事件中的应用
2015/02/15 Javascript
JavaScript调用客户端Java程序的方法
2015/07/27 Javascript
Bootstrap编写一个兼容主流浏览器的受众门户式风格页面
2016/07/01 Javascript
浅谈js中子页面父页面方法 变量相互调用
2016/08/04 Javascript
jQuery图片加载显示loading效果
2016/11/04 Javascript
基于Vue单文件组件详解
2017/09/15 Javascript
Vue组件的使用教程详解
2018/01/05 Javascript
浅谈Vue 数据响应式原理
2018/05/07 Javascript
Vue 设置axios请求格式为form-data的操作步骤
2019/10/29 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
JavaScript工具库MyTools详解
2020/01/01 Javascript
JavaScript canvas绘制渐变颜色的矩形
2020/02/18 Javascript
vue 递归组件的简单使用示例
2021/01/14 Vue.js
[50:01]Ti4 冒泡赛第二天 NEWBEE vs Titan
2014/07/15 DOTA
Python抓取京东图书评论数据
2014/08/31 Python
Django Admin实现上传图片校验功能
2016/03/06 Python
Django Admin中增加导出Excel功能过程解析
2019/09/04 Python
浅谈Python中的异常和JSON读写数据的实现
2020/02/27 Python
python爬虫利用selenium实现自动翻页爬取某鱼数据的思路详解
2020/12/22 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
Chemist Warehouse中文网:澳洲连锁大药房
2021/02/05 全球购物
护理学毕业生自荐信
2013/10/02 职场文书
继承权公证书
2014/04/09 职场文书
供货协议书范本
2014/04/22 职场文书
2019公司借款合同范本2篇!
2019/07/24 职场文书
晶体管来复再生式二管收音机
2021/04/22 无线电
Python打包exe时各种异常处理方案总结
2021/05/18 Python