简单实现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实现页面自适应
Jan 19 Javascript
Javascript 获取LI里的内容
Dec 17 Javascript
利用jQuery插件扩展识别浏览器内核与外壳的类型和版本的实现代码
Oct 22 Javascript
js控制分页打印、打印分页示例
Feb 08 Javascript
JS动态修改iframe高度和宽度的方法
Apr 01 Javascript
JS实现表单中checkbox对勾选中增加边框显示效果
Aug 21 Javascript
Vue组件模板形式实现对象数组数据循环为树形结构(实例代码)
Jul 31 Javascript
vue回到顶部监听滚动事件详解
Aug 02 Javascript
在Layui中实现开关按钮的效果实例
Sep 29 Javascript
javascript实现摄像头拍照预览
Sep 30 Javascript
vue 出现data-v-xxx的原因及解决
Aug 04 Javascript
vant自定义二级菜单操作
Nov 02 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 返回13位时间戳的实现代码
2016/05/13 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
Javascript 八进制转义字符(8进制)
2011/04/08 Javascript
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
javascript中的return和闭包函数浅析
2014/06/06 Javascript
JavaScript中匿名、命名函数的性能测试
2014/09/04 Javascript
javascript操作数组详解
2014/12/17 Javascript
JS实现控制表格行内容垂直对齐的方法
2015/03/30 Javascript
利用vue.js插入dom节点的方法
2017/03/15 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
移动端效果之IndexList详解
2017/10/20 Javascript
vue基于mint-ui的城市选择3级联动的示例
2017/10/25 Javascript
在vue项目中集成graphql(vue-ApolloClient)
2018/09/08 Javascript
ES6小技巧之代替lodash
2019/06/07 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
antd Select下拉菜单动态添加option里的内容操作
2020/11/02 Javascript
[47:04]LGD vs infamous Supermajor小组赛D组 BO3 第二场 6.3
2018/06/04 DOTA
判断网页编码的方法python版
2016/08/12 Python
Python实现将不规范的英文名字首字母大写
2016/11/15 Python
python+opencv像素的加减和加权操作的实现
2019/07/14 Python
Python图像处理PIL各模块详细介绍(推荐)
2019/07/17 Python
PyQt5基本控件使用之消息弹出、用户输入、文件对话框的使用方法
2019/08/06 Python
python创建学生成绩管理系统
2019/11/22 Python
Python 中的pygame安装与配置教程详解
2020/02/10 Python
python实现提取COCO,VOC数据集中特定的类
2020/03/10 Python
英国排名第一的宠物店:PetPlanet
2020/02/02 全球购物
Linux开机引导的步骤是什么
2014/02/26 面试题
实习生体会的自我评价范文
2013/11/28 职场文书
承办会议欢迎词
2014/01/17 职场文书
电气工程及其自动化专业毕业生自荐信
2014/06/21 职场文书
公证书格式
2015/01/23 职场文书
关于清明节的演讲稿2015
2015/03/18 职场文书
酒店厨房管理制度
2015/08/06 职场文书
结婚喜宴祝酒词
2015/08/10 职场文书
Win10 和 Win11可以共存吗? win10/11产品生命周期/服务更新介绍
2021/11/21 数码科技
MYSQL中文乱码问题的解决方案
2022/06/14 MySQL