js实现简单放大镜效果


Posted in Javascript onMarch 07, 2020

用js实现简单放大镜效果,供大家参考,具体内容如下

此处放大镜实现的效果就是当鼠标放置在图片上会有半透明遮罩,图片的一个区域就会被放大,然后展示在右边。当鼠标移动时右边的大图片也会局部移动。这里的放大并不是真正的放大,而是等比例移动。下面是实现的代码:

css样式代码如下:

<style>
 .s_box{width:400px;height: 300px;position: absolute;left: 50px;top:100px;}
 .s_box img{width: 400px;height: 300px;}
 .s_box span{width: 130px;height: 100px;background: rgba(200,200,200,0.5);position: absolute;left:0;top:0;display: none;cursor:move;}

 .b_box{width: 400px;height: 300px;overflow: hidden;position: absolute;left:500px;top:100px;display: none;}
 .b_box img{width: 1200px;height: 900px;position: absolute;left:0;top:0;}

 .list{margin: 0;padding: 0;list-style: none;position: absolute;left:50px;top:430px;}
 .list li{float: left;margin: 0 10px;}
 .list li img{width: 100px;height: 80px;}
</style>

html代码如下:

<body>
 <div class="s_box">
 <img src="../img/large1.jpg" alt="">
 <span></span>
 </div>
 <div class="b_box">
 <img src="../img/large1.jpg" alt="">
 </div>
 <ul class="list">
 <li><img src="../img/large1.jpg" alt=""></li>
 <li><img src="../img/large2.jpg" alt=""></li>
 </ul>
</body>

js主要代码如下:

// 分析:
// 1.选择元素
// 2.绑定事件
// 3.进入的时候显示元素
// 4.移动:遮罩层跟随鼠标移动的同时计算遮罩层的移动比例 、右侧大图,等比例移动
// 5.离开的时候隐藏元素 
<script>
 class Large{
 constructor(){
 this.sBox = document.querySelector(".s_box");
 this.sImg = document.querySelector(".s_box img");
 this.sSpan = document.querySelector(".s_box span");
 this.bBox = document.querySelector(".b_box");
 this.bImg = document.querySelector(".b_box img");
 // 点击小图切换大图的按钮
 this.li = document.querySelectorAll(".list li");
 }
 addEvent(){
 var that = this;
 this.sBox.onmouseover = function(){
 that.over();
 }
 this.sBox.onmousemove = function(eve){
 var e = eve || window.event;
 that.move(e);
 }
 this.sBox.onmouseout = function(){
 that.out();
 }
 // 切换图片按钮的点击事件:根据布局做出调整
 for(var i=0;i<this.li.length;i++){
 this.li[i].onclick = function(){
  that.sImg.src = this.children[0].src;
  that.bImg.src = this.children[0].src;
 }
 }
 }
 over(){
 this.sSpan.style.display = "block";
 this.bBox.style.display = "block";
 }
 move(e){
 // 计算遮罩层跟随鼠标移动时的left和top
 var l = e.pageX - this.sBox.offsetLeft - this.sSpan.offsetWidth/2;
 var t = e.pageY - this.sBox.offsetTop - this.sSpan.offsetHeight/2;
 // 边界限定
 if(l<0) l=0;
 if(t<0) t=0;
 if(l > this.sBox.offsetWidth - this.sSpan.offsetWidth){
 l = this.sBox.offsetWidth - this.sSpan.offsetWidth;
 }
 if(t > this.sBox.offsetHeight - this.sSpan.offsetHeight){
 t = this.sBox.offsetHeight - this.sSpan.offsetHeight;
 }
 // 设置遮罩层的位置
 this.sSpan.style.left = l + "px";
 this.sSpan.style.top = t + "px";
 // 根据遮罩层移动的距离计算比例
 var x = l / (this.sBox.offsetWidth - this.sSpan.offsetWidth);
 var y = t / (this.sBox.offsetHeight - this.sSpan.offsetHeight);
 // 根据上一步得到的比例,计算右侧大图要移动的当前值
 this.bImg.style.left = (this.bBox.offsetWidth - this.bImg.offsetWidth) * x + "px";
 this.bImg.style.top = (this.bBox.offsetHeight - this.bImg.offsetHeight) * y + "px";
 }
 out(){
 this.sSpan.style.display = "none";
 this.bBox.style.display = "none";
 }
 }

 // 启动
 var l = new Large();
 l.addEvent();

</script>

实现效果:

js实现简单放大镜效果

更多关于放大镜的精彩文章,请点击链接查看:《放大镜效果》

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 全等号运算符使用说明
May 31 Javascript
Knockout数组(observable)使用详解示例
Nov 15 Javascript
JS删除字符串中重复字符方法
Mar 09 Javascript
基于JavaScript操作DOM常用的API小结
Dec 01 Javascript
javascript图片预加载完整实例
Dec 10 Javascript
node.js实现爬虫教程
Aug 25 Javascript
详解AngularJS 模态对话框
Apr 07 Javascript
jQuery select自动选中功能实现方法分析
Nov 28 Javascript
微信小程序使用Socket的实例
Sep 19 Javascript
vue vuex vue-rouert后台项目——权限路由(适合初学)
Dec 29 Javascript
mpvue实现小程序签到金币掉落动画(api实现)
Oct 17 Javascript
JS使用for in有序获取对象数据
May 19 Javascript
js实现文字头像的生成代码
Mar 07 #Javascript
JavaScript队列结构Queue实现过程解析
Mar 07 #Javascript
原生JS实现萤火虫效果
Mar 07 #Javascript
JavaScript实现轮播图片完整代码
Mar 07 #Javascript
JS实现瀑布流效果
Mar 07 #Javascript
Vue中使用better-scroll实现轮播图组件
Mar 07 #Javascript
JavaScript实现栈结构Stack过程详解
Mar 07 #Javascript
You might like
php win下Socket方式发邮件类
2009/08/21 PHP
php cout&amp;lt;&amp;lt;的一点看法
2010/01/24 PHP
PHP对表单提交特殊字符的过滤和处理方法汇总
2014/02/18 PHP
php使用parse_url和parse_str解析URL
2015/02/22 PHP
基于PHP常用文件函数和目录函数整理
2017/08/17 PHP
用js解决数字不能换行问题
2010/08/10 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
JS基于面向对象实现的拖拽库实例
2015/09/24 Javascript
浅谈javascript中的 “ &amp;&amp; ” 和 “ || ”
2017/02/02 Javascript
JavaScript中this关键字用法实例分析
2018/08/24 Javascript
layui实现下拉框三级联动
2019/07/26 Javascript
python算法学习之计数排序实例
2013/12/18 Python
python中的全局变量用法分析
2015/06/09 Python
Python中list列表的一些进阶使用方法介绍
2015/08/15 Python
hmac模块生成加入了密钥的消息摘要详解
2018/01/11 Python
python 弹窗提示警告框MessageBox的实例
2019/06/18 Python
python实现在内存中读写str和二进制数据代码
2020/04/24 Python
解决keras,val_categorical_accuracy:,0.0000e+00问题
2020/07/02 Python
整理的15个非常有用的 HTML5 开发教程和速查手册
2011/10/18 HTML / CSS
利用HTML5绘制点线面组成的3D图形的示例
2015/05/12 HTML / CSS
波兰在线儿童和婴儿用品零售商:pinkorblue
2019/06/29 全球购物
精选鞋类、服装和配饰的全球领先目的地:Bodega
2021/02/27 全球购物
密封类可以有虚函数吗
2014/08/11 面试题
Python中pass语句的作用是什么
2016/06/01 面试题
初三化学教学反思
2014/01/23 职场文书
党员违纪检讨书
2014/02/18 职场文书
电工工作职责范本
2014/02/22 职场文书
我的老师教学反思
2014/05/01 职场文书
大学生交通专业求职信
2014/09/01 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
给女朋友道歉的话大全
2015/01/20 职场文书
2015年组织部工作总结
2015/04/03 职场文书
学校教学管理制度
2015/08/06 职场文书
2016年九九重阳节活动总结
2016/04/01 职场文书
HR在给员工开具离职证明时,需要注意哪些问题?
2019/07/03 职场文书
如何用python反转图片,视频
2021/04/24 Python