vue手势解决方案
1、需求
因为项目中要做一个可以移动、旋转和放缩具有合成图片的功能,例如:
剑可以随意移动,然后把位移、旋转角度和放缩值传给后台进行合成。
2、解决方案
网上搜到手势插件AlloyFinger,https://github.com/AlloyTeam/AlloyFinger
首先安装AlloyFinger:npm install alloyfinger
然后在Vue文件里面引用:import AlloyFinger from 'alloyfinger'
使用方法:
mounted() { this.getData(); this.requireList = document.getElementsByClassName('required'); let swordEle = document.getElementsByClassName('swordPic')[0]; let bwidth, bheight, swidth, sheight; Transform(swordEle); var initScale = 1; var af = new AlloyFinger(swordEle, { touchStart: function () { console.log('touchStart') }, touchMove: function (evt) { swordEle.style.translateX += evt.deltaX; swordEle.style.translateY += evt.deltaY; evt.preventDefault(); }, touchEnd: function () { console.log('end') console.log(swordEle.style.transform) }, touchCancel: function () { console.log('cancel') }, multipointStart: function () { initScale = swordEle.scaleX; }, multipointEnd: function () { }, tap: function () { }, doubleTap: function () { }, longTap: function () { }, singleTap: function () { }, rotate: function (evt) { swordEle.rotateZ += evt.angle; }, pinch: function (evt) { swordEle.scaleX = swordEle.scaleY = initScale * evt.scale; }, pressMove: function (evt) { let widthDiff = bwidth - swidth; let heightDiff = bheight - sheight; console.log('diff' + widthDiff + ' ' + heightDiff) console.log('translateX:' + swordEle.translateX + '' + swordEle.translateY ) if (((evt.deltaX>0)&&(swordEle.translateX >= widthDiff))||((evt.deltaY>0)&&(swordEle.translateY >= heightDiff))||((swordEle.translateX<0)&&((evt.deltaX<0)))||((swordEle.translateY<0)&&((evt.deltaY<0)))) { console.log('越界') } else { swordEle.translateX += evt.deltaX; swordEle.translateY += evt.deltaY; } console.log('pressmve:' + swordEle.translateX) console.log('pressmve:' + swordEle.translateY) }, swipe: function (evt) { // console.log("swipe" + evt.direction); } }); document.getElementById('coverPic').onload = function () { bwidth = this.width; bheight = this.height; console.log(bwidth + ' ' + bheight) if (document.body.scrollHeight - document.body.clientHeight > 20) { document.body.scrollTop = document.body.scrollHeight; } } document.getElementById('swordEle').onload = function () { swidth = this.width; sheight = this.height; console.log(swidth + ' ' + sheight) } },
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架