在将我的应用程序从鼠标事件转换为触摸事件时,我注意到一些奇怪的行为。基本上,在DOM更改后,touchmove停止工作。在同样的情况下,鼠标事件可以正常工作。我使用Chrome开发者工具和Firefox进行了测试,它们似乎对结果达成了一致意见。这是一个错误还是我漏掉了什么?
我创建了一个非常简单的代码示例来证明问题与我使用的任何框架或库都无关。我还发现了似乎相关的问题,但不幸的是其中没有解决方案。
触摸演示:
从红色正方形开始的连续拖动手势应该导致以下事件发生:1)日志中出现“start”消息,2)该正方形消失,这是DOM更改的情况,3)在日志中出现“move”消息序列。这在鼠标演示中是如此,但在触摸演示中,正方形消失后没有“move”事件。
我创建了一个非常简单的代码示例来证明问题与我使用的任何框架或库都无关。我还发现了似乎相关的问题,但不幸的是其中没有解决方案。
触摸演示:
window.addEventListener("touchmove", onTouchMove, {passive: false})
document.addEventListener('DOMContentLoaded', function(){
var elem = document.getElementById("nice");
console.log(elem)
elem.addEventListener("touchstart", onTouchStart)
})
function onTouchMove(event) {
console.log("touch move")
}
function onTouchStart(event) {
console.log("touch start")
var elem = document.getElementById("nice")
elem.remove()
}
<!DOCTYPE html>
<html>
<body style="width: 100%; height: 100%; background-color: yellow">
<div style="position: absolute; width: 100px; height: 100px; background-color: red; left: 100px; top: 100px" id="nice"></div>
</body>
</html>
鼠标演示:
window.addEventListener("mousemove", onMouseMove, {passive: false})
document.addEventListener('DOMContentLoaded', function(){
var elem = document.getElementById("nice");
console.log(elem)
elem.addEventListener("mousedown", onMouseDown)
})
function onMouseMove(event) {
console.log("mouse move")
}
function onMouseDown(event) {
console.log("mouse start")
var elem = document.getElementById("nice")
elem.remove()
}
<!DOCTYPE html>
<html>
<body style="width: 100%; height: 100%; background-color: yellow">
<div style="position: absolute; width: 100px; height: 100px; background-color: red; left: 100px; top: 100px" id="nice"></div>
</body>
</html>