Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 触摸事件的movementX和movementY备选方案是什么?_Javascript - Fatal编程技术网

Javascript 触摸事件的movementX和movementY备选方案是什么?

Javascript 触摸事件的movementX和movementY备选方案是什么?,javascript,Javascript,我知道当鼠标在画布区域上移动时如何跟踪鼠标的移动 var canvas=document.getElementById(“canvas”); var info=document.getElementById(“info”); 功能(e){ info.innerHTML=“x更改:”+String(e.movementX)+”,y更改:“+String(e.movementY); } canvas.addEventListener(“mousemove”,getMovements) 画布{ 背景

我知道当鼠标在画布区域上移动时如何跟踪鼠标的移动

var canvas=document.getElementById(“canvas”);
var info=document.getElementById(“info”);
功能(e){
info.innerHTML=“x更改:”+String(e.movementX)+”,y更改:“+String(e.movementY);
}
canvas.addEventListener(“mousemove”,getMovements)
画布{
背景色:深蓝色;
}

没有此类属性,因为触摸事件可以有多个触摸。但是,在调用
getMovements
函数之前,您可以自己将这些属性添加到touchevent中

var-previousTouch;
canvas.addEventListener(“touchmove”,(e)=>{
const touch=e.touch[0];
如果(上一次触摸){
//请注意,这些仅存储触摸阵列中第一次触摸的移动
e、 movementX=touch.pageX-previousTouch.pageX;
e、 movementY=touch.pageY-previousTouch.pageY;
运动(e);
};
以前的触摸=触摸;
});
如果需要,您可以在
touchend
事件中将
previousTouch
设置为null,以防止新的触摸在第一次移动时使用旧的
previousTouch

canvas.addEventListener(“touchend”,(e)=>{
previousTouch=null;
});

当我尝试你的代码时,它会在第行开始调试
previousTouch=touch
这段代码是否在你的机器上工作,我用你的
重播prev listener做了些错事?
可以重新分配。。。这是因为
let
在当前范围内定义了一个变量,而
var
previousTouch=touch时被提升到全局范围错误因为触摸未定义。请接受我的编辑,您的代码将正常工作。我会打勾回答!别担心!我只是有时会发现自己通过阅读答案上的评论来解决问题,所以我想对于下一个人,也许我可以帮助避免一些困惑。:)
var
的作用域是它声明的函数,而不是全局作用域<代码>let
是块范围。