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学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
Apr 12 Javascript
关于JavaScript对象的动态选择及遍历对象
Mar 10 Javascript
给应用部分的js代码设定一个统一的入口
Jun 15 Javascript
JS实现的4种数字千位符格式化方法分享
Mar 02 Javascript
每天一篇javascript学习小结(RegExp对象)
Nov 17 Javascript
浅谈Javascript中的Label语句
Dec 14 Javascript
JavaScript中数组Array.sort()排序方法详解
Mar 01 Javascript
js实现手机web图片左右滑动效果
Dec 29 Javascript
vue.js 打包时出现空白页和路径错误问题及解决方法
Jun 26 Javascript
vue 中 命名视图的用法实例详解
Aug 14 Javascript
JavaScript实现简单图片切换
Apr 29 Javascript
vue router 动态路由清除方式
May 25 Vue.js
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中使用PDF文档功能
2006/10/09 PHP
学习php设计模式 php实现适配器模式
2015/12/07 PHP
php数组指针操作详解
2017/02/14 PHP
php提取微信账单的有效信息
2018/10/01 PHP
newxtree.js代码
2007/03/13 Javascript
json 入门基础教程 推荐
2009/10/31 Javascript
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
ASP.NET jQuery 实例7 通过jQuery来获取DropDownList的Text/Value属性值
2012/02/03 Javascript
用box固定长宽实现图片自动轮播js代码
2014/06/09 Javascript
一个简单的动态加载js和css的jquery代码
2014/09/01 Javascript
jQuery validate插件submitHandler提交导致死循环解决方法
2016/01/21 Javascript
基于jQuery日历插件制作日历
2016/03/11 Javascript
第二次聊一聊JS require.js模块化工具的基础知识
2016/04/17 Javascript
让编辑器支持word复制黏贴、截屏的js代码
2016/10/17 Javascript
Bootstrap实现带暂停功能的轮播组件(推荐)
2016/11/25 Javascript
vue-cli项目中怎么使用mock数据
2017/09/27 Javascript
Bootstrap实现的表格合并单元格示例
2018/02/06 Javascript
vue中如何动态绑定图片,vue中通过data返回图片路径的方法
2018/02/07 Javascript
Vue-Router模式和钩子的用法
2018/02/28 Javascript
JQuery特殊效果和链式调用操作示例
2019/05/13 jQuery
vue项目部署到nginx/tomcat服务器的实现
2019/08/26 Javascript
[01:20]DOTA2上海特级锦标赛现场采访:谁的ID最受青睐
2016/03/25 DOTA
Python isinstance判断对象类型
2008/09/06 Python
python实现文件快照加密保护的方法
2015/06/30 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
python中返回矩阵的行列方法
2018/04/04 Python
css3实现信纸/同学录效果的示例代码
2018/12/11 HTML / CSS
瑞典首都斯德哥尔摩的多元奢侈时尚品牌:Acne Studios
2017/07/09 全球购物
秋季运动会表扬稿
2014/01/16 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
小班开学寄语
2014/04/04 职场文书
英文版辞职信
2015/02/28 职场文书
个人年终总结范文
2015/03/09 职场文书
搞笑婚礼主持词开场白
2015/11/24 职场文书
web前端之css水平居中代码解析
2021/05/20 HTML / CSS