我有一个附加到touchstart的事件处理程序,我想在touchmove发生时立即调用preventDefault
。我目前有这个代码。
link.addEventListener("click", function () {
console.log("clicked");
});
link.addEventListener("touchstart", function (touchStartEvent) {
var mouseMoveHandler = function () {
console.log("moved.");
touchStartEvent.preventDefault(); // This does not work.
link.removeEventListener('touchmove', arguments.callee);
};
link.addEventListener("touchmove", mouseMoveHandler);
});
我在touchmove的事件处理程序中为touchstart调用preventDefault
。这似乎不起作用,因为始终会调用click事件处理程序。
我在这里做错了什么?
答案 0 :(得分:0)
当您致电preventDefault
时,它适用于touchstart事件,而不适用于点击事件。
您可以为链接对象添加一些指示移动状态的属性,并在单击处理程序本身内部进行检查(并通过preventDefault
或return false
停止
var link = document.getElementById("link");
link.addEventListener("click", function () {
if (this.moving) {
this.moving = false;
return false;
}
console.log("clicked");
});
link.addEventListener("touchstart", function (touchStartEvent) {
var mouseMoveHandler = function () {
console.log("moved.");
this.moving = true;
link.removeEventListener('touchmove', arguments.callee);
};
link.addEventListener("touchmove", mouseMoveHandler);
});