用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 1144 次浏览
这篇文章主要讲解了“用JS写对图片的放大镜效果,思路及过程是怎样”,文中的讲解内容简单、清晰、详细,对大家学习或是工作可能会有一定的帮助,希望大家阅读完这篇文章能有所收获。下面就请大家跟着小编的思路一起来学习一下吧。样式展示:

先准备两张图片,一张小图,一张大图,并且两张图片有一个整数比值
在小图片的上方设置一个放大镜样式,背景设为透明色即可
大图片外边套一个父元素,超出父元素隐藏,大小为只能容纳你的放大部分即可
父元素与放大镜样式的比值=大图与小图的比值
在小图片上进行鼠标移动时获取鼠标的坐标,得到鼠标当前处于小图片上的坐标
根据对应的比例求出大图片的坐标并移动大图片令放大部分处于父元素可见范围
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怎样实现一个网页音乐播放器功能?之前我们了解了用vue.js实现简单的播放器,今天我们来用JavaScript来实现更复杂一些的功能的音乐播放器,实现步骤、代码及效果如下,感兴趣的朋友可以了解看看。
网页展示文字的方式有很多,将文字刻在3D图形上的你有没有看到过呢?将文字刻在3D图形上,文字能够随着图形一起运动,视觉效果呈现更酷炫。那么这是如何实现的呢?three.js是一款运行在浏览器中的3D引擎,我们能用它创建各种三维场景。因此,我们能够尝试使用three.js来复现3D动态文字效果。
Rxjs中处理和抓取错误是怎样的?在实际项目的操作过程或是学习过程中,不少人都会遇到这样的问题,接下来就让小编带大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
这篇文章主要介绍了 vue中v-for 循环对象中的属性,文章围绕v-for 循环对象的相关资料展开详细内容,需要的朋友可以参考一下,希望对大家有所帮助
这篇文章我们来了解React组件通信的内容,本文会介绍组件通信是什么,如何通信,及示例等等,对大家学习和理解React组件通信有一定的帮助,感兴趣的朋友可以参考。
推荐内容
相关标签
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
7x24小时售前:400-678-4567
7x24小时售后:0668-2555666
24小时QQ客服
群英微信公众号
CNNIC域名投诉举报处理平台
服务电话:010-58813000
服务邮箱:service@cnnic.cn
投诉与建议:0668-2555555
Copyright © QY Network Company Ltd. All Rights Reserved. 2003-2020 群英 版权所有
增值电信经营许可证 : B1.B2-20140078 ICP核准(ICP备案)粤ICP备09006778号 域名注册商资质 粤 D3.1-20240008