当前位置: 首页 > news >正文

运用JS实现放大镜功能

  1 <html>
  2 <head>
  3     <title>放大镜</title>
  4     <meta charset="UTF-8"/>
  5     <style type="text/css">
  6         *{
  7             padding: 0;
  8             margin: 0;
  9         }
 10         #left{
 11             width: 400px;
 12             height: 250px;
 13             border: 1px black dashed;
 14             margin: 20px 20px;
 15             position: relative;
 16             float: left;
 17         }
 18         #bac{
 19             /*占据父元素的百分百*/
 20             width: 100%;
 21             height: 100%;
 22             background-image: url(img/1.jpg);/*此处需要放大的图片*/
 23             background-size: 100%;
 24             position: absolute;
 25         }
 26         #draw{
 27             width: 100px;
 28             height: 100px;
 29             background-color: black;
 30             opacity: 0.3;/*设置透明度*/
 31             position: absolute;
 32             cursor: move;
 33             
 34         }
 35         #right{
 36             width: 200px;
 37             height: 200px;
 38             border: 2px red dashed;
 39             position: absolute;
 40             left: 440px;
 41             top: 20px;
 42             float: left;
 43             overflow: hidden;/*当子元素超过父元素大小的时候如何显示*/
 44             /*该属性可以控制元素的隐藏和出现:none 和 block */
 45             display: none; 
 46         }
 47         #right img{
 48             width: 800px;
 49             height: 500px;
 50         }
 51     </style>
 52 </head>
 53 <body>
 54     <div id = 'left'>
 55         <div id="bac"></div>
 56         <div id = 'draw'></div>
 57     </div>
 58     <div id='right'>
 59         <img src="img/1.jpg"><!--此处插入高清大图-->
 60     </div>
 61     <script type="text/javascript">
 62         var left = document.getElementById("left");
 63         var right = document.getElementById("right");
 64         var draw=document.getElementById("draw");
 65         var maxTop=left.offsetHeight-draw.offsetHeight;
 66         var maxLeft=left.offsetWidth-draw.offsetWidth;
 67         left.onmousemove = function(e){
 68             // 通过鼠标事件的坐标来设置draw的left值和top值
 69             // endx是滤镜的最终left值
 70             var endx = e.pageX - left.offsetLeft - draw.offsetWidth/2;
 71             var endy = e.pageY - left.offsetTop - draw.offsetHeight/2;
 72             // 边界检查
 73             if (endx>maxLeft) {
 74                 endx = maxLeft;
 75             }
 76             else if(endx<0){
 77                 endx = 0;
 78             }
 79             if (endy>maxTop) {
 80                 endy = maxTop;
 81             }
 82             else if(endy<0){
 83                 endy = 0;
 84             }
 85             draw.style.left = endx+'px';
 86             draw.style.top = endy+'px';
 87             //右大图的滚动
 88             var num = 800/400;
 89             right.scrollLeft = draw.offsetLeft * num;
 90             right.scrollTop = draw.offsetTop * num;
 91         }
 92         
 93         left.onmouseover = function(){
 94             right.style.display="block";
 95             draw.style.display="block";
 96         };
 97         left.onmouseout = function(){
 98             right.style.display="none";
 99             draw.style.display="none";
100         };
101 
102     </script>
103 </body>
104 </html>

 

成果展示:

 

 此功能实现的原理是,在左边插入缩小后的图片,右边则插入高清原图,在左边的半透明滤镜拖动的同时,右边的图片也进行移动,从而形成放大镜效果,解释图如下:

 

转载于:https://www.cnblogs.com/zmsister/p/6411905.html

相关文章:

  • Python Day4
  • Monty Hall 问题与贝叶斯定理的理解
  • 更改backend
  • 39条常见的Linux系统简单面试题
  • mybatis动态sql中的trim标签的使用
  • 开源一个封装AFNetworking的网络框架 - SJNetwork
  • 我的学习计划
  • 03 UITableView 刚进来的时候无法滚动到到底部
  • Asp.Net WebApi服务端解决跨域方案
  • 029——VUE中键盘语义修饰符
  • Google 是如何开发 Web 框架的
  • 46.2. HTML 处理
  • delphi2010 开发及调试WebService 实例
  • pyhon3.0 day01 变量、输入、输出、循环
  • 【BZOJ3675】【APIO2014】序列分割 [斜率优化DP]
  • 《用数据讲故事》作者Cole N. Knaflic:消除一切无效的图表
  • 【159天】尚学堂高琪Java300集视频精华笔记(128)
  • go语言学习初探(一)
  • interface和setter,getter
  • isset在php5.6-和php7.0+的一些差异
  • JavaWeb(学习笔记二)
  • js 实现textarea输入字数提示
  • laravel5.5 视图共享数据
  • nginx 配置多 域名 + 多 https
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • spring-boot List转Page
  • VuePress 静态网站生成
  • 测试如何在敏捷团队中工作?
  • 大整数乘法-表格法
  • 盘点那些不知名却常用的 Git 操作
  • 视频flv转mp4最快的几种方法(就是不用格式工厂)
  • 一文看透浏览器架构
  • 译自由幺半群
  • 最简单的无缝轮播
  • Hibernate主键生成策略及选择
  • ​什么是bug?bug的源头在哪里?
  • #pragma pack(1)
  • #免费 苹果M系芯片Macbook电脑MacOS使用Bash脚本写入(读写)NTFS硬盘教程
  • $$$$GB2312-80区位编码表$$$$
  • (python)数据结构---字典
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (离散数学)逻辑连接词
  • (论文阅读30/100)Convolutional Pose Machines
  • (转)关于如何学好游戏3D引擎编程的一些经验
  • (轉貼)《OOD启思录》:61条面向对象设计的经验原则 (OO)
  • ****** 二十三 ******、软设笔记【数据库】-数据操作-常用关系操作、关系运算
  • *ST京蓝入股力合节能 着力绿色智慧城市服务
  • .NET 4.0中的泛型协变和反变
  • .net core控制台应用程序初识
  • .Net IE10 _doPostBack 未定义
  • .NET Remoting Basic(10)-创建不同宿主的客户端与服务器端
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • .vue文件怎么使用_我在项目中是这样配置Vue的