JS实现图片放大镜插件详解


Posted in Javascript onNovember 06, 2017

前  言

我们大家经常逛各种电商类的网站,商品的细节就需要用到放大镜,这个大家一定不陌生,今天我们就做一个图片放大镜的插件,来看看图片是如何被放大的……

先看一下我们要是实现的最终效果是怎么样的    

JS实现图片放大镜插件详解

看完效果,大家有思路了吗,没有的话,我们一起来看一下是如何实现的~

1实现思路

① 要实现指上后放大的效果,需要做三个div,一个用来放原图,另一个用来放放大效果的div,最后一个是鼠标指上后需要放大部分的div(这个div我们用p标签来代替)。

② 确定放大比例,最重要的一点,鼠标指上的div与放大效果的div,和原图与放大图的比例要相等。

③ 将鼠标指上后的放大效果显示出来。

2具体实现步骤

 首先,我们先来建三个div。

<div id="wrapper"> 
     <!--小图-->
    <div id="img_min"> 
       <!--图片-->
       <img src="img/11.png" alt="min"> 
       <!--跟随鼠标的白块-->
       <p id="mousebg"></p> 
     </div> 
   <!--大图-->
     <div id="img_max">
       <img id="img2_img" src="img/11.png" alt="max">
     </div> 
   </div>

我们HTML代码部分已经全部完成,接下来,我们用JS来实现功能:

给原图添加三个事件,分别是,鼠标进入,鼠标移动,鼠标移出。

当鼠标移入原图时,鼠标指上时的div和放大效果的div同时显示。

img1.onmouseover = function () { 
       //鼠标进入 
       img2.style.display = 'block'; 
       mousebg.style.display = 'block'; 
      
     }

鼠标移出事件:

img1.onmouseout = function () { 
       //鼠标离开 
       img2.style.display = 'none'; 
       mousebg.style.display = 'none'; 
     }

重点是当鼠标移动时,根据p标签与原图的位置,来显示大图需要放大的部分。

var _event = event||window.event;//兼容性处理 
var mouseX = _event.clientX - img1.offsetLeft; 
 //计算鼠标相对与小图的位置 
var mouseY = _event.clientY - img1.offsetTop;

在做位置分析时,需要考虑四种临界情况:

就是当鼠标从图片的上、下、左、右刚刚进入时,并且这个距离小于鼠标指上的div宽度的二分之一时,放大效果的div显示出来,并不移动。

//特殊情况处理,分别靠近四条边的时候 
 if(mouseX<mousebg.offsetWidth/2){ 
  mouseX = mousebg.offsetWidth/2; 
   } 
 if(mouseX>img1.offsetWidth-mousebg.offsetWidth/2){ 
  mouseX = img1.offsetWidth-mousebg.offsetWidth/2; 
   } 
 if(mouseY<mousebg.offsetHeight/2){ 
  mouseY = mousebg.offsetHeight/2; 
 } 
 if(mouseY>img1.offsetHeight-mousebg.offsetHeight/2){ 
  mouseY = img1.offsetHeight-mousebg.offsetHeight/2; 
 }

最后,计算大图的显示范围:

//计算大图的显示范围 
 img2_img.style.left = -mul*mouseX+img2.offsetWidth/2+"px"; 
 img2_img.style.top = -mul*mouseY+img2.offsetHeight/2+"px"; 
 //使鼠标在白块的中间 
mousebg.style.left = mouseX-mousebg.offsetWidth/2+"px"; 
mousebg.style.top = mouseY-mousebg.offsetHeight/2+"px";

这样,我们用JS实现图片放大镜的插件就全部完成了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
执行iframe中的javascript方法
Oct 07 Javascript
jsTree树控件(基于jQuery, 超强悍)[推荐]
Sep 01 Javascript
基于jQuery的仿flash的广告轮播
Nov 05 Javascript
JS在textarea光标处插入文本的小例子
Mar 22 Javascript
IE、FF、Chrome浏览器中的JS差异介绍
Aug 13 Javascript
JS比较2个日期间隔的示例代码
Apr 15 Javascript
js智能获取浏览器版本UA信息的方法
Aug 08 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
Aug 15 Javascript
jQuery为动态生成的select元素添加事件的方法
Aug 29 Javascript
Angularjs的Controller间通信机制实例分析
Nov 07 Javascript
微信小程序实现topBar底部选择栏效果
Jul 20 Javascript
原生js封装的ajax方法示例
Aug 02 Javascript
js定时器实现倒计时效果
Nov 05 #Javascript
Vuejs实现购物车功能
Nov 05 #Javascript
JavaScript实现音乐自动切换和轮播
Nov 05 #Javascript
vue+node+webpack环境搭建教程
Nov 05 #Javascript
JavaScript实现三级级联特效
Nov 05 #Javascript
angular中不同的组件间传值与通信的方法
Nov 04 #Javascript
详解使用React全家桶搭建一个后台管理系统
Nov 04 #Javascript
You might like
浅析PHP关键词替换的类(避免重复替换,保留与还原原始链接)
2015/09/22 PHP
php实现自定义中奖项数和概率的抽奖函数示例
2017/05/26 PHP
PHP命名空间定义与用法实例分析
2019/08/14 PHP
javascript 继承实现方法
2009/08/26 Javascript
jQuery 选择器、DOM操作、事件、动画
2010/11/25 Javascript
JS修改css样式style浅谈
2013/05/06 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
jQuery跨域问题解决方案
2015/08/03 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
jQuery实现的自适应焦点图效果完整实例
2016/08/24 Javascript
ES6中module模块化开发实例浅析
2017/04/06 Javascript
vue使用element-ui的el-input监听不了回车事件的解决方法
2018/01/12 Javascript
详解Vue项目在其他电脑npm run dev运行报错的解决方法
2018/10/29 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
vue2.0中set添加属性后视图不能更新的解决办法
2019/02/22 Javascript
Vue+Element UI+vue-quill-editor富文本编辑器及插入图片自定义
2019/08/20 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
[00:19]CN DOTA NEVER DIE!VG夺冠rOtK接受采访
2019/12/23 DOTA
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Python 普通最小二乘法(OLS)进行多项式拟合的方法
2018/12/29 Python
Python IDE Pycharm中的快捷键列表用法
2019/08/08 Python
django 做 migrate 时 表已存在的处理方法
2019/08/31 Python
使用OpenCV circle函数图像上画圆的示例代码
2019/12/27 Python
TensorFlow tf.nn.conv2d_transpose是怎样实现反卷积的
2020/04/20 Python
python 还原梯度下降算法实现一维线性回归
2020/10/22 Python
Html5与App的通讯方式详解
2019/10/24 HTML / CSS
马来西亚网上购物平台:ezbuy
2018/02/13 全球购物
俄罗斯药房连锁店:ASNA
2020/06/20 全球购物
在购买印度民族服饰:Soch
2020/09/15 全球购物
Oracle中delete,truncate和drop的区别
2016/05/05 面试题
南京某软件公司的.net面试题
2015/11/30 面试题
大学运动会入场词
2014/02/22 职场文书
公司领导班子对照检查存在问题整改措施
2014/10/02 职场文书
党员三严三实对照检查材料
2014/10/13 职场文书
先进单位申报材料
2014/12/25 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫