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 相关文章推荐
全面了解JS中的匿名函数
Jun 29 Javascript
实例详解jQuery的无new构建
Aug 02 Javascript
jquery结合html实现中英文页面切换
Nov 29 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
Mar 14 Javascript
Vue的实例、生命周期与Vue脚手架(vue-cli)实例详解
Dec 27 Javascript
vue项目实现github在线预览功能
Jun 20 Javascript
小程序实现选择题选择效果
Nov 04 Javascript
微信小程序实现原生步骤条
Jul 25 Javascript
微信小程序 腾讯地图显示偏差问题解决
Jul 27 Javascript
JS面向对象编程——ES6 中class的继承用法详解
Mar 03 Javascript
微信小程序实现签到弹窗动画
Sep 21 Javascript
JavaScript十大取整方法实例教程
Dec 03 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的一个登录的类 [推荐]
2007/03/16 PHP
通达OA公共代码 php常用检测函数
2011/12/14 PHP
谈谈关于php的优点与缺点
2013/04/11 PHP
教你在PHPStorm中配置Xdebug
2015/07/27 PHP
php实现图片上传并利用ImageMagick生成缩略图
2016/03/14 PHP
浅谈PHP的反射机制
2016/12/15 PHP
Javascript 陷阱 window全局对象
2008/11/26 Javascript
javascript面向对象的方式实现的弹出层效果代码
2010/01/28 Javascript
JavaScript操作XML实例代码(获取新闻标题并分页,并分页)
2010/05/25 Javascript
jQuery选择没有colspan属性的td的代码
2010/07/06 Javascript
javascript延时加载之defer测试
2012/12/28 Javascript
JS实现下拉框的动态添加(附效果)
2013/04/03 Javascript
通过javascript把图片转化为字符画
2013/10/24 Javascript
jquery实现瀑布流效果分享
2014/03/26 Javascript
JS动态增删表格行的方法
2016/03/03 Javascript
JS简单编号生成器实现方法(附demo源码下载)
2016/04/05 Javascript
Jquery EasyUI实现treegrid上显示checkbox并取选定值的方法
2016/04/29 Javascript
浅谈Javascript数组(推荐)
2016/05/17 Javascript
Javascript 基础---Ajax入门必看
2016/07/06 Javascript
jquery 判断div show的状态实例
2016/12/03 Javascript
vue-router相关基础知识及工作原理
2018/03/16 Javascript
JavaScript设计模式之观察者模式实例详解
2019/01/16 Javascript
利用angular自动编译andriod APK的绕坑经历分享
2019/03/08 Javascript
Element-ui DatePicker显示周数的方法示例
2019/07/19 Javascript
微信小程序自定义头部导航栏和导航栏背景图片 navigationStyle问题
2019/07/26 Javascript
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
详解python里使用正则表达式的全匹配功能
2017/10/19 Python
Python中的TCP socket写法示例
2018/05/11 Python
win7下python3.6安装配置方法图文教程
2018/07/31 Python
selenium2.0中常用的python函数汇总
2019/08/05 Python
pycharm设置默认的UTF-8编码模式的方法详解
2020/06/01 Python
python实现暗通道去雾算法的示例
2020/09/27 Python
韩国CJ食品专卖网:CJonmart
2016/09/11 全球购物
Linux如何压缩可执行文件
2014/03/27 面试题
如何清空Session
2015/02/23 面试题
matlab xlabel位置的设置方式
2021/05/21 Python