之前被触发的事件(不是之后!)DOM元素在javascript中滚动

时间:2011-05-12 16:51:16

标签: javascript html events scroll mousewheel

基本上,我想在滚动DOM元素之前进行一些预处理。问题是滚动事件是在滚动DOM元素之后触发的。我知道当你使用鼠标滚轮滚动时,鼠标滚轮滚动事件会在滚动DOM元素之前被触发,虽然它没有提供预期的滚动位置,它只是一种类型的滚动。我想知道是否有任何事件被触发每个滚动方法(例如鼠标滚轮,拖动滚动条,按下向下箭头等)之前滚动DOM元素。它不一定是一个事件。我不是要滚动到某个位置,所以scrollTo不适用。

滚动时的事件链: 用户滚动 - > DOM元素物理滚动 - >触发onScroll事件 - >处理东西

理想的事件链: 用户滚动 - >一些事件被捕获并做我想做的事 - > DOM元素物理滚动 - >触发onScroll事件 - >处理东西

3 个答案:

答案 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)

之前从未尝试过,但为了打破事件链,可以:

  1. 捕捉滚动事件
  2. 做你的东西
  3. 使用preventDefault()和stopPropagation来禁止事件
  4. 使用原始滚动事件假冒新的滚动事件(我认为这应该是可行的)
  5. 希望这会有所帮助。

答案 2 :(得分:0)

你可能想尝试一下。

给你的页面overflow:hidden以便不显示滚动条,然后放置一个绝对定位的div,其宽度和宽度正确。高度超过内容。滚动此div后,您可以在重新触发事件之前更新任何基础内容。

你也需要通过点击等,所以这真的是一个黑客。像jQuery这样的东西可以帮助触发事件并测量内容的高度。

编辑:css pointer-events:none可能会有所帮助,具体取决于浏览器。见https://developer.mozilla.org/en/css/pointer-events