При перемещении приложения от мыши к событиям касания я заметил странное поведение. По сути, TouchMove перестает работать после изменения DOM. События мыши работают нормально в той же ситуации. Я протестировал его с помощью инструментов разработчика Chrome, а также Firefox. Кажется, они согласны с результатами. Это ошибка или я что-то упустил?
Я создал очень простой пример кода, чтобы продемонстрировать, что проблема не связана с какими-либо фреймворками или библиотеками, которые я использую. Я также нашел кажущийся связанным вопрос , который, к сожалению, не содержит решения.
Сенсорная демонстрация:
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>
Один непрерывный жест перетаскивания, начинающийся с красного квадрата, должен вызывать 1) сообщение «start» в журнале, 2) разочарование этого квадрата, которое в данном случае является изменением DOM 3) последовательность сообщений «move» в журнале. Это так в демонстрации мыши, но в демонстрации касания после исчезновения квадрата не происходит никаких событий перемещения.