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 相关文章推荐
Javascript调用C#代码
Jan 17 Javascript
JavaScript利用构造函数和原型的方式模拟C#类的功能
Mar 06 Javascript
js限制文本框的输入内容代码分享(3类)
Aug 20 Javascript
Jquery获取第一个子元素简单实例
Jun 02 Javascript
js模拟百度模糊搜索的实例
Aug 04 Javascript
小程序云开发部署攻略(图文教程)
Oct 30 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
Sep 11 Javascript
Element-UI+Vue模式使用总结
Jan 02 Javascript
浅谈javascript如何获取文件后缀名
Aug 07 Javascript
JS删除对象中某一属性案例详解
Sep 08 Javascript
如何在vue中使用百度地图添加自定义覆盖物(水波纹)
Nov 03 Javascript
Vue OpenLayer测距功能的实现
Apr 20 Vue.js
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 __autoload()方法真的影响性能吗?
2012/03/30 PHP
PHP7之Mongodb API使用详解
2015/12/26 PHP
Yii核心验证器api详解
2016/11/23 PHP
php实现的XML操作(读取)封装类完整实例
2017/02/23 PHP
jquery插件如何使用 jQuery操作Cookie插件使用介绍
2012/12/15 Javascript
onkeypress字符按键兼容所有浏览器使用介绍
2013/04/24 Javascript
JavaScript:Div层拖动效果实例代码
2013/08/06 Javascript
JavaScript支持的最大递归调用次数分析
2014/06/24 Javascript
ie8下修改input的type属性报错的解决方法
2014/09/16 Javascript
javascript实现无限级select联动菜单
2015/01/02 Javascript
javascript实时获取鼠标坐标值并显示的方法
2015/04/30 Javascript
jquery实现简单的自动播放幻灯片效果
2015/06/13 Javascript
使用 JavaScript 进行函数式编程 (一) 翻译
2015/10/02 Javascript
jquery.validate使用详解
2016/06/02 Javascript
js中 计算两个日期间的工作日的简单实例
2016/08/08 Javascript
AngularJS 实现JavaScript 动画效果详解
2016/09/08 Javascript
JS实现表单验证功能(验证手机号是否存在,验证码倒计时)
2016/10/11 Javascript
基于vue.js轮播组件vue-awesome-swiper实现轮播图
2017/03/17 Javascript
vue组件中点击按钮后修改输入框的状态实例代码
2017/04/14 Javascript
JS实现弹出下载对话框及常见文件类型的下载
2017/07/13 Javascript
layui框架与SSM前后台交互的方法
2019/09/12 Javascript
js实现提交前对列表数据的增删改查
2020/01/16 Javascript
pyv8学习python和javascript变量进行交互
2013/12/04 Python
快速了解Python中的装饰器
2018/01/11 Python
Python高斯消除矩阵
2019/01/02 Python
基于Python解密仿射密码
2019/10/21 Python
Python更换pip源方法过程解析
2020/05/19 Python
html5记忆翻牌游戏实现思路及代码
2013/07/25 HTML / CSS
Delphi CS笔试题
2014/01/04 面试题
纪念九一八事变演讲稿:牢记历史,捍卫主权
2014/09/14 职场文书
师德师风剖析材料
2014/09/30 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
小学推普周活动总结
2015/05/07 职场文书
运动会通讯稿100字
2015/07/20 职场文书
mysq启动失败问题及场景分析
2021/07/15 MySQL
Python中Numpy和Matplotlib的基本使用指南
2021/11/02 Python