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文件的代码
Jul 18 Javascript
学习ExtJS table布局
Oct 08 Javascript
JS代码放在head和body中的区别分析
Dec 01 Javascript
jQuery-Tools-overlay 使用介绍
Jul 14 Javascript
javascript全局变量封装模块实现代码
Nov 28 Javascript
jQuery实现隔行背景色变色
Nov 24 Javascript
使用jquery制作弹出框效果
Apr 03 Javascript
微信公众平台开发教程(五)详解自定义菜单
Dec 02 Javascript
简单几步实现返回顶部效果
Dec 05 Javascript
vue2.0 循环遍历加载不同图片的方法
Mar 06 Javascript
详解Nuxt.js 实战集锦
Nov 19 Javascript
详解Howler.js Web音频播放终极解决方案
Aug 23 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
蝙蝠侠:侠影之谜
2020/03/04 欧美动漫
跟我学Laravel之视图 &amp; Response
2014/10/15 PHP
php通过function_exists检测函数是否存在的方法
2015/03/18 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
PHP Header用于页面跳转时的几个注意事项
2016/10/21 PHP
php PDO实现的事务回滚示例
2017/03/23 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
Extjs优化(二)Form表单提交通用实现
2013/04/15 Javascript
javaScript对文字按照拼音排序实现代码
2013/12/27 Javascript
Angularjs制作简单的路由功能demo
2015/04/14 Javascript
jQuery获取页面元素绝对与相对位置的方法
2015/06/10 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
Angular简单验证功能示例
2017/12/22 Javascript
vue 权限认证token的实现方法
2018/07/17 Javascript
判断文字超过2行添加展开按钮,未超过则不显示,溢出部分显示省略号
2019/04/28 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
vue实现滑动超出指定距离回顶部功能
2019/07/31 Javascript
Vue的全局过滤器和私有过滤器的实现
2020/04/20 Javascript
python实现bitmap数据结构详解
2014/02/17 Python
python使用正则表达式匹配字符串开头并打印示例
2017/01/11 Python
python3+mysql查询数据并通过邮件群发excel附件
2018/02/24 Python
python 以16进制打印输出的方法
2018/07/09 Python
用vue.js组件模拟v-model指令实例方法
2019/07/05 Python
Django REST Framework之频率限制的使用
2019/09/29 Python
使用canvas实现黑客帝国数字雨效果
2020/01/02 HTML / CSS
在线购买廉价折扣书籍和小说:BookOutlet.com
2018/02/19 全球购物
Everlast官网:拳击、综合格斗和健身相关的体育用品
2020/08/03 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
Java里面Pass by value和Pass by Reference是什么意思
2016/05/02 面试题
高中化学教学反思
2014/01/13 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
先进单位事迹材料
2014/12/25 职场文书
2016年质量月活动总结报告
2016/04/05 职场文书
centos7安装mysql5.7经验记录
2022/05/02 Servers
MYSQL常用函数介绍
2022/05/05 MySQL
SpringBoot详解整合Redis缓存方法
2022/07/15 Java/Android