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 相关文章推荐
JS获得QQ号码的昵称,头像,生日的简单实例
Dec 04 Javascript
JQuery ztree 异步加载实例讲解
Feb 25 Javascript
浅谈JS原生Ajax,GET和POST
Jun 08 Javascript
jQuery回到顶部的代码
Jul 09 Javascript
node.js入门学习之url模块
Feb 25 Javascript
使用jQuery.Pin垂直滚动时固定导航
May 24 jQuery
深入理解Vue.js源码之事件机制
Sep 27 Javascript
代码详解JS操作剪贴板
Feb 11 Javascript
vue2.0 资源文件assets和static的区别详解
Apr 08 Javascript
JS指定音频audio在某个时间点进行播放
Nov 28 Javascript
vue+openlayers绘制省市边界线
Dec 24 Vue.js
关于对TypeScript泛型参数的默认值理解
Jul 15 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将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
PHP实现字符串翻转功能的方法【递归与循环算法】
2017/11/03 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
通过JS自动隐藏手机浏览器的地址栏实现原理与代码
2013/01/02 Javascript
jQuery Deferred和Promise创建响应式应用程序详细介绍
2013/03/05 Javascript
javascript Event对象详解及使用示例
2013/11/22 Javascript
javascript 中__proto__和prototype详解
2014/11/25 Javascript
如何用angularjs制作一个完整的表格
2016/01/21 Javascript
JavaScript获取当前运行脚本文件所在目录的方法
2016/02/03 Javascript
一种Javascript解释ajax返回的json的好方法(推荐)
2016/06/02 Javascript
HTML页面,测试JS对C函数的调用简单实例
2016/08/09 Javascript
BootStrap tab选项卡使用小结
2020/08/09 Javascript
javascript中闭包概念与用法深入理解
2016/12/15 Javascript
javascript实现多张图片左右无缝滚动效果
2017/03/22 Javascript
JS使用cookie实现只出现一次的广告代码效果
2017/04/22 Javascript
微信小程序开发之toast提示插件使用示例
2017/06/08 Javascript
微信小程序实现循环动画效果
2018/07/16 Javascript
vue-vuex中使用commit提交mutation来修改state的方法详解
2018/09/16 Javascript
vue全局自定义指令-元素拖拽的实现代码
2019/04/14 Javascript
使用JavaScript和MQTT开发物联网应用示例解析
2020/08/07 Javascript
如何搭建一个完整的Vue3.0+ts的项目步骤
2020/10/18 Javascript
[01:06:54]DOTA2-DPC中国联赛 正赛 SAG vs DLG BO3 第二场 2月28日
2021/03/11 DOTA
深入探究Django中的Session与Cookie
2017/07/30 Python
Python实现的递归神经网络简单示例
2017/08/11 Python
在python中bool函数的取值方法
2018/11/01 Python
Django如何使用第三方服务发送电子邮件
2019/08/14 Python
导致python中import错误的原因是什么
2020/07/01 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
使用css3实现的windows8开机加载动画
2014/12/09 HTML / CSS
高三语文教学反思
2014/01/15 职场文书
行政专员的岗位职责
2014/03/10 职场文书
2014年端午节活动方案
2014/03/11 职场文书
交通事故委托书范本(2篇)
2014/09/21 职场文书
员工规章制度范本
2015/08/07 职场文书
《敬重卑微》读后感3篇
2019/11/26 职场文书
详解JS数组方法
2021/11/20 Javascript