为什么 window.addEventListener('scroll', this.someScrollHandler, false) 在 IE 10 上不起作用?

IT技术 javascript reactjs internet-explorer dom-events
2021-05-25 18:46:13

我目前正在构建一个带有滚动处理程序的 React 应用程序,用于在无限滚动组件中加载更多数据。我正在使用window.addEventListener('scroll', this.someScrollHandler, false);(带节流),它适用于除 IE 之外的所有浏览器——不处理任何事件。

事实上,在 IE 控制台中测试,下面的代码,然后滚动,导致没有日志记录:

window.addEventListener('scroll', function() { console.log('testing') }, false);

滚动事件和 IE 发生了什么?

3个回答

我的问题是我的身体高度为 100%,这禁用了滚动事件。

body {
   height: 100%; // <-- will disable window.addEventListener('scroll')
}

经过大量调试,问题出在css上。该应用程序是响应式的,所以我们有一个基本overflow-x: hidden样式,然后overflow-x: initial在断点之后切换到显然 IE 不喜欢初始,所以它仍然在隐藏溢出,从而防止滚动事件触发。切换到overflow-x: visible修复了问题。

这是一个跨浏览器滚动事件侦听器(它禁用滚动,但如果您将 preventDefault 替换为您的处理程序,它应该可以工作):

function disableScroll() {
  if (window.addEventListener) // older FF
    window.addEventListener('DOMMouseScroll', preventDefault, false);
  window.onwheel = preventDefault; // modern standard
  window.onmousewheel = document.onmousewheel = preventDefault; // older browsers, IE
  window.ontouchmove  = preventDefault; // mobile
  document.onkeydown  = preventDefaultForScrollKeys;
}

你可以看到有很多不同的处理程序......