简单实现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 相关文章推荐
ajax无刷新动态调用股票信息(改良版)
Nov 01 Javascript
javascript 广告后加载,加载完页面再加载广告
Nov 25 Javascript
document.all的一个比较完整的总结及案例
Jan 31 Javascript
基于datagrid框架的查询
Apr 08 Javascript
利用ajaxfileupload插件实现文件上传无刷新的具体方法
Jun 08 Javascript
js简单倒计时实现代码
Apr 30 Javascript
微信小程序 登录实例详解
Jan 16 Javascript
JavaScript编写棋盘覆盖代码详解
Aug 28 Javascript
react学习笔记之state以及setState的使用
Dec 07 Javascript
JavaScript实现身份证验证代码实例
Aug 26 Javascript
javascript的惯性运动实现代码实例
Sep 07 Javascript
extjs图形绘制之饼图实现方法分析
Mar 06 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 和 MySQL 基础教程(一)
2006/10/09 PHP
PHP stream_context_create()作用和用法分析
2011/03/29 PHP
Yii控制器中filter过滤器用法分析
2016/07/15 PHP
PHP数组中头部和尾部添加元素的方法(array_unshift,array_push)
2017/04/10 PHP
Laravel框架使用Seeder实现自动填充数据功能
2018/06/13 PHP
飞鱼(shqlsl) javascript作品集
2006/12/16 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
2012/02/27 Javascript
JS实现图片放大镜效果的方法
2015/02/27 Javascript
基于jQuery+PHP+Mysql实现在线拍照和在线浏览照片
2015/09/06 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
JavaScript中变量提升与函数提升经典实例分析
2018/07/26 Javascript
vue调试工具vue-devtools安装及使用方法
2018/11/07 Javascript
jQuery实现的3D版图片轮播示例【滑动轮播】
2019/01/18 jQuery
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[01:07:21]NAVI vs VG Supermajor 败者组 BO3 第二场 6.5
2018/06/06 DOTA
利用Hyperic调用Python实现进程守护
2018/01/02 Python
Python使用Scrapy爬虫框架全站爬取图片并保存本地的实现代码
2018/03/04 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
python elasticsearch从创建索引到写入数据的全过程
2019/08/04 Python
python for循环remove同一个list过程解析
2019/08/14 Python
详解python3中用HTMLTestRunner.py报ImportError: No module named 'StringIO'如何解决
2019/08/27 Python
浅谈pymysql查询语句中带有in时传递参数的问题
2020/06/05 Python
python中元组的用法整理
2020/06/15 Python
HTML5离线应用与客户端存储的实现
2018/05/03 HTML / CSS
澳大利亚制造的蜡烛和扩散器:Glasshouse Fragrances
2018/05/20 全球购物
美国在线医疗分销商:MedEx Supply
2020/02/04 全球购物
商得四方公司面试题(gid+)
2014/04/30 面试题
MYSQL相比于其他数据库有哪些特点
2013/07/19 面试题
应届生文秘专业个人自荐信格式
2013/09/21 职场文书
办公室文书岗位职责
2013/12/16 职场文书
学习决心书范文
2014/03/11 职场文书
市级优秀班主任事迹材料
2014/05/13 职场文书
迎新春趣味活动方案
2014/08/24 职场文书
用人单位终止解除劳动合同证明书
2014/10/06 职场文书
新教师个人总结
2015/02/06 职场文书
「约定的梦幻岛」作画发布诺曼生日新绘
2022/03/21 日漫