用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 689 次浏览
样式展示:
先准备两张图片,一张小图,一张大图,并且两张图片有一个整数比值
在小图片的上方设置一个放大镜样式,背景设为透明色即可
大图片外边套一个父元素,超出父元素隐藏,大小为只能容纳你的放大部分即可
父元素与放大镜样式的比值=大图与小图的比值
在小图片上进行鼠标移动时获取鼠标的坐标,得到鼠标当前处于小图片上的坐标
根据对应的比例求出大图片的坐标并移动大图片令放大部分处于父元素可见范围
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
跨域是指当一个资源去访问另一个不同域名或者同域名不同端口的资源时,就会发出跨域请求,下面这篇文章主要给大家介绍了关于vue使用vite配置跨域以及环境配置的相关资料,需要的朋友可以参考下
这篇文章主要为大家详细介绍了jquery+springboot文件上传,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
目录一、插槽(slot)是什么二、使用场景三、slot的分类默认插槽具名插槽作用域插槽四、介绍对slot的理解一、插槽(slot)是什么slot是组件内的一个占位符,该占位符可以在后期使用自己的标记语言填充。作用:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信方式,适用于父组件===子组件例子://父
这篇文章主要介绍js实现上传图片到服务器的功能,下文有实现的代码以及注释,对大家学习怎样实现上传图片到服务器有一定的帮助,感兴趣的朋友可以借鉴参考,接下来小编带着大家一起了解看看。
今天给大家分享的是用node实现设置静态文件缓存的方法,对于缓存的内容是比较基础的,也是需要掌握的内容,因此下文就给大家来介绍一下node实现静态文件缓存,有需要的朋友可以参考。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008