我尝试为我的Ipad设备实现一些javascript函数。我想在我的画布div上使用一些滑动动作和点击动作。
我实现了水平和垂直滑动功能。我必须在touchstart事件上使用preventDefault来防止整个页面滚动时滑动。它工作得很好,但在此之后我注意到它禁用了这个div上的每个点击事件。删除preventDefault后,click事件将再次起作用。
有没有解决这个问题的方案?
dojo.connect(this.node, "ontouchstart", this, "touchstart");
...
touchstart: function(e){
this.touch = dojo.clone(e.changedTouches[0]);
e.preventDefault();
}
this.node = document.getElementById('aa');
<div id="aa" style="width: 600px; height: 400px;">
<div onclick="alert('asd');" style="width: 100px; height: 100px; background-color: #ff0000; margin: auto;">
</div>
</div>
答案 0 :(得分:7)
我知道Prusse已经正确地回答了这个问题,但它缺乏我在答案中寻找的信心。 clickstart中由preventDefault()抑制click事件的原因是因为任何连接的事件和touchstart之后的事件都将被抑制。 解决方案是将preventDefault()添加到touchmove事件中。
处理点击次数下的Mozilla documentation详细说明了这一点:
因为在touchstart或第一次touchmove上调用preventDefault() 系列事件会阻止相应的鼠标事件触发, 通常在touchmove上调用preventDefault()而不是 touchstart。这样,鼠标事件仍然可以触发等等 链接将继续有效。
答案 1 :(得分:2)
您可以尝试阻止touchmove事件的默认操作。