用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 484 次浏览
样式展示:
先准备两张图片,一张小图,一张大图,并且两张图片有一个整数比值
在小图片的上方设置一个放大镜样式,背景设为透明色即可
大图片外边套一个父元素,超出父元素隐藏,大小为只能容纳你的放大部分即可
父元素与放大镜样式的比值=大图与小图的比值
在小图片上进行鼠标移动时获取鼠标的坐标,得到鼠标当前处于小图片上的坐标
根据对应的比例求出大图片的坐标并移动大图片令放大部分处于父元素可见范围
1.html部分
<div id="box"> <!-- toBig是放大镜元素 --> <div id="toBig"></div> <!-- 小图片 --> <img src="img/05.jpg" id="smallImg" width="800px"> </div> <div id="beBig"> <!-- 大图片,比例为1.5倍数 --> <img src="img/05.jpg" id="bigImg" width="1200px"> </div>
2.css样式部分
*{ margin: 0px; padding: 0px; } #box{ position: relative; float: left; } #toBig{ width: 80px; height: 80px; border: 1px solid gray; background-color: transparent; position: absolute; } #beBig{ float: left; overflow: hidden; border: 1px solid gray; position: relative; left: 40px; top:325px ; } #bigImg{ position: absolute; }
3.脚本部分
<script type="text/javascript"> //获取小图片,大图片,放大镜元素,大图片的父元素 var smallImg=document.querySelector("#smallImg"); var bigImg=document.querySelector("#bigImg"); var toBig=document.querySelector("#toBig"); var beBig=document.querySelector("#beBig"); /*在页面加载时就先计算出小图片与大图片的比例*/ var q=0; window.onload=function(){ q=bigImg.offsetWidth/smallImg.offsetWidth; //根据放大镜的宽高和比例计算要显示放大内容的大小 beBig.style.width = toBig.clientWidth * q +"px"; beBig.style.height = toBig.clientHeight * q +"px"; } //获取放大镜元素的中心,保证鼠标在放大镜中心 var xCenter=toBig.clientWidth/2; var yCenter=toBig.clientHeight/2; //flag是一个标志,当鼠标按下时为true,可以进行移动 flag=false; toBig.onmousedown = function(){ flag=true; } toBig.onmouseup = function(){ flag=false; } window.onmousemove=function(ev){ var ev = ev || window.event; //flag为true时,放大镜元素被按下并可以进行拖动 if(flag){ //获取鼠标当前所在位置并计算除了元素自身外要移动的位置 var mouseX=ev.clientX,mouseY=ev.clientY; var trueX=mouseX - xCenter; //判断放大镜元素是否超出小图片范围 if(trueX < smallImg.offsetLeft){ trueX = smallImg.offsetLeft; } if(trueX > smallImg.clientWidth - toBig.offsetWidth){ trueX = smallImg.clientWidth - toBig.offsetWidth; } var trueY=mouseY - yCenter; if(trueY <= smallImg.offsetTop){ trueY = smallImg.offsetTop; } if(trueY > smallImg.clientHeight - toBig.offsetHeight){ trueY = smallImg.clientHeight - toBig.offsetHeight; } //小图片移动 toBig.style.left = trueX + "px"; toBig.style.top = trueY + "px"; console.log(trueX,trueY); // 大图片要移动的位置 bigImg.style.left =-(trueX * q) + "px"; bigImg.style.top =-(trueY * q) + "px"; } } </script>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:mmqy2019@163.com进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
JS中如何实现红绿灯效果?红绿灯是我们日常很常见的,红绿灯效果就是红灯、黄灯和绿灯循环改延时的效果,那么我们用JavaScript怎样做这样的效果呢?文中的示例代码介绍得很详细,有需要的朋友可以参考,接下来就跟随小编一起了解看看吧。
node.js怎样实现断点续传?首先,断点续传怎样理解呢?一般,如果是一些只有几M的图片或者文件,我们将它们上传的到服务器是上是很快的,但是如果是几百M或者几G的文件,那么上传到服务器的时间就会更久,如果这期间文件有断网或者网络差要重新下载情况,那么得多人抓狂呀!而使用切片+断点续传就能够很好应对这样的情况。那么具体怎样做呢?下面跟随小编一起来详细了解看看吧。
这篇文章我们来了解用jQuery如何获取ul下li的个数,下文示例对新手学习jQuery有一定的参考价值,有这方面学习需要的朋友接下来就跟随小编来一起学习一下吧!
这篇文章主要为大家详细介绍了微信小程序实现多列选择器,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
这篇文章主要为大家详细介绍了原生javascript实现图片轮播切换效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008