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 相关文章推荐
给网站上的广告“加速”显示的方法
Apr 08 Javascript
FireBug 调试JS入门教程 如何调试JS
Dec 23 Javascript
JavaScript 学习笔记之基础中的基础
Jan 13 Javascript
jQuery实现滚动切换的tab选项卡效果代码
Aug 26 Javascript
JavaScript的removeChild()函数用法详解
Dec 27 Javascript
微信小程序 wxapp内容组件 icon详细介绍
Oct 31 Javascript
js获取ip和地区
Mar 10 Javascript
Vue如何实现组件的源码解析
Jun 08 Javascript
js实现随机数小游戏
Jun 28 Javascript
Vue.js递归组件实现组织架构树和选人功能案例分析
Jul 03 Javascript
微信小程序下拉框搜索功能的实现方法
Jul 31 Javascript
详解React 条件渲染
Jul 08 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 discuz 主题表和回帖表的设计
2009/03/13 PHP
php 判断是否是中文/英文/数字示例代码
2013/09/30 PHP
深入理解PHP中mt_rand()随机数的安全
2017/10/12 PHP
PHP简单实现正则匹配省市区的方法
2018/04/13 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
php简单检测404页面的方法示例
2019/08/23 PHP
php解决crontab定时任务不能写入文件问题的方法分析
2019/09/16 PHP
laravel 实现关闭CSRF(全部关闭、部分关闭)
2019/10/21 PHP
在b/s开发中经常用到的javaScript技术
2006/08/23 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
JS创建自定义表格具体实现
2014/02/11 Javascript
JavaScript中实现map功能代码分享
2015/06/11 Javascript
js实现根据身份证号自动生成出生日期
2015/12/15 Javascript
Vuejs第十二篇之动态组件全面解析
2016/09/09 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
js回溯法计算最佳旅行线路代码实例
2019/09/11 Javascript
layer弹窗在键盘按回车将反复刷新的实现方法
2019/09/25 Javascript
浅谈Vue.set实际上是什么
2019/10/17 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
基于JavaScript实现控制下拉列表
2020/05/08 Javascript
Antd表格滚动 宽度自适应 不换行的实例
2020/10/27 Javascript
Windows下用py2exe将Python程序打包成exe程序的教程
2015/04/08 Python
Python中数字以及算数运算符的相关使用
2015/10/12 Python
Python新手入门最容易犯的错误总结
2017/04/24 Python
Pandas中DataFrame基本函数整理(小结)
2020/07/20 Python
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
党风廉政承诺书
2014/03/27 职场文书
教师年度考核评语
2014/04/28 职场文书
岗位标兵事迹材料
2014/05/17 职场文书
励志演讲稿300字
2014/08/21 职场文书
镇创先争优活动总结
2014/08/28 职场文书
城管执法人员纪律作风整顿思想汇报
2014/09/13 职场文书
教师查摆问题自查报告
2014/10/11 职场文书
爱晚亭导游词
2015/02/09 职场文书
2015年中学总务处工作总结
2015/07/22 职场文书
Golang 并发下的问题定位及解决方案
2022/03/16 Golang