这里注意如果自己的页面有滚动条,一定阻止滚动事件的默认行为,否则缩放图片的时候,页面会跟着滚动
@mousewheel.prevent 阻止默认行为

<div ref="imgWrap" @mousewheel.prevent="rollImg" class="modal-img-wrap">
  <img ref="img" :src="fullscreenImgSrc" @mousedown="moveImg" alt="大图" class="modal-img"/>
</div>

  javascript

    moveImg (e) {
e.preventDefault()
// 获取元素
let imgWrap = this.$refs.imgWrap
let img = this.$refs.img
let x = e.pageX - img.offsetLeft
let y = e.pageY - img.offsetTop
// 添加鼠标移动事件
imgWrap.addEventListener('mousemove', move)
function move (e) {
img.style.left = e.pageX - x + 'px'
img.style.top = e.pageY - y + 'px'
}
// 添加鼠标抬起事件,鼠标抬起,将事件移除
img.addEventListener('mouseup', () => {
imgWrap.removeEventListener('mousemove', move)
})
// 鼠标离开父级元素,把事件移除
imgWrap.addEventListener('mouseout', () => {
imgWrap.removeEventListener('mousemove', move)
})
},
rollImg () {
/* 获取当前页面的缩放比 若未设置zoom缩放比,则为默认100%,即1,原图大小 */
let zoom = parseInt(this.$refs.img.style.zoom) || 100
/* event.wheelDelta 获取滚轮滚动值并将滚动值叠加给缩放比zoom wheelDelta统一为±120,其中正数表示为向上滚动,负数表示向下滚动 */
zoom += event.wheelDelta / 12
/* 最小范围 和 最大范围 的图片缩放尺度 */
if (zoom >= 80 && zoom < 500) {
this.$refs.img.style.zoom = zoom + '%'
}
return false
}

less

    .modal-img {
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
max-width: 100%;
cursor: move;
&-wrap {
position: relative;
width: 960px;
height: 560px;
overflow: hidden;
}
}

  参考: vue实现鼠标滚轮滚动缩放图片,对图片进行拖拽

最新文章

  1. windows快捷键集锦
  2. U盘安装ubuntu server 14.04
  3. RDIFramework.NET ━ 9.11 数据字典管理 ━ Web部分
  4. [CareerCup] 9.11 Parenthesize the Expression 表达式加括号
  5. Web Service测试利器 Postman
  6. MySQL存储过程中的3种循环
  7. 深入理解计算机系统第二版习题解答CSAPP 2.5
  8. 等方案及设备提供商 有需要的可以联系QQ561454825,电话:13779953060,我们提供最专业的无线WIFI认证系统及根据您的需要修改软件
  9. 什么是TimeTunnel
  10. Ecstore安装篇-2.单机部署【linux】
  11. 设计模式--装饰者设计模式(Decorator)
  12. 前端程序员经常忽视的一个JavaScript面试题
  13. Support Annotation Library使用详解
  14. 联发科AIoT平台i500处理器简介
  15. 设计一函数,求整数区间[a,b]和[c,d]的交集
  16. 【SVN】SVN初识
  17. Java——语句
  18. PCA算法Python实现
  19. Linux-man命令(17)
  20. bzoj1650 / P2855 [USACO06DEC]河跳房子River Hopscotch / P2678 (noip2015)跳石头

热门文章

  1. Jenkins插件维护
  2. malloc实现
  3. Samba 源码解析之内存管理
  4. Java网络多线程编程:对象流错误导致Connection reset
  5. CF749A Bachgold Problem 题解
  6. java 多线程:线程安全问题synchronized关键字解决
  7. netty系列之:小白福利!手把手教你做一个简单的代理服务器
  8. JAVA中Map集合遍历
  9. JAVA字符串拼接操作规则说明
  10. 【Android开发】找乐,一个笑话App的制作过程记录