将轮子事件从可滚动容器传播到窗口



问题

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

我希望在该元素上使用鼠标滚轮滚动,以向上/向下滚动窗口,就像在该元素不可滚动时一样。

考虑的解决方案

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

我还考虑过捕获scroll事件的deltaY,并用它手动滚动window.scrollTo()窗口,但我担心每个浏览器/OS可能有不同的滚动实现,这使得很难在所有平台上可靠地复制行为。

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

问题

有没有办法以某种方式将轮子事件传播到父(窗口)?

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

将一个轴设置为可见(默认值),而将另一个轴设为不同的值会导致可见行为为自动。(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>

最新更新