hammerjs
`
// import Hammer from 'hammerjs'//引用hammerjs
let Hammer
if (process.browser) Hammer = require('hammerjs')
//定义缩放方法,接收一个element参数:使用export暴露该方法
export function zoomElement (el) {
let x = 0//x轴偏移
let y = 0//y轴偏移
let lastScale = 1//上次缩放值
let currentScale = 1//当前缩放值
let center//双指中心点
//初始化hammer
let hammer = new Hammer(el)
//缩放事件默认是关闭的,需要设置启用
hammer.get('pinch').set({ enable: true })
//监听缩放事件
hammer.on("pinchmove pinchstart pinchin pinchout", e => {
//缩放开始时获取上一次缩放值与双指中心点
if (e.type == "pinchstart") {
lastScale = currentScale || 1
center = e.center
console.log("centerX:" + center.x)
console.log("centerY:" + center.y)
}
//当前缩放值 = 上一次缩放值 * 缩放比例
currentScale = lastScale * e.scale
//如果缩放值小于1,重置为1
if (currentScale < 1) {
currentScale = 1
}
if (scaleCount >= 2) {
//alert("max");
console.log('scaleCount', scaleCount)
return
}
//偏移量 = 双指中心点 - 当前缩放值 * 双指中心点 = 双指中心点 *(1-当前缩放值)
x = center.x * (1 - currentScale)
y = center.y * (1 - currentScale)
console.log('缩放')
//设置transform
el.style.transform = "translateX(" + (x) + "px)" + "translateY(" + (y) + "px)" + "scale(" + (currentScale) + ")"
})
//监听滑动事件
hammer.on('panright panleft panup pandown', (e) => {
//滑动时:偏移量 = 滑动距离 + 当前偏移量
let translateX = e.deltaX + x
let translateY = e.deltaY + y
//如果偏移X值大于0:表示视图已经滑到最左侧,重置为0
if (translateX > 0) {
translateX = 0
}
//如果偏移Y值大于0:表示视图已经滑到最顶部,重置为0
if (translateY > 0) {
translateY = 0
}
//如果偏移X值小于(屏幕宽度-元素宽度):表示视图已经滑到最左侧,重置为0
//屏幕宽度 = el.clientWidth
//元素宽度 = el.getBoundingClientRect().width
if (translateX < el.clientWidth - el.getBoundingClientRect().width) {
translateX = el.clientWidth - el.getBoundingClientRect().width
}
//如果偏移Y值大于(屏幕高度-元素高度):表示视图已经滑到最左侧,重置为0
//屏幕高度 = el.clientHeight
//元素高度 = el.getBoundingClientRect().height
if (translateY < el.clientHeight - el.getBoundingClientRect().height) {
translateY = el.clientHeight - el.getBoundingClientRect().height
}
//设置transform
console.log('监听滑动事件')
el.style.transform = "translateX(" + (translateX) + "px)" + "translateY(" + (translateY) + "px)" + "scale(" + (currentScale) + ")"
})
hammer.on('panend', (e) => {
//滑动结束:记录当前偏移量
x = e.deltaX + x
y = e.deltaY + y
console.log("panendx:" + x)
console.log("panendy:" + y)
})
}
`
本文来自博客园,作者:jialiangzai,转载请注明原文链接:https://www.cnblogs.com/zsnhweb/articles/16866274.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异