原生JS实现图片的放大镜效果
2017-03-16 16:27
841 查看
实现效果 : 将鼠标移动至图片时,在图片一侧显示鼠标周围位置对应的大图.大图随着鼠标的移动相应改变,鼠标移出时大图消失.
思路 :
1.将浏览的图片,放大后的图片,及鼠标周围的方块布局完成;
2.获取事件对象中的鼠标位置(left,top),通过简单的计算,得到鼠标周围方块的时时位置;
3.根据方块与图片的比例和大图所在块的尺寸与大图的比例,计算得到大图的时时位置;
4.添加鼠标移入移出事件.
值得注意的是 : 当触发onmousemove事件时,浏览器会判断鼠标与事件源之间是否存在子元素,若存在将会吧子元素作为事件源,因此导致方块乱跳现象.处理办法为 : 在图片块中加入一个带有定位属性,尺寸与图片块相同的块,将透明度设为0,这样就隔绝了鼠标下的方块,其实相当于事件源也发生了改变.
完整代码如下:
以上内容学习参考了后盾网孙琪峥老师的公共教学资源,侵权删.
欢迎指导交流.
思路 :
1.将浏览的图片,放大后的图片,及鼠标周围的方块布局完成;
2.获取事件对象中的鼠标位置(left,top),通过简单的计算,得到鼠标周围方块的时时位置;
3.根据方块与图片的比例和大图所在块的尺寸与大图的比例,计算得到大图的时时位置;
4.添加鼠标移入移出事件.
值得注意的是 : 当触发onmousemove事件时,浏览器会判断鼠标与事件源之间是否存在子元素,若存在将会吧子元素作为事件源,因此导致方块乱跳现象.处理办法为 : 在图片块中加入一个带有定位属性,尺寸与图片块相同的块,将透明度设为0,这样就隔绝了鼠标下的方块,其实相当于事件源也发生了改变.
完整代码如下:
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <style type="text/css"> *{ /*全局重置*/ padding: 0; margin: 0; } #box{ position: relative; /*这里也可以使用绝对属性*/ width: 400px; height: 300px; margin: 110px; background: url(/JS练习/DOM/pics/2.jpg); cursor: crosshair; /*改变鼠标样式*/ } #sbox{ position: absolute; left: 0; top: 0; width: 200px; height: 150px; background: thistle; opacity: 0.55; /*设置透明度,符合w3c规范*/ filter: alpha(opacity=55); /*低版本IE标准*/ display: none; /*设置不可见*/ } #big{ position: absolute; left: 550px; top: 100px; display: none; width: 400px; height: 300px; border: 1px darkgray solid; overflow: hidden; /*图片溢出隐藏*/ } #rpic{ position: absolute; left: 0; top: 0; } #cover{ position: absolute; left: 0; top: 0; width: 400px; height: 300px; background: black; opacity: 0; filter: alpha(opacity=0); } </style> <script type="text/javascript"> window.onload=function(){ //加载页面 var box = document.getElementById("box"); //抓取元素 var rpic = document.getElementById("rpic"); var sbox = document.getElementById("sbox"); var cover = document.getElementById("cover"); cover.onmousemove=function(e){ //绑定鼠标移动时间 var ev = window.event || e ; //事件对象的兼容性写法 var evx = ev.offsetX ||ev.layerX; //获得鼠标离相对最近定位属性的左边距 var evy = ev.offsetY ||ev.layerY; //获得上边距 document.title=evx +'|'+evy; //在title中显示 var box_x = evx-100; //计算小方块的边距 var box_y = evy-75; if (box_x<0) { //赋值前判断方块是否出界并处理 box_x=0; } if (box_x>200) { box_x=200; } if (box_y<0) { box_y=0; } if (box_y>150) { box_y=150; } big.style.display='block'; //改变属性,使鼠标移入时图片显示 sbox.style.display='block'; sbox.style.left=box_x+'px'; //赋值新位置 sbox.style.top=box_y+'px'; var rpic_x=-2*box_x; //得到大图的时时定位数据 var rpic_y=-2*box_y; rpic.style.left=rpic_x+'px'; rpic.style.top=rpic_y+'px'; } box.onmouseout=function(){ //绑定移出事件 big.style.display='none'; sbox.style.display='none'; } } </script> </head> <body> <div id="box"> <!--图片的div--> <div id="sbox"></div> <!--方块的div--> <div id="cover"></div> <!--透明层的div--> </div> <div id="big" > <!--放置大图的div--> <img src="/JS练习/DOM/pics/2b.jpg" id='rpic' /> <!--加入图片--> </div> </body> </html>
以上内容学习参考了后盾网孙琪峥老师的公共教学资源,侵权删.
欢迎指导交流.
相关文章推荐
- JS实现图片放大镜效果的方法
- 原生JS实现图片轮播与淡入效果的简单实例
- JS原生代码实现鼠标移动图片随之移动效果(另加点击改变图片效果)
- 原生js实现放大镜效果
- 原生JS实现隐藏显示图片 JS实现点击切换图片效果
- 原生JS实现简单的放大镜效果
- 原生JS实现图片轮滚效果
- 原生JS实现图片轮播切换效果
- 原生JS实现拖拽图片效果
- JS(jquery)实现图片放大镜效果
- JS(jquery)实现图片放大镜效果
- JS实现图片放大镜效果的方法
- 原生JS实现拖拽图片效果
- 原生js实现图片层叠轮播切换效果
- 原生js实现淘宝放大镜效果
- 原生js模仿京东图片放大镜效果
- 原生js实现图片的3d效果,附上源码
- 原生js - 图片放大镜效果
- 原生js的放大镜怎么做,怎么实现放大镜效果_n倍放大镜
- 原生js放大镜效果实现