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 相关文章推荐
IE浏览器PNG图片透明效果代码
Sep 02 Javascript
JS验证日期的格式YYYY-mm-dd 具体实现
Jun 29 Javascript
浅析jQuery中常用的元素查找方法总结
Jul 04 Javascript
js格式化时间小结
Nov 03 Javascript
浅谈javascript回调函数
Dec 07 Javascript
node.js中的fs.futimesSync方法使用说明
Dec 17 Javascript
JavaScript 匿名函数和闭包介绍
Apr 13 Javascript
Bootstrap Validator 表单验证
Jul 25 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
简单实现vue验证码60秒倒计时功能
Oct 11 Javascript
JavaScript数组排序reverse()和sort()方法详解
Dec 24 Javascript
一文了解Vue中的nextTick
May 06 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_slice函数的使用以及参数详解
2008/08/30 PHP
php学习笔记 类的声明与对象实例化
2011/06/13 PHP
PHP aes (ecb)解密后乱码问题
2015/06/22 PHP
利用PHPExcel读取Excel的数据和导出数据到Excel
2017/05/12 PHP
PHP实现的分解质因数操作示例
2018/08/01 PHP
javascript 命名空间以提高代码重用性
2008/11/13 Javascript
javascript attachEvent和addEventListener使用方法
2009/03/19 Javascript
javascript客户端解决方案 缓存提供程序
2010/07/14 Javascript
ASP.NET jQuery 实例11 通过使用jQuery validation插件简单实现用户登录页面验证功能
2012/02/03 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
JavaScript实现获取dom中class的方法
2015/02/09 Javascript
jquery实现简单合拢与展开网页面板的方法
2015/09/01 Javascript
nodejs加密Crypto的实例代码
2016/07/07 NodeJs
jQuery使用bind函数实现绑定多个事件的方法
2017/10/11 jQuery
微信小程序云开发之数据库操作
2019/05/18 Javascript
JS根据Unix时间戳显示发布时间是多久前【项目实测】
2019/07/10 Javascript
Python collections模块实例讲解
2014/04/07 Python
Python中shutil模块的学习笔记教程
2017/04/04 Python
浅谈pyhton学习中出现的各种问题(新手必看)
2017/05/17 Python
Python比较2个时间大小的实现方法
2018/04/10 Python
python集合是否可变总结
2019/06/20 Python
django ajax发送post请求的两种方法
2020/01/05 Python
Django 再谈一谈json序列化
2020/03/16 Python
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
英国专业美容产品在线:Mylee(从指甲到脱毛)
2020/07/06 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
致跳远、跳高运动员广播稿
2014/01/09 职场文书
企业宣传方案
2014/03/04 职场文书
地震捐款倡议书
2014/08/29 职场文书
党员创先争优心得体会
2014/09/11 职场文书
高中班主任评语
2014/12/30 职场文书
2015年大学生入党自荐书
2015/03/24 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
Python开发工具Pycharm的安装以及使用步骤总结
2021/06/24 Python
Python 数据可视化之Matplotlib详解
2021/11/02 Python
Python学习之包与模块详解
2022/03/19 Python