JavaScript实现放大镜效果
来源:互联网 发布:apk文件提取直播源码 编辑:程序博客网 时间:2024/06/04 18:12
HTML布局:
<div id="parent"> <div id="left"> <img id="img_350" src="./images_350/f14b276feb925fbfeb8a59e916ba5045.jpg"> <div id = "inner"></div> </div> <div id="right"> <img id="img_800" src="./images_800/f14b276feb925fbfeb8a59e916ba5045.jpg"> </div> <ul id="ul"> <li><img src="./images_50/f14b276feb925fbfeb8a59e916ba5045.jpg"></li> <li><img src="./images_50/cbd2bbb835886ebde917fe1fc553c034.jpg"></li> <li><img src="./images_50/e32f5c3cea966515c9aaea991517cea2.jpg"></li> </ul></div>
CSS:
body{ margin: 100px;}ul { margin: 10px 0 0 0; padding: 0; display: block; height: 100px; list-style: none;}div { margin: 0; padding: 0;}#parent { width: 800px; height: 800px;}#parent li { display: inline-block; width: 50px; height: 50px; margin-right: 10px; border: 1px solid #cccccc;}#parent li:hover { cursor: pointer;}#left { width: 350px; height: 350px; position: relative; border: 1px solid #cccccc; display: inline-block;}#right { width: 350px; height: 350px; border: 1px solid #cccccc; display: inline-block; /*溢出部分隐藏*/ overflow: hidden; display: none; position: relative;}#inner { /* *与倍率有关 *放大镜:小图 = 小图:大图 */ width: 153.125957px; height: 153.125957px; position: absolute; top: 0; left: 0; background-color: blue; opacity: 0.4; /*开始时隐藏*/ display: none;}#img_800 { position: absolute; top: 0; left: 0;}
JS:
window.onload = function() { //大图 var img_800 = document.getElementById('img_800'); //小图 var img_350 = document.getElementById('img_350'); //小图父元素 var left = document.getElementById('left'); //放大镜 var inner = document.getElementById('inner'); //大图父元素 var right = document.getElementById('right'); //图片列表,用作切换图片 var ul = document.getElementById('ul'); //切换图片 setEvent(ul, 'click', function(event){ if(event.target.nodeName === "IMG") { var image_350 = "./images_350/" + event.target.src.substring(event.target.src.lastIndexOf("/") + 1); var image_800 = "./images_800/" + event.target.src.substring(event.target.src.lastIndexOf("/") + 1); img_350.src = image_350; img_800.src = image_800; } }); setEvent(left, 'mousemove', function(e){ var event = e || window.event; //鼠标移入时显示大图和放大镜 inner.style['display'] = "inline-block"; right.style['display'] = 'inline-block'; inner.style['cursor'] = 'crosshair'; //获取滚动距离,clientX和clientY与浏览器滚动与否无关,所以要获取真正的光标坐标应当加上滚动值 var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; var scrollLeft = document.documentElement.scrollLeft || document.body.scrollLeft; //计算放大镜的相对于父元素的left和top值,光标应处于放大镜中间,所以多减了1/2的放大镜尺寸 var x = ((event.clientX + scrollLeft) - left.offsetLeft) - inner.offsetWidth/2; var y = ((event.clientY + scrollTop) - left.offsetTop) - inner.offsetHeight/2; //越界处理 if(x < 0) { x = 0; }else if(x > left.offsetWidth - inner.offsetWidth) { x = left.offsetWidth - inner.offsetWidth } if(y < 0) { y = 0; }else if(y > left.offsetHeight - inner.offsetHeight) { y = left.offsetHeight - inner.offsetHeight; } var scope = 800/350; //大图相对于父元素的移动方向与放大镜的移动方向相反(溢出部分隐藏了的,如果移动方向相同,显示的是空白部分) var img_x = -(x * scope); var img_y = -(y * scope); inner.style['left'] = x + "px"; inner.style['top'] = y + "px"; img_800.style['left'] = img_x + "px"; img_800.style['top'] = img_y + "px"; }); setEvent(left, 'mouseout', function(event){ //当鼠标移出时隐藏光标和放大图 inner.style['display'] = "none"; right.style['display'] = 'none'; }); function setEvent(dom, event, fun) { if(dom.addEventListener) { dom.addEventListener(event, fun, false); }else if(dom.attachEvent) { //兼容IE8及以下 dom.attachEvent("on" + event, fun); }else { dom["on" + event] = fun; } }}
效果图:
阅读全文
0 0
- JavaScript 实现放大镜效果
- JavaScript实现放大镜效果
- JavaScript实现放大镜效果demo
- javascript实现图片放大镜效果
- JavaScript实现的放大镜放大图片效果
- Javascript实现图片的放大镜功能效果
- javascript放大镜效果的简单实现
- JavaScript实现的网页放大镜效果
- 原生javascript 简易实现放大镜效果
- 原生javaScript实现淘宝放大镜效果
- javascript放大镜效果
- JavaScript图片放大镜效果
- javascript放大镜效果
- JavaScript放大镜效果
- 实现放大镜的效果
- android放大镜效果实现
- JS实现放大镜效果
- 实现放大镜效果
- HTML系列之单选框 复选框 下拉菜单(四)
- TextView实现打印机效果
- POJ 2009 Moo University
- 565. Array Nesting
- 基于opencv计算星云图像的面积与周长
- JavaScript实现放大镜效果
- visual studio 配置opencv遇到的问题
- 线性表——链式存储结构之循环单链表
- 找到数组中重复的数字
- 为什么你的安全数据湖项目会失败(译文)
- SQL事务
- Day1_面向对象 Java 学习笔记
- 【bzoj1059 ZJOI2007】矩阵游戏(二分图匹配)
- 双进程/两个app之间使用AIDL