用JS写对图片的放大镜效果,思路及过程是怎样
Admin 2022-06-22 群英技术资讯 1063 次浏览
这篇文章主要讲解了“用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进行举报,并提供相关证据,查实之后,将立刻删除涉嫌侵权内容。
猜你喜欢
目录常见的事件有:currentTarget和target的区别事件传递参数touches和changedTouches的区别事件的绑定两种方法事件传参事件的冒泡与事件的捕获小结常见的事件有:类型触发条件最低版本touchstart手指触摸动作开始touchmove手指触摸后移动touchcancel手指触摸动作被打断
这篇文章主要介绍了 JavaScript 与 TypeScript之间的联系,JavaScript,也称为 JS,是一种符合 ECMAScript 规范的编程语言。这是一个高级别的、通常是即时编译的、多范式的。TypeScript 是一种强类型、面向对象的编译语言,更多消息内容,需要的朋友可以参考一下下面文章内容
文我们来了解React diffing算法的内容,下文会给大家来详细的介绍diffing算法的原理,对大家学习和理解diffing算法很有帮助,有这方面学习需要的朋友不妨了解看看,那么接下来就跟随小编来学习一下diffing算法吧。
怎样用vue实现滚动条的效果?在网页设计时,滚动条效果还是比较常见的,给用户的体验也不错,因此这篇文章就给大家分享vue实现一个滚动条样式,实现代码还是比较简单的,感兴趣的朋友可以看一看。
这篇文章主要介绍了多种类型jQuery网页验证码插件代码实例,有正好需要的同学可以测试研究下具体使用效果
成为群英会员,开启智能安全云计算之旅
立即注册关注或联系群英网络
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