【问题标题】:Added non-passive event listener to a scroll-blocking 'touchmove' event. Consider marking event handler as 'passive' to make the page more responsive向阻止滚动的“touchmove”事件添加了非被动事件侦听器。考虑将事件处理程序标记为“被动”以使页面更具响应性
【发布时间】:2022-02-10 05:32:07
【问题描述】:

所以我在我使用了一段时间的网站上遇到了一个问题,并且突然停止工作。单击 iScroll 模块中的博客文章时,我收到一个事件处理程序错误。

下面,我将提供屏幕截图(那里所有可点击的部分突然无法点击):

浏览器
Internet Explorer:工作正常 - 没问题。
Edge:工作正常 - 没问题。Firefox:工作正常 - 没问题。
Chrome:抛出 Added non-passive event listener to a scroll-blocking 'touchmove' event. 错误 - 链接无法点击。

我正在使用什么
/*! * iScroll v4.2.5 ~ Copyright (c) 2012 Matteo Spinelli, http://cubiq.org * Released under MIT license, http://cubiq.org/license */

问题
在控制台中抛出 Added non-passive event listener to a scroll-blocking 'touchmove' event. Consider marking event handler as 'passive' to make the page more responsive. 错误 - 链接不可点击。

在今天之前一切正常,所以我不确定是什么导致它突然停止工作。据说是从官方最小化的jQuery.js文件中抛出错误。

这是之前开发者使用的库:https://github.com/cubiq/iscroll

所有帮助将不胜感激!

【问题讨论】:

  • Chrome 在几个月前已经将所有与页面滚动相关的事件监听器默认设置为passive,这违反了 Web 规范。这意味着您不能阻止事件的默认操作(滚动)。您是否尝试过使用最新版本的插件?看起来可能已经添加了修复程序。
  • 我好像安装了 iScroll v4.2.5 版本,不知道是不是最新的。
  • 那是 2013 年的,最新的是 2016 年的 5.2.0。编辑 - 但我认为这不会解决它,因为我注意到 2018 年报告的问题。我会看看如果可以修复源代码。
  • 非常感谢@Shikkediel,如果您发现任何详细信息,请告诉我。
  • 非常感谢@Shikkediel,尝试将其应用于 iScroll.js 文件,但我仍然收到 Added non-passive event listener to a scroll-blocking 'touchmove' event. 违规,这很糟糕,因为它仅在 Google Chrome 上不起作用。

标签: javascript jquery html wordpress


【解决方案1】:

答案来自这里:Making wheel scrolling fast by default

中断和指导: 在绝大多数情况下,不会出现破损 被观察。仅在极少数情况下(根据 我们的指标),可能会发生意外的滚动/缩放,因为 preventDefault() 调用在监听器中被忽略 默认情况下被视为被动。您的应用程序可以确定是否 通过检查是否调用它可能会在野外遇到这个问题 preventDefault() 通过 defaultPrevented 属性产生任何影响。这 修复受影响的案例相对容易:通过 {passive: false} addEventListener() 以覆盖默认行为并保留 事件监听器作为阻塞。

如果您收到类似于您看到的警告,您需要将addEventListener() 调用指定为passive

你可以这样做:

target.addEventListener(type, listener, {passive: true});

如果您需要停止传播或在被触发的listener 中调用event.preventDefault(),您应该指定{passive: false} 而不是{passive: true}

这是强制性的,因为设置为 truepassive 选项会阻止在相关 listener 中对 event.preventDefault() 的任何调用。

只要要求的 addEventListener() 调用设置了 passive 选项,这样做就会使这些警告消失。

请注意,这可能不适用于所有浏览器,因此可能需要进行一些更改。

【讨论】:

    猜你喜欢
    • 2018-02-16
    • 2017-01-02
    • 2018-12-01
    • 1970-01-01
    • 2018-03-14
    • 2019-11-08
    • 1970-01-01
    • 2018-02-18
    相关资源
    最近更新 更多