javascript - 使用 absolutePan() 通过触摸事件在画布上移动背景图像和元素
问题描述
我正在使用下一个代码来强制画布的内容跟随屏幕上的手指触摸移动(拖放)。
document.addEventListener('touchmove', function(e){
if(e.targetTouches.length ==1) {
var canavasMovex=e.targetTouches[0].pageX-canvasLeftofset-canvas.width/2;
var canavasMovey=e.targetTouches[0].pageY-canvasTopofset-canvas.height/2;
document.getElementById("a").innerHTML= canavasMovex;
document.getElementById("b").innerHTML= canavasMovey;
var delta = new fabric.Point(-canavasMovex,-canavasMovey);
canvas.absolutePan(delta);
canvas.renderAll();
}
}, false);
注意:“-canavasMovex,-canavasMovey”值带有负号(我不得不使用它,因为否则画布与手指力矩相反(我认为你可以忽略这个事实,它与偏移量有关,我我试图解决在这里寻求帮助))
我的位置位移与触摸点到画布中心的距离成正比。如果我从屏幕中心开始按下移动,那么位移就不那么明显了。但是,如果我从顶角开始(例如),我会在那个接触点获得画布的中心。从附图中,我尝试考虑“d”参数(触摸点到画布中心的距离),为 canvas.absolutePan() 函数的方程找到正确的值,但没有成功。你能帮我处理这个案子吗?我试图使用浏览互联网的一些解决方案来找到移动画布内容的方法。但是后来我失去了我的应用程序的一些功能,因为“新”库没有与我现有的 fabric.min.js 库正确交互。图像信息(外部矩形-网页,内部矩形-画布):a-画布偏移量,b-到画布中心的距离,c-触摸点,d-从触摸点到画布中心的距离。所以最后我试图以这种方式完成这项任务。
故障:开始拖动时大于距离“d”,然后偏移量大。(精算师,如果我从画布角开始拖动,画布内容将其中心转移到那里)
解决方案
解决方法是获取手指位置,计算与前一个位置的差值,加上前一个位置的差值,最后进行平移。
var canvasMovexoold = 0;
var canvasMoveyoold = 0;
document.addEventListener('touchstart', function(e){
canvasMovexoold = canvasLeftofset+canvas.width/2-e.targetTouches[0].pageX;
canvasMoveyoold =canvasTopofset+canvas.height/2- e.targetTouches[0].pageY;
}, false);
document.addEventListener('touchmove', function(e){
if(e.targetTouches.length ==1) {
var canvasMovexo += canvasLeftofset+canvas.width/2-e.targetTouches[0].pageX-canvasMovexoold ;
var canvasMoveyo +=canvasTopofset+canvas.height/2- e.targetTouches[0].pageY-canvasMoveyoold ;
var delta = new fabric.Point(canvasMovexo,canvasMoveyo);
canvas.absolutePan(delta);
canvasMovexoold = canvasLeftofset+canvas.width/2-e.targetTouches[0].pageX;
canvasMoveyoold =canvasTopofset+canvas.height/2- e.targetTouches[0].pageY;
}
}, false);
推荐阅读
- javascript - 如何在单击按钮时更改背景图像?
- javascript - jQuery.countdown 秒倒计时问题
- api - 谷歌地图 API 的问题
- anaconda - 如何创建 anaconda 配置文件(解析 .yml 文件时出错)?
- reactjs - 创建一个使用 google cloud-vision 的 reactjs 应用程序
- excel - Excel 表单的循环问题
- python - openCV 错误模块“cv2.face”没有属性“createEigenFaceRecognizer”
- android - 通过 VNC 连接到 Docker 容器中的 Android 模拟器(API 28 错误)
- excel - VBA 代码不会在最后一行粘贴数据
- ios - 核心数据异常错误 - 无效的获取请求:没有 GROUP BY 的 HAVING 和(null)的 userInfo