简单实现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 相关文章推荐
JavaScript中“+”的陷阱深刻理解
Dec 04 Javascript
js获取GridView中行数据的两种方法 分享
Jul 13 Javascript
JavaScript中的Math.sin()方法使用详解
Jun 15 Javascript
浅析js的模块化编写 require.js
Dec 07 Javascript
BootStrap整体框架之基础布局组件
Dec 15 Javascript
详解JavaScript常量定义
Jan 03 Javascript
js中的闭包学习心得
Feb 06 Javascript
webpack打包node.js后端项目的方法
Mar 10 Javascript
解决vuecli3.0热更新失效的问题
Sep 19 Javascript
vue实现简单加法计算器
Oct 22 Javascript
nuxt 自定义 auth 中间件实现令牌的持久化操作
Nov 05 Javascript
vue本地构建热更新卡顿的问题“75 advanced module optimization”完美解决方案
Aug 05 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
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
PHP使用HTML5 FileApi实现Ajax上传文件功能示例
2019/07/01 PHP
laravel框架select2多选插件初始化默认选中项操作示例
2020/02/18 PHP
js判断变量是否空值的代码
2008/10/26 Javascript
编写高性能的JavaScript 脚本的加载与执行
2010/04/19 Javascript
改进UCHOME的记录发布,增强可访问性用户体验
2011/01/17 Javascript
Ext JS添加子组件的误区探讨
2013/06/28 Javascript
jquery中的ajax方法怎样通过JSONP进行远程调用
2014/05/04 Javascript
AngularJS入门教程之控制器详解
2016/07/27 Javascript
JS基于递归实现倒计时效果的方法
2016/11/26 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
bootstrap table插件动态加载表头
2019/07/19 Javascript
JS中的算法与数据结构之链表(Linked-list)实例详解
2019/08/20 Javascript
vue 组件销毁并重置的实现
2020/01/13 Javascript
[01:01:51]EG vs VG Supermajor小组赛B组 BO3 第二场 6.2
2018/06/03 DOTA
python 编码规范整理
2018/05/05 Python
对pandas中to_dict的用法详解
2018/06/05 Python
django创建最简单HTML页面跳转方法
2019/08/16 Python
Python双链表原理与实现方法详解
2020/02/22 Python
使用python的turtle函数绘制一个滑稽表情
2020/02/28 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
Pandas之缺失数据的实现
2021/01/06 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
可贵的沉默教学反思
2014/02/06 职场文书
英语教学随笔感言
2014/02/20 职场文书
2014年国培研修感言
2014/03/09 职场文书
实习报告评语
2014/04/26 职场文书
大学新生入学教育方案
2014/05/16 职场文书
公共场所禁烟倡议书
2014/08/30 职场文书
毕业证明模板
2015/06/19 职场文书
值班管理制度范本
2015/08/06 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
Python+Tkinter打造签名设计工具
2022/04/01 Python