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 相关文章推荐
使用prototype.js 的时候应该特别注意的几个问题.
Apr 12 Javascript
js 未结束的字符串常量错误解决方法
Jun 13 Javascript
jQuery 一个图片切换的插件
Oct 09 Javascript
JavaScript的null和undefined区别示例介绍
Sep 15 Javascript
jQuery实现定时读取分析xml文件的方法
Jul 16 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
Mar 18 Javascript
基于JQuery实现图片上传预览与删除操作
May 24 Javascript
Vue.js学习笔记之修饰符详解
Jul 25 Javascript
Vue-resource拦截器判断token失效跳转的实例
Oct 27 Javascript
浅谈Vue2.0父子组件间事件派发机制
Jan 08 Javascript
微信小程序实现图片上传功能实例(前端+PHP后端)
Jan 10 Javascript
JavaScrip如果基于url实现图片下载
Jul 03 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匿名函数与注意事项
2016/03/29 PHP
利用PHP生成CSV文件简单示例
2016/12/21 PHP
浅谈PHP中类和对象的相关函数
2017/04/26 PHP
thinkphp框架page类与bootstrap分页(美化)
2017/06/25 PHP
PHP通过文件路径获取文件名的实例代码
2018/10/14 PHP
Yii框架分页技术实例分析
2019/08/30 PHP
js限制文本框只能输入数字(正则表达式)
2012/07/15 Javascript
JS控件的生命周期介绍
2012/10/22 Javascript
jQuery用unbind方法去掉hover事件及其他方法介绍
2013/03/18 Javascript
showModalDialog在谷歌浏览器下会返回Null的解决方法
2013/11/27 Javascript
JavaScript变量声明详解
2014/11/27 Javascript
浅析函数声明和函数表达式——函数声明的声明提前
2016/05/03 Javascript
jQuery.ajax实现根据不同的Content-Type做出不同的响应
2016/11/03 Javascript
Vue.js展示AJAX数据简单示例讲解
2017/03/29 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
Nuxt.js之自动路由原理的实现方法
2018/11/21 Javascript
JavaScript在web自动化测试中的作用示例详解
2019/08/25 Javascript
JavaScript Event Loop相关原理解析
2020/06/10 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
Python分布式进程中你会遇到的问题解析
2019/05/28 Python
Python正则表达式匹配数字和小数的方法
2019/07/03 Python
基于sklearn实现Bagging算法(python)
2019/07/11 Python
利用Pandas和Numpy按时间戳将数据以Groupby方式分组
2019/07/22 Python
Python列表(list)所有元素的同一操作解析
2019/08/01 Python
pytorch索引查找 index_select的例子
2019/08/18 Python
Python基于smtplib模块发送邮件代码实例
2020/05/29 Python
乌克兰最大的家用电器和电子产品连锁店:Eldorado
2019/10/02 全球购物
一些Solaris面试题
2013/03/22 面试题
好的自荐信包括什么内容
2013/11/07 职场文书
毕业评语大全
2014/05/04 职场文书
党员民主生活会个人整改措施材料
2014/09/16 职场文书
幼儿园老师新年寄语2015
2014/12/08 职场文书
早会开场白台词大全
2015/06/01 职场文书
家长对孩子的寒假评语
2015/10/09 职场文书
中职班主任培训心得体会
2016/01/07 职场文书
品德与社会教学反思
2016/02/24 职场文书