javascript--淘宝页面的放大镜效果
2019-01-15 07:03:46来源:博客园 阅读 ()
放大镜效果需求:
鼠标放入原图中,会出现一个黄色的遮盖层和一个放大的图片,鼠标移动时候,遮盖层会跟着鼠标一起移动,同时放大的图片会跟着一起移动。
实现过程:
1.鼠标移入,遮盖层和大图片显示
2.鼠标离开,遮盖层和大图片隐藏
3.鼠标移动的时候,遮盖层和鼠标对应移动
4.遮盖层移动时候,大图片跟着移动
效果图:
原图 放大镜效果图
实现思路:
一、通过设置display属性,让遮盖层和大图片显示(block)和隐藏(none)。
二、获取鼠标在装有的小图片的盒子中的位置,并将该值赋给遮盖层的style.top和style.left属性,即让遮盖层和鼠标移动中位置相等。
三、注意设置遮盖层不能超过小盒子边框。
四、遮盖层移动,让大盒子中的图片跟着移动,大盒子移动位置需要利用数学方法计算。遮盖层移动距离/遮盖层最大移动距离=大图片移动位置/大图片最大移动距离
注意知识点:
一、样式设置
①装大图片的盒子必须设置长宽,如果不设置,大图片不会显示。
②装大图片盒子必须设置overflow:hidden,如果不设置,大图片位置不会固定,在网页总乱动。
③相对定位和绝对定位设置,遵循子绝父相
二、兼容性设置
①事件对象e的兼容性
②位置坐标的兼容性
③鼠标移入和鼠标移出兼容性
onmouseover \ onmouseout 和 onmouseenter \ onmouseleave,前一组对谷歌浏览器放心使用,但是在IE浏览器中会出现bug,起因是事件冒泡,所以选择后面一组。
上述两组事件在不触发事件冒泡的情况下表现是一样的,但是前一组会触发事件冒泡,后一组不会触发事件冒泡。
代码如下:
1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="utf-8"> 5 <title>淘宝放大镜效果</title> 6 7 <style type="text/css"> 8 *{ 9 padding: 0px; 10 margin: 0px; 11 } 12 13 .box{ 14 margin: 100px; 15 width: 350px; 16 height: 350px; 17 position: relative; 18 border: solid 1px gray; 19 } 20 21 .cover{ 22 width: 150px; 23 height: 150px; 24 opacity: 0.3; 25 background-color: yellow; 26 position: absolute; 27 top: 0px; 28 left: 0px; 29 display: none; 30 } 31 32 .big{ 33 position: absolute; 34 top: 0px; 35 left: 360px; 36 display: none; 37 overflow: hidden; 38 height: 400px; 39 width: 400px; 40 } 41 42 .big img{ 43 position: absolute; 44 } 45 </style> 46 </head> 47 <body> 48 <!-- 一个大盒子,用以控制位置 --> 49 <div id="box" class="box"> 50 <!-- 小图片盒子 --> 51 <div class="small"> 52 <img src="images/small.jpg" width="350px"> 53 <!-- 遮盖层 --> 54 <div class="cover"></div> 55 </div> 56 <!-- 大图片 --> 57 <div class="big"> 58 <img src="images/big.jpg" width="600px"> 59 </div> 60 </div> 61 62 <script type="text/javascript"> 63 // 1.获取需要操作的元素 64 var box=document.getElementById('box'); 65 var smallBox=box.children[0]; 66 var bigBox=box.children[1]; 67 var cover=smallBox.children[1]; 68 var bigImage=bigBox.children[0]; 69 //2.鼠标移动进入小盒子,遮盖层和大图片出现 70 box.onmouseenter=function(){ 71 cover.style.display="block"; 72 bigBox.style.display="block"; 73 } 74 //3.鼠标离开小盒子,遮盖层和大图片隐藏 75 box.onmouseleave=function(){ 76 cover.style.display="none"; 77 bigBox.style.display="none"; 78 } 79 80 //4.鼠标移动,遮盖层跟着移动,并且鼠标点位于遮盖层的中心位置 81 box.onmousemove=function(e){ 82 e = e || window.event; 83 //实现思路:鼠标在盒子中的位置=鼠标在文档中位置-盒子位置 84 var mouse_in_documentX=e.pageX || e.clientX + (document.documentElement.scrollLeft || document.body.scrollLeft); 85 var mouse_in_documentY=e.pageY || e.clientY+(document.documentElement.scrollTop || document.body.scrollTop); 86 //鼠标在盒子中的位置,就是遮盖层的位置 87 var mouse_in_boxX=mouse_in_documentX-box.offsetLeft; 88 var mouse_in_boxY=mouse_in_documentY-box.offsetTop; 89 //让鼠标位于遮盖层的中央 90 var coverX=mouse_in_boxX - cover.offsetWidth/2 ; 91 var coverY=mouse_in_boxY - cover.offsetHeight/2; 92 //遮盖层不能超过小盒子范围 93 coverX= ( coverX < 0 ) ? 0 : coverX; 94 coverY= ( coverY < 0 ) ? 0 : coverY; 95 coverX=( coverX > ( box.offsetWidth - cover.offsetWidth)) ? ( box.offsetWidth - cover.offsetWidth) : coverX; 96 coverY=( coverY > ( box.offsetHeight - cover.offsetHeight)) ? ( box.offsetHeight - cover.offsetHeight) : coverY; 97 cover.style.top=coverY + 'px'; 98 cover.style.left=coverX + 'px'; 99 //当遮盖层移动的时候,大图片跟着遮盖层移动(比例关系换算问题) 100 //公式:遮盖层移动距离/遮盖层最大移动距离=大图片移动距离/大图片最大移动距离 101 //故:大图片移动距离=遮盖层移动距离/遮盖层最大移动距离*大图片最大移动距离 102 103 //遮盖层最大距离 104 var coverMax=box.offsetWidth-cover.offsetWidth; 105 //大图片最大移动距离 106 var bigImageMax=bigImage.offsetWidth-bigBox.offsetWidth; 107 108 var bigImageX=coverX*bigImageMax/coverMax; 109 var bigImageY=coverY*bigImageMax/coverMax; 110 111 bigImage.style.top=-bigImageY+'px'; 112 bigImage.style.left=-bigImageX+'px'; 113 } 114 </script> 115 </body> 116 </html>
原文链接:https://www.cnblogs.com/WangYujie1994/p/10270439.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:Vue-指令
- js调用刷新界面的几种方式 2020-03-05
- 默认让页面的第一个控件选中的javascript代码 2020-02-20
- Div自动滚动到末尾的代码 2019-11-23
- html页面包含共享页面的方法 2019-11-17
- JS注册页面的简单实例 2019-09-23
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash