基本上,我想在滚动DOM元素之前进行一些预处理。问题是滚动事件是在滚动DOM元素之后触发的。我知道当你使用鼠标滚轮滚动时,鼠标滚轮滚动事件会在滚动DOM元素之前被触发,虽然它没有提供预期的滚动位置,它只是一种类型的滚动。我想知道是否有任何事件被触发每个滚动方法(例如鼠标滚轮,拖动滚动条,按下向下箭头等)之前滚动DOM元素。它不一定是一个事件。我不是要滚动到某个位置,所以scrollTo不适用。
滚动时的事件链: 用户滚动 - > DOM元素物理滚动 - >触发onScroll事件 - >处理东西
理想的事件链: 用户滚动 - >一些事件被捕获并做我想做的事 - > DOM元素物理滚动 - >触发onScroll事件 - >处理东西
答案 0 :(得分:0)
您可以做的最好的事情是onScroll
点火,如果scrollTop
> thingToStick
距离顶部的距离,然后在position: fixed
上设置thingToStick
,否则将position
设置为原来的值。从不坚持变为坚持时,它会闪烁,但除此之外,你不会有任何闪烁。
在sudo-ish代码中:
onScroll = function()
{
if(scrollTop > thingToStick.y)
thingToStick.position = "fixed";
else
thingToStick.position = "relative";
}
在不支持fixed
定位的浏览器中,您会遇到闪烁......
答案 1 :(得分:0)
之前从未尝试过,但为了打破事件链,可以:
希望这会有所帮助。
答案 2 :(得分:0)
你可能想尝试一下。
给你的页面overflow:hidden
以便不显示滚动条,然后放置一个绝对定位的div,其宽度和宽度正确。高度超过内容。滚动此div后,您可以在重新触发事件之前更新任何基础内容。
你也需要通过点击等,所以这真的是一个黑客。像jQuery这样的东西可以帮助触发事件并测量内容的高度。
编辑:css pointer-events:none
可能会有所帮助,具体取决于浏览器。见https://developer.mozilla.org/en/css/pointer-events