Javascript iOS/Android&hammer.js:当从DOM中删除HTML元素时,事件停止
我在iOS/Android设备上使用hammer.js有一个大问题:事件和删除的HTML元素似乎有问题。假设我们有一个容器,在这个容器上我们使用带有触摸和平移处理程序的hammer.js。里面有一个HTML元素,我们开始拖动它。当在处理程序内部的某些逻辑期间删除元素时,将不再触发任何事件,即使手指仍在设备上并在移动。桌面浏览器不会显示这种恼人的行为 这里有一个小例子要演示: HTML: JS: 当你在iOS上调试这个程序时,你可以看到,当你在触摸id为的盒子后试图移动手指时,事件是如何停止的——因为它会在半秒钟后被删除Javascript iOS/Android&hammer.js:当从DOM中删除HTML元素时,事件停止,javascript,touch,dom-events,hammer.js,Javascript,Touch,Dom Events,Hammer.js,我在iOS/Android设备上使用hammer.js有一个大问题:事件和删除的HTML元素似乎有问题。假设我们有一个容器,在这个容器上我们使用带有触摸和平移处理程序的hammer.js。里面有一个HTML元素,我们开始拖动它。当在处理程序内部的某些逻辑期间删除元素时,将不再触发任何事件,即使手指仍在设备上并在移动。桌面浏览器不会显示这种恼人的行为 这里有一个小例子要演示: HTML: JS: 当你在iOS上调试这个程序时,你可以看到,当你在触摸id为的盒子后试图移动手指时,事件是如何停止的——
这真的是预期的行为吗?有什么建议吗?你的小提琴在iOS 7中对我很管用!所有console.log都正确显示。
<div id="wrapper">
<div id="steady"></div>
<div id="willBeDeleted"></div>
</div>
#wrapper {
width: 300px;
height: 300px;
border: 1px solid black;
position: relative;
margin-top: 100px;
}
#steady {
width: 50px;
height: 50px;
position: absolute;
top: 10px;
left: 10px;
background: green;
-webkit-user-select: none;
-webkit-touch-callout: none;
-webkit-user-drag: none;
}
#willBeDeleted {
width: 50px;
height: 50px;
position: absolute;
right: 10px;
bottom: 10px;
background: yellow;
-webkit-user-select: none;
-webkit-touch-callout: none;
-webkit-user-drag: none;
}
Hammer(document.getElementById('wrapper'))
.on('hammer.input', function(evt) {
if (evt.isFirst) {
console.log('touch', evt.target.id);
if (evt.target.id === 'willBeDeleted') {
window.setTimeout(function() {
$(evt.target).remove()
}, 500);
}
}
})
.on('panstart', function(evt) {
evt.preventDefault();
console.log('panstart', evt.target.id);
})
.on('panmove', function(evt) {
evt.preventDefault();
console.log('panmove', evt.target.id);
})
.on('panend', function(evt) {
console.log('panend', evt.target.id);
});