1

我有一个嵌入 iframe 的页面。我通常想在 touchmove 事件上正常滚动页面。但是,我需要用户能够通过 touchmove 在 iframe 中“绘制”某些内容,因此当他们在 iframe 上触摸移动时,我需要防止页面滚动。

当我尝试将 touchmove 事件侦听器附加到 iframe 时,在 Chrome 的控制台中,我收到以下错误消息(在 Firefox 中相同):

[干预] 由于目标被视为被动,无法阻止被动事件侦听器内部的默认值。见https://www.chromestatus.com/features/5093566007214080

当我将事件侦听器显式设置为 false 时,甚至会发生这种情况。

当我在 iframe 上时,有什么方法可以不让目标“被视为被动”,或者有没有其他方法可以防止 touchmove 滚动?

preventDefault()编辑:通过删除iframe 中的文档事件侦听器解决了上述错误消息。然而...

我有一个问题,我附加到 iframe 的任何事件侦听器似乎都没有做任何事情:

const iframe = document.querySelector('iframe');

iframe.addEventListener('touchmove', function(e) {
  console.log("touchmoving");
  e.preventDefault();
}, { passive: false });

这不会向控制台记录任何内容。我假设会发生这种情况,因为它使用 iframe 文档的触摸移动事件侦听器来代替?

但是,当我无法触发事件侦听器时,如何防止 touchmove 的默认滚动行为?

如果我将事件侦听器附加到主页的文档,它只会在我在页面上的其他位置开始触摸移动时触发,当我在 iframe 上方启动它时不会触发。

顺便说一句,iframe 本身没有溢出,因此 iframe 内没有滚动,以防万一。

4

0 回答 0