【发布时间】:2016-06-28 14:54:50
【问题描述】:
我想知道是否可以以及如何将鼠标滚轮/滚动事件(用户尝试滚动)从header 传输到@987654329 @。
我有以下示例情况:
+------------+ +------------+|
| header | | header ||
+------------+ +------------+|
| || | ||
| || | ||
| container || | container ||
| || | ||
| || | ||
+------------+ +------------+|
situation 1 situation 2
情况
情况 2 是可以滚动整个页面的“传统”设置。当您的光标悬停在标题上时(即使它可能已修复),滚动尝试将传递到 body/html。由于容器溢出 body/html,如果用户旋转他/她的鼠标滚轮,容器将移动/滚动。因为 header 是固定的,所以它会保持在相同的位置。
情况 1 是我的测试设置。容器的内容溢出容器会导致容器显示滚动条。现在,当用户的光标悬停在标题上并且用户旋转他/她的滚轮时,我希望容器也滚动。
更新 1
situation 1 的 jsfiddle
situation 2 的 jsfiddle
更新 2
我创建了另一个fiddle 来展示我的进展,其中可能存在解决方案,但我无法让它发挥作用。这可能会激发其他人获得实际解决方案:)
我得到错误:(index):69 Uncaught InvalidStateError: Failed to execute 'dispatchEvent' on 'EventTarget': The event is already being dispatched.
(目前它只是 chrome 中的滚动事件)
更新 3
This 最接近我基于“其他解决方案 2”的预期解决方案。感谢 Maksym Stepanenko 的研究,这似乎还不可能。我暂时不回答这个问题,以防有人找到方法:)
其他解决方案
这些问题讨论了这个问题,但没有像我期望的那样为这个设置提供解决方案:
- 这无济于事,因为标头没有放在容器上方,而是放在上方。 HTML & JavaScript - Passing the scroll action from one element to another
- 接受的答案不会传输事件,而只是设置 scrollTop。这不是浏览器在滚动时提供的行为。您可以清楚地看到 jsFidle 在悬停元素时或正常执行滚动时滚动发生的方式的不同。浏览器使滚动平滑,scrollTop 只是设置使其“震惊”的值。但是,除了“震惊”部分之外,这非常接近我想要的行为! Pass mousewheel event through fixed content
【问题讨论】:
-
您能否将您的 HTML 添加到问题中。这对答案至关重要,因为我们需要了解结构如何组合在一起以确定事件冒泡。
-
是的,当然!给我几分钟:)
-
你不能只创建一个滚动容器的javascript/jQuery函数,它由容器的滚动事件和标题的滚动事件调用吗?
-
是的,那么解决方案看起来像(如果我理解正确的话)设置了 scrollTop 的“其他解决方案 2”。然而,这并不像浏览器倾向于自行滚动那样“流畅”。你可以看到这个小提琴的区别(提供了那个遮阳篷:jsfiddle.net/Toukakoukan/5bwWe/20),这个例子在 Firefox 中也不起作用,但可以修复
-
有些人在 SO 上只是为了投反对票,然后他们继续提出另一个问题来做同样的事情。他们看到语法错误并投反对票。人很奇怪。
标签: javascript jquery html css