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 相关文章推荐
jquery实现心算练习代码
Dec 06 Javascript
奉献给JavaScript初学者的编写开发的七个细节
Jan 11 Javascript
基于jquery实现的类似百度搜索的输入框自动完成功能
Aug 23 Javascript
《JavaScript高级程序设计》阅读笔记(三) ECMAScript中的引用类型
Feb 27 Javascript
Javascript的时间戳和php的时间戳转换注意事项
Apr 12 Javascript
JSONP获取Twitter和Facebook文章数的具体步骤
Feb 24 Javascript
再谈javascript原型继承
Nov 10 Javascript
JavaScript函数内部属性和函数方法实例详解
Mar 17 Javascript
javascript日期比较方法实例分析
Jun 17 Javascript
AngularJS 简单应用实例
Jul 28 Javascript
Angular在模板驱动表单中自定义校验器的方法
Aug 09 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
Oct 31 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数组函数序列之array_sum() - 计算数组元素值之和
2011/10/29 PHP
php调用dll的实例操作动画与代码分享
2012/08/14 PHP
table标签的结构与合并单元格的实现方法
2013/07/24 PHP
PHP在innodb引擎下快速代建全文搜索功能简明教程【基于xunsearch】
2016/10/14 PHP
用Javscript实现表单复选框的全选功能
2007/05/25 Javascript
jQuery 研究心得 取得属性的值
2007/11/30 Javascript
基于jquery的横向滚动条(滑动条)
2011/02/24 Javascript
JavaScript(js)设置默认输入焦点(focus)
2012/12/28 Javascript
使用Grunt.js管理你项目的应用说明
2013/04/24 Javascript
js动态往表格的td中添加图片并注册事件
2014/06/12 Javascript
jQuery实现可用于博客的动态滑动菜单完整实例
2015/09/17 Javascript
jQuery实现的导航下拉菜单效果
2016/07/04 Javascript
解决vue里碰到 $refs 的问题的方法
2017/07/13 Javascript
js实现日期显示的一些操作(实例讲解)
2017/07/27 Javascript
浅谈Emergence.js 检测元素可见性的 js 插件
2017/11/18 Javascript
详解VueJS应用中管理用户权限
2018/02/02 Javascript
Express进阶之log4js实用入门指南
2018/02/10 Javascript
微信小程序中使用wxss加载图片并实现动画效果
2018/08/13 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
JavaScript实现更换背景图片
2019/10/18 Javascript
JS实现字体背景跑马灯
2020/01/06 Javascript
python实现360的字符显示界面
2014/02/21 Python
Python实现拼接多张图片的方法
2014/12/01 Python
pandas 对series和dataframe进行排序的实例
2018/06/09 Python
朴素贝叶斯分类算法原理与Python实现与使用方法案例
2018/06/26 Python
keras和tensorflow使用fit_generator 批次训练操作
2020/07/03 Python
adidas美国官网:adidas US
2016/09/21 全球购物
天猫超市:阿里巴巴打造的网上超市
2016/11/02 全球购物
澳大利亚制造的羊皮靴:Original UGG Boots
2017/11/13 全球购物
Java编程面试题
2016/04/04 面试题
大学本科毕业生求职简历的自我评价
2013/10/09 职场文书
名人演讲稿范文
2013/12/28 职场文书
体育运动会广播稿
2014/10/05 职场文书
医院办公室主任岗位职责
2015/04/01 职场文书
物业保洁员管理制度
2015/08/05 职场文书
Python OpenCV超详细讲解基本功能
2022/04/02 Python