当前位置: 首页 > 知识库问答 >
问题:

考虑将事件处理程序标记为“被动”,以使页面更具响应性

殷烨
2023-03-14

我用锤子来拖拽,当装载其他东西时,锤子会变得颠簸,这条警告信息告诉我。

由于主线程繁忙,对触摸启动输入事件的处理延迟了X毫秒。考虑将事件处理程序标记为“被动”,以使页面更具响应性。

所以我试着像这样给听众加上被动语态

Hammer(element[0]).on("touchstart", function(ev) {
  // stuff
}, {
  passive: true
});

但是我仍然收到这个警告。

共有3个答案

阎鹏
2023-03-14

对于带有jquery ui touch punch的jquery ui dragable,我修复了它,类似于Iván Rodríguez,但又为touchmove添加了一个事件覆盖:

jQuery.event.special.touchstart = {
    setup: function( _, ns, handle ) {
        this.addEventListener('touchstart', handle, { passive: !ns.includes('noPreventDefault') });
    }
};
jQuery.event.special.touchmove = {
    setup: function( _, ns, handle ) {
        this.addEventListener('touchmove', handle, { passive: !ns.includes('noPreventDefault') });
    }
};
盖嘉珍
2023-03-14

这隐藏了警告消息:

jQuery.event.special.touchstart = {
  setup: function( _, ns, handle ) {
      this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
  }
};
罗学林
2023-03-14

对于那些第一次收到此警告的人来说,这是由于最近(2016年夏天)在浏览器中实现的名为被动事件监听器的前沿功能。从https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md:

被动事件监听器是DOM规范中的一个新特性,它使开发人员能够选择加入,通过消除滚动来阻止触控式和滚轮式事件监听器,从而提高滚动性能。开发人员可以用{passive:true}注释touch和wheel监听器,以表明他们永远不会调用默认值。该功能在Chrome51、Firefox49中发布,并在WebKit中登陆。有关完整的官方解释,请阅读这里的更多内容。

另请参见:什么是被动事件侦听器?

如果您是通过JavaScript库间接处理事件,那么您可能会受制于该特定库对该功能的支持。截至2019年12月,似乎没有任何主要图书馆实施支持。一些例子:

  • jQuery。js-持续问题:https://github.com/jquery/jquery/issues/2871
 类似资料:
  • 问题内容: 我正在使用锤子进行拖动,在加载其他东西时它变得不稳,因为此警告消息告诉我。 由于主线程繁忙,“ touchstart”输入事件的处理延迟了X ms。考虑将事件处理程序标记为“被动”,以使页面更具响应性。 所以我试图像这样向听众添加“被动” 但我仍然收到此警告。 问题答案: 对于那些首次收到此警告的用户,这是由于最近才在浏览器中实现了称为“ 被动事件侦听 器”的最新功能(2016年夏季)

  • 我的react中有一个滚动的事件处理程序,我正试图使它成为被动的。但它不起作用,我在控制台中不断收到以下警告: 将事件处理程序标记为“被动”以使页面更加响应。 下面是我阅读事件的地方: 这是我的EventContainer中的函数。js文件: 在这一行: {被动:被动} 我得到以下错误在我的编辑器: 参数类型{passive:boolean}不可分配给参数类型boolean 有人知道我做错了什么吗

  • 问题内容: 我有一个LoginForm组件。我要检查之前提交,这两个和设置。我尝试使用此代码(省略了很多内容): 但是,我在事件处理程序中得到一个,说是空的。 我该怎么办? 问题答案: 你需要设置的方法,因为现在是,对于此操作,您可以使用 或者您可以使用箭头功能

  • 事件就是用户或浏览器自身执行的某种动作。诸如click、load 和mouseover,都是事件的名字。而响应某个事件的函数就叫做事件处理程序(或事件侦听器)。事件处理程序的名字以"on"开头,因此click 事件的事件处理程序就是onclick,load 事件的事件处理程序就是onload。为事件指定处理程序的方式有好几种。 13.2.1 HTML事件处理程序某个元素支持的每种事件,都可以使用一

  • 下面是我的代码片段: 现在java用'unhandled exception type SQLException)标记指示语句(以及后面的所有语句)。gfsql.dosql抛出此异常并定义为: public ResultSet doSQL(String sqlCommand)抛出SQLException{ 有趣的是--如果我像这样重复“catch”块: 未标记“未处理”错误。(但是,重复的catc

  • 有没有办法让React组件中定义的事件处理程序在类似HTML的标记中可以访问?我的意思是: 我的目标是定义,但目前我只知道如何创建诸如和之类的参数。 如何使事件处理程序通过TSX访问,类似于使用事件?