我正在使用锤子拖拽,它在加载其他东西时变得起伏不定,因为这个警告信息告诉我。

处理'touchstart'输入事件延迟X毫秒由于 主线程忙。考虑将事件处理程序标记为“被动” 使页面反应更灵敏。

所以我试着像这样给听者加上“被动”

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

但我还是收到了警告。


当前回答

我也遇到过同样的问题。然后我用了这个

<脚本type=“文本/javascript”src=“https://unpkg.com/default- passievents”></脚本>

希望你的问题能得到解决。

其他回答

我认为除了基于触摸的事件,你可以添加基于滚动的修复,以防止谷歌页面分数从桌面vs移动标记:

//被动事件监听器(Tw0在设置标志时有轻微变化)

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") });
    }
};
jQuery.event.special.wheel = {
    setup: function( _, ns, handle ){
        this.addEventListener("wheel", handle, { passive: true });
    }
};
jQuery.event.special.mousewheel = {
    setup: function( _, ns, handle ){
        this.addEventListener("mousewheel", handle, { passive: true });
    }
};

这将隐藏警告信息:

jQuery.event.special.touchstart = {
  setup: function( _, ns, handle ) {
      this.addEventListener("touchstart", handle, { passive: !ns.includes("noPreventDefault") });
  }
};

只有在不指定被动时才会发出警告。

要抑制此警告,您可以:

addEventListener('touchstart', this.callPassedFuntion, { 
  passive: false 
})

默认情况下,浏览器监听preventDefault。它会监听,但它会让你知道,你可以在这里改进你的应用。如果不能,让我知道你不能(通过说明:被动:false)。

我从公认答案的评论中创建了这个答案,对于试图找到这个答案的人来说,这个答案可能更难找到。

我找到了一个解决方案,工作在jQuery 3.4.1 slim

在取消最小化之后,在第1567行中将{passive: true}添加到addEventListener函数中,如下所示:

t.addEventListener(p, a, {passive: true}))

什么都不会坏,灯塔审计也不会抱怨监听者。

对于jquery-ui-dragable和jquery-ui-touch-punch,我修复了它类似于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') });
    }
};