将滚轮事件从可滚动容器传播到 window

Propagate wheel event from a scrollable container to the window

问题

我有一个可水平滚动的元素(overflow-x: scroll;)。如果我将鼠标悬停在它上面并使用鼠标滚轮(垂直),它将不会产生任何动作 - 因为可滚动的元素会捕获鼠标滚轮。

我想在该元素上使用鼠标滚轮滚动来向上/向下滚动 window,就像该元素不可滚动时那样。

考虑的解决方案

我尝试使用 wheel 事件并在垂直滚动时阻止默认设置,但它没有做任何事情。

我也考虑过捕获 scroll 事件的 deltaY 并使用它手动滚动 window 和 window.scrollTo(),但是,恐怕每个浏览器 / OS 滚动的实现可能不同,因此很难在所有平台上可靠地复制该行为。

在某些滚动库的帮助下手动实现滚动行为,而不是在浏览器上进行中继 - 这是最后的手段。

问题

有没有办法以某种方式将该车轮事件传播给父级 (window)?

你只需要告诉元素不要听垂直滚动。默认情况下,属性 为 visible,但有一个例外:

Setting one axis to visible (the default) while setting the other to a different value results in visible behaving as auto. (MDN Webdocs)

这意味着您需要显式设置 overflow-y: hidden 以获得您想要的行为。

body{
  height: 1000px;
}
#outer{
  width: 200px;
  height: 200px;
  overflow-x: scroll;
  overflow-y: hidden;
}
#hscroll{
  width: 500px;
  height: 500px;
 }
<div id="outer"><div id='hscroll'><p>Scrollme</p></div></div>