将Window Object上的Mouse Wheel事件更改为{passive:false} - Javascript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将Window Object上的Mouse Wheel事件更改为{passive:false} - Javascript相关的知识,希望对你有一定的参考价值。

随着Chrome [73]的最新更新,他们改变了被动事件监听器如何使用窗口对象上的鼠标滚轮。基本上这已经破坏了许多平滑滚动插件,这些插件在Chrome中滚动时会消除传统鼠标滚轮的默认“抖动”。

Chrome平台状态的变化就在这里。

https://www.chromestatus.com/features#browsers.chrome.owners%3A%20sahel%40chromium.org

...并在此页面上,它会将您的页面显示为默认值现在等效于此:

`window.addEventListener("wheel", func, {passive: true} );`

所以我猜我需要编写一个将其更改为的函数:

`window.addEventListener("wheel", func, {passive: false} );`

https://github.com/sahel-sh/Document-level-passive-wheel-event-listeners/blob/master/Explainer.md

我想这样做是一个独立的功能,而不是通过我试图找出如何以及在何处执行此操作的插件的所有代码。

有谁知道如何编写一个独立的功能,这样做?

我所做的一切似乎都没有用。我该如何解决这个问题?

答案

试试这个

const EVENTS_TO_MODIFY = ['touchstart', 'touchmove', 'touchend', 'touchcancel', 'wheel'];

const originalAddEventListener = document.addEventListener.bind();
document.addEventListener = (type, listener, options, wantsUntrusted) => {
  let modOptions = options;
  if (EVENTS_TO_MODIFY.includes(type)) {
    if (typeof options === 'boolean') {
      modOptions = {
        capture: options,
        passive: false,
      };
    } else if (typeof options === 'object') {
      modOptions = {
        ...options,
        passive: false,
      };
    }
  }

  return originalAddEventListener(type, listener, modOptions, wantsUntrusted);
};

const originalRemoveEventListener = document.removeEventListener.bind();
document.removeEventListener = (type, listener, options) => {
  let modOptions = options;
  if (EVENTS_TO_MODIFY.includes(type)) {
    if (typeof options === 'boolean') {
      modOptions = {
        capture: options,
        passive: false,
      };
    } else if (typeof options === 'object') {
      modOptions = {
        ...options,
        passive: false,
      };
    }
  }
  return originalRemoveEventListener(type, listener, modOptions);
};

以上是关于将Window Object上的Mouse Wheel事件更改为{passive:false} - Javascript的主要内容,如果未能解决你的问题,请参考以下文章

补充+复习

SFML sf :: Mouse :: getPosition方法无法写入正确的参数

判断Mouse事件源类型

WPF 在窗口的 Deactivated 使用 Mouse 的 Capture 将会让进程失去交互

缓动公式

Window 7 上的 ATL COM DLL 注册无法更新 CLSID 部分,但 TypeLib 可以工作