指针事件:none 不适用于移动设备

Pointer-events: none doesn't work on mobile

我正在处理 Vue 的自定义拖放模块,我发现了一个问题。为了在指针向下覆盖浏览器 D&D(因为我需要),我正在克隆 div,我想拖动它然后触发 pointermove(在这个事件中,我在克隆 div 上设置 X 和 Y) ,当我向上发射指针时,这个 div 的值被转移到拖动位置。为了在指针向上事件中克隆(拖动)div 下的目标元素,我使用了 css 属性 指针事件:none(在克隆 div 上)和桌面上一切正常。在移动设备上,事件定位总是拖动元素。

触发事件中有 console.log 个: logged events

现代移动浏览器改用 'touch-action' CSS 属性。 您可以在这里阅读所有相关信息:https://developer.mozilla.org/en-US/docs/Web/CSS/touch-action

只需将 touch-action: none; 添加到您添加 pointer-events: none; 的同一元素即可。

否则,根据您设置 vue 组件的方式,您可能需要监听 'touchstart' 和 'touchend' 事件并取消它们:

<TargetElement>.addEventListener( 'touchstart', e => e.preventDefault )

我在另一个问题中找到了我的问题的答案: How to find out the actual event.target of touchmove javascript event?

我们可以通过 document.elementFromPoint( e.clientX, e.clientY );

定位事件下的元素