用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 311 次浏览
样式展示:
先准备两张图片,一张小图,一张大图,并且两张图片有一个整数比值
在小图片的上方设置一个放大镜样式,背景设为透明色即可
大图片外边套一个父元素,超出父元素隐藏,大小为只能容纳你的放大部分即可
父元素与放大镜样式的比值=大图与小图的比值
在小图片上进行鼠标移动时获取鼠标的坐标,得到鼠标当前处于小图片上的坐标
根据对应的比例求出大图片的坐标并移动大图片令放大部分处于父元素可见范围
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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
这篇文章主要介绍node.js中内置模块的内容,一些常见的node.js中内置模块有path模块、until模块 、fs模块、events模块等等,本文就给大家简单的介绍一下这些内置模块的用法,感兴趣的朋友可以参考。
这篇文章给大家分享的是有关JS字符串操作方法的内容,有一些比较实用的小技巧,例如拆分字符串、 JSON格式化和解析、多行字符串和嵌入式表达式和验证字符串数组中是否存在子字符串这些,下文有实现代码,感兴趣的朋友可以了解一下。
本篇文章就来给大家介绍一些你不知道的Node express 路由使用技巧,希望对大家有所帮助!
这篇文章主要介绍了JavaScript构造树形结构的一种高效算法,对算法感兴趣的同学,可以参考下
相信开发中或多或少都会有使用md的时候。那么一个简易的md编辑器显得尤为重要,如果想要在自己的项目中添加一个md编辑器,那么不妨来看看这篇文章
成为群英会员,开启智能安全云计算之旅
立即注册Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008