今天在练习一个vue电商项目是,遇到一个图片放大区觉得很难理解,于是就动手使用原生js做了一个。

HTML,JS部分代码

    <div class="zoomContainer"><!-- 图片最上方的蒙板,用来给放大区域做定位 --><div class="panel"></div><!-- 显示正常大小图片的地方 --><div class="imageArea"><img src="./an.jpg" /></div><!-- 要放大的区域 --><div class="zoomArea"></div><!-- 显示放大图片的地方 --><div class="bigImageArea"><img src="./an.jpg" class="bigImage" /></div></div>//获取dom节点
const panel = document.querySelector(".panel");
const zoomArea = document.querySelector(".zoomArea");
const bigImageArea = document.querySelector(".bigImageArea");
const bigImage = document.querySelector(".bigImage");panel.onmousemove = function (event) {//鼠标进入展示需要放大的区域和放大后的图片zoomArea.style.display = "block";bigImageArea.style.display = "block";//获取展示区域的坐标let imageX = event.offsetX;let imageY = event.offsetY;//计算出展示区的偏移量let left = imageX - zoomArea.offsetWidth / 2;let top = imageY - zoomArea.offsetHeight / 2;//判断,如果超出图片范围进行设置if (left >= zoomArea.offsetWidth) {left = zoomArea.offsetWidth;}if (left <= 0) {left = 0;}if (top >= zoomArea.offsetHeight) {top = zoomArea.offsetHeight;}if (top <= 0) {top = 0;}//修改偏移量zoomArea.style.left = left + "px";zoomArea.style.top = top + "px";bigImage.style.left = -2 * left + "px";bigImage.style.top = -2 * top + "px";
};
//当鼠标离开隐藏展示区
panel.onmouseleave = function () {zoomArea.style.display = "none";bigImageArea.style.display = "none";
};

效果展示

开发中的问题及解决方法

1.获取要放大的区域出现卡顿

需要放大的部分为图片大小的四分之一,鼠标在图片上移动时显示放大要放大的区域以及左侧放大后的图片,如果直接给图片绑定onmousemove事件,那么鼠标移动时绿色的放大区域会出现在图片上方并跟随鼠标移动,此时给图片绑定的onmousemove事件就监听不到了,而且还出现卡顿。

解决办法

在图片的上方加一层蒙版,并设置z-index的css属性使其漂浮在图片区域的最上方,然后给蒙版绑定鼠标事件获取坐标,因为蒙版是在最上方的,所以绿色框出现不会影响蒙版的onmousemove事件。

2.获取图片宽高失败

因为绿色框的left,top属性的计算需要用到元素的宽高属性,通过dom.style.width/height发现获取不到dom的宽高。后查阅资料得知只有写在行内的css样式才能使用这种方法获取到。

解决办法

使用window.getComputedStyle(dom元素,‘伪类’).属性名,或者dom的offsetWidth、offsetHeight来获取。

完整代码

完整代码链接:https://github.com/liuyasai/imageZoom

使用原生js实现图片放大器效果相关推荐

  1. html多图轮播淡入淡出js,原生JS实现图片轮播与淡入效果的简单实例

    最近对css的兴趣提不起来,因为以前对图片轮播一直耿耿于怀苦于学艺不精,所以,花了点时间熟悉了一下js.然后一条道走到黑,用jquery和js写了一下轮播和图片淡入的效果.以后学习的路很长,希望自己在 ...

  2. html原生js实现图片轮播,原生JS实现图片轮播切换效果

    原生JS实现图片轮播切换效果 2019-01-06 编程之家 https://www.jb51.cc 编程之家收集整理的这篇文章主要介绍了原生JS实现图片轮播切换效果,编程之家小编觉得挺不错的,现在分 ...

  3. 原生JS实现图片跑马灯特效

    今天给大家分享一个用原生JS实现的图片跑马灯特效,效果如下: 实现的代码如下,欢迎大家复制粘贴. <!DOCTYPE html> <html><head><m ...

  4. 如何用原生JS制作图片时钟

    程序设计之道无远弗届,御晨风而返.---- 杰佛瑞 · 詹姆士 今天分享一个小demo,如何用原生JS制作图片时钟,话不多说上代码. html[外链图片转存失败(img-mD0n42FM-156223 ...

  5. 如何上传图片到fileupload空间_如何用原生js写图片上传组件v2.0(还有新版本)?...

    js图片上传组件: 基本要求: 1.上传的图片可预览,可删除,可被覆盖更新 2.要求图片格式为jpg和png,大小不能超过2M 新加需求: 1.模拟回显,可用本地存储(实际上的回显是通过后台传过来的u ...

  6. 原生JS实现图片滚动

    2019独角兽企业重金招聘Python工程师标准>>> 原生JS实现图片滚动 一.原理 黑色盒子是最终显示滚动图像的区域,绿色盒子为其子容器,其宽度要大于黑色外层盒子,这样才能通过设 ...

  7. html5 原生拖拽,原生JS实现拖拽效果

    这篇文章主要为大家详细介绍了原生JS实现拖拽效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 本文实例为大家分享了JS实现拖拽效果的具体代码,供大家参考,具体内容如下 ...

  8. 十分钟教会你原生JS压缩图片,极其精简版

    十分钟教会你原生JS压缩图片,极其精简版 原文链接:https://blog.csdn.net/yasha97/article/details/83629510 (一)实现思路 先通过input标签获 ...

  9. JS实现图片幻灯片效果

    代码如下: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <HTML> &l ...

  10. 手机端移动端的前端原生js裁剪图片上传

    手机端移动端的前端原生js裁剪图片上传 选择头像时裁剪上传,确保图片是个正方形,不会出现压扁拉伸的现象 效果图 原理很简单,其实就是用canvas截图出来而已,只是要对比例做一下处理. <!-- ...

最新文章

  1. 固态硬盘驱动器在设计上有个安全漏洞 易导致数据损毁
  2. iOS环信3.1·集成·功能的实现
  3. Express.js 3.0 发布,Node.js 的高性能封装
  4. pdf2htmlex linux 编译,如何安装编译pdf2htmlex实现pdf到html的格式转换功能
  5. 拖拽插入Table的列(I.E. ONLY)
  6. trap in development
  7. Codeforces 989C (构造)
  8. 如何查看header object和category 03的IBASE的relationship关系
  9. sqlalchemy 事务
  10. idea黑暗护眼主题
  11. xelatex编译时提示缺少字体
  12. 对象转为json形式
  13. word怎么显示左边目录?目录大纲(视图 --> 导航窗格)
  14. centos7.5安装
  15. 数据库系统之ANSI SQL中的事务处理
  16. HTML和CSS小知识点笔记
  17. linux code lite编译c,CentOS 6.2编译安装CodeLite 5.3
  18. EasyUi入门教程01
  19. 再见PDF提取收费!我用100行Python代码搞定!
  20. Illegal unquoted character ((CTRL-CHAR, code 13)): has to be escaped using backs

热门文章

  1. 苹果系统自带的计算机怎么恢复出厂设置,苹果电脑恢复出厂化设置的教程_苹果电脑怎样恢复出厂系统-win7之家...
  2. IIS安装和URL Rewrite 重写配置、反向代理配置
  3. Urlrewrite地址重写
  4. 智慧监狱UWB定位系统解决方案
  5. Tableau画图初学者~新手教程~常见类型图
  6. 使用Android Studio 开发APP入门经验
  7. zmap扫描mysql_zmap/masscan 快速扫描网络
  8. 数据处理中常用的Excel函数
  9. 三级等级保护之安全运维管理
  10. modis数据下载汇总