它们可以 100% 一起存在,这是一个很好的问题,没有很好的答案...当您在移动设备上时,点击时会引发 mouseenter 事件...如果您还检测到 onclick 和 mouseenter ,那么移动设备和台式机之间就会存在差异。
目前解决这么小的问题有点困难。
const x = document.getElementById('some_node')
x.onclick=(e)=>{
e.stopPropagation()
// this logic will be triggered on click for both desktop and mobile
}
x.onmouseenter=(e)=>{
e.stopPropagation()
// this logic will be triggered on click for mobile only (but will
//have already been triggered on desktop when cursor entered node)
}
我为此提出的唯一解决方法,我认为它非常聪明,是使用事件监听器进行点击/触摸。触发这些事件的顺序/优先级为:touch > mouseenter > click。
由于首先触发了触摸事件,因此您可以添加一个触摸事件侦听器(它只会在移动设备上注册),并更改一个防止触发 mouseenter 事件的变量(这是通常与onclick 逻辑)...像这样:
let isMobile = false
x.addEventListener('touchstart',(e)=>{
isMobile = true
}, false);
然后你的 mouseenter 需要看起来像这样:
x.onmouseenter=(e)=>{
e.stopPropagation()
if(!isMobile){
// this logic will no longer cause a conflict between desktop and mobile
}
}