用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 602 次浏览
样式展示:
先准备两张图片,一张小图,一张大图,并且两张图片有一个整数比值
在小图片的上方设置一个放大镜样式,背景设为透明色即可
大图片外边套一个父元素,超出父元素隐藏,大小为只能容纳你的放大部分即可
父元素与放大镜样式的比值=大图与小图的比值
在小图片上进行鼠标移动时获取鼠标的坐标,得到鼠标当前处于小图片上的坐标
根据对应的比例求出大图片的坐标并移动大图片令放大部分处于父元素可见范围
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中的v-if和v-for不建议一起用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
vue是前端轻量级MVVM框架,入门门槛相对较低,今天用Vue做一个购物车实例,所以下面这篇文章主要给大家介绍了关于vue实现购物车全部功能的简单方法,需要的朋友可以参考下
这篇文章主要为大家详细介绍了JS实现百度新闻导航栏效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
使用react实现一个tab组件的方法:1、通过“export default props => {...}”方式创建TAB button组件;2、通过“tab-group-layout.js”组件来传“tabIndex”,并设置默认选中的tab效果;3、用react继承“react.component”组件里的onMouseOver和OnMouseOut方法即可。
有一些刚接触JavaScript的新手对于JavaScript语句写在哪里会有点困惑,对此这篇我们就简单的了解一下JavaScript语句的写法。我们要知道JavaScript语句是必须嵌套在“script”标签中,接下来我们来看看要注意哪些及怎样写。
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008