原生js实现淘宝图片放大功能
2018-01-06 14:42
573 查看
目录结构:
HTML:
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>图片放大</title> <link rel="stylesheet" href="./css/main.css"> <script src="./js/main.js" defer async></script> </head> <body> <div id="container"> <div class="leftView"> <div class="mask"></div> <img class="small" src="./img/img.jpg"> </div> <div class="rightView"> <img class="big" src="./img/img.jpg"> </div> </div> </body> </html>
CSS:
@charset "utf-8"; html, body { width: 100%; height: 100%; } * { margin: 0; padding: 0; font-family: Arial, Helvetica, sans-serif; box-sizing: border-box; } #container { position: relative; top: 60px; left: 200px; } #container .leftView { width: 400px; height: 400px; } #container .leftView .mask { width: 160px; height: 160px; position: absolute; display: none; cursor: move; top: 0; left: 0; background: rgba(50, 153, 248, 0.4); } #container .leftView .small { width: 100%; height: 100%; } #container .rightView { width: 400px; height: 400px; display: none; position: absolute; top: 0; left: 450px; overflow: hidden; } #container .rightView .big { position: absolute; top: 0; left: 0; }
JS:
((function() { 'use strict' // 选择器 function $(el) { return document.querySelector(el) } // 获取元素 let container = $('#container') let leftView = $('.leftView') let mask = $('.mask') let smallImg = $('.small') let rightView = $('.rightView') let bigImg = $('.big') // 显示放大遮罩与放大的图片容器 leftView.addEventListener('mouseover', function() { mask.style.display = 'block' rightView.style.display = 'block' }, false) // 隐藏放大遮罩与放大的图片容器 leftView.addEventListener('mouseout', function() { mask.style.display = 'none' rightView.style.display = 'none' }) // 放大遮罩移动放大图片 leftView.addEventListener('mousemove', function(evt){ evt = evt || window.event // 获取当前鼠标的位置 let currentMouseX = evt.pageX let currentMouseY = evt.pageY // 获取要放大图片左侧与顶部的偏移距离 let offsetLeft = container.offsetLeft let offsetTop = container.offsetTop // 获取放大遮罩的大小 let maskWidth = mask.offsetWidth let maskHeight = mask.offsetHeight // 计算鼠标移动后放大遮罩的位置 位置 = 当前鼠标的位置 - 偏移距离 - 放大遮罩大小/2 let zoomMaskX = currentMouseX - offsetLeft - maskWidth / 2 let zoomMaskY = currentMouseY - offsetTop - maskHeight / 2 // 限制鼠标上侧与左侧的范围 if (zoomMaskX <= 0) { zoomMaskX = 0 } if (zoomMaskY <= 0) { zoomMaskY = 0 } // 限制鼠标右侧与下侧的范围 let maxScopeX = leftView.offsetWidth - maskWidth if (zoomMaskX >= maxScopeX) { zoomMaskX = maxScopeX } let maxkScopeY = leftView.offsetHeight - maskHeight if (zoomMaskY >= maxkScopeY) { zoomMaskY = maxkScopeY } mask.style.left = zoomMaskX + 'px' mask.style.top = zoomMaskY + 'px' // 计算图片放大比例 比例= (大图长度 - 大图父容器长度) / (小图父容器长度 - 放大遮罩长度) let zommProportion = (bigImg.offsetWidth - rightView.offsetWidth) / (leftView.offsetWidth - maskWidth) bigImg.style.left = -zommProportion * zoomMaskX + 'px' bigImg.style.top = -zommProportion * zoomMaskY + 'px' }, false) })())效果如下: 点击查看
相关文章推荐
- js实现图片局部放大功能
- Js 实现图片放大功能
- 利用js简单实现图片的放大缩小功能
- ddpowerzoomer.js利用jQuery扩展,实现对图片局部放大功能(源码分析)
- 原生js实现拖动图片左右弹性切换(模仿iPhone弹性拖拽的功能)
- js实现图片放大缩小功能后进行复杂排序的方法
- JS实现鼠标中心放大图片功能原理及实例演示
- js实现简单的单击图片放大功能---仿新浪微博图片放大效果
- 如何:使用PicturBox实现类似淘宝网站图片的局部放大功能
- 原生js实现图片放大缩小计时器效果
- 原生js实现ajax的文件异步提交功能、图片预览功能.实例
- js实现图片放大缩小功能后进行复杂排序的方法
- 原生js图片轮播效果实现代码
- 原生js实现的局部页面打印功能,可以适用vue和jq
- 原生js上传图片功能 angular语法(可改写为其他语言版本)。
- 用原生JS实现一个简单计算的功能实例
- 【笔记】js原生方法 在元素外部或内部实现添加元素功能(类似jq 的 insert 和 append)
- 纯JS实现图片验证码功能并兼容IE6-8
- JS原生代码实现鼠标移动图片随之移动效果(另加点击改变图片效果)
- Android实现图片滚动控件,含页签功能,让你的应用像淘宝一样炫起来