2011-05-12 70 views
7

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

事件与上滚动的链: 用户滚动 - > DOM元素物理滚动 - >触发onScroll事件 - >手柄东西

事件的期望的链: 用户滚动 - >某些事件被捕获并做我想做的事 - > DOM元素物理滚动 - >火灾onScroll事件 - >手柄东西

+7

我相信你运气不好。 – epascarello 2011-05-12 16:52:40

+3

在onScroll甚至触发时无法完成的DOM滚动之前,您想做什么?如果您与我们分享这些信息,也许我们可以指导您选择其他解决方案。 – 2011-05-12 17:03:00

+0

我试图“粘住”内容。当用户滚动并且滚动顶部达到某个像素时,一些DOM元素开始“粘住”。在短暂的时间内“粘住”(用克隆的元素替换原始元素并将其“粘住”的位置),浏览器似乎闪烁。如果我在滚动之前定位克隆的元素(使用鼠标滚轮事件进行测试),它不会闪烁。 – 2011-05-12 17:12:18

回答

0

继承人您可能想尝试的东西。

为了让页面overflow:hidden不出现滚动条,请在内容上放置一个绝对定位的div,高度正确&。当该div被滚动时,您可以在重新触发事件之前更新任何基础内容。

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

编辑:css pointer-events:none可能在这里取决于浏览器。见https://developer.mozilla.org/en/css/pointer-events

+0

我认为这是唯一的方法。 – 2011-05-18 18:51:55

+0

@克里斯洪:我不同意。 “指针事件”可能对Chrome,Safari和Firefox有所帮助,但除此之外,它将花费大量的JavaScript来近似鼠标位置,以便光标改变以识别链接。 “标题”属性将变得毫无意义,文本选择将变得更加困难。这绝对不是要走的路,不管是不是。一个更强大的黑客将涉及捕获'onmousewheel','DOMMouseScroll'和'keydown'事件来检测用户何时滚动,但它不会帮助他们拖动滚动条。 – 2011-05-19 08:44:37

+0

再想一想,DIV不必覆盖内容,实际上可能在右边距上只有1px宽,导致出现一个滚动条,然后用它来捕获和触发所有滚动事件(它会是唯一没有溢出的元素:隐藏)。我们可能需要一个计时器来获取当前的文档高度,或者构建一个跨浏览器“高度:100%”兼容的解决方案 – 2011-05-21 17:59:43

0

你能做的最好的是,当onScroll火灾,如果从顶部scrollTop>thingToStick的距离,然后在设置position: fixedthingToStick否则,请将position设置为任何原始内容年。从不粘贴变为粘贴时,它会闪烁,但除此之外,您不会闪烁。

在须藤上下的代码

onScroll = function() 
{ 
    if(scrollTop > thingToStick.y) 
     thingToStick.position = "fixed"; 
    else 
     thingToStick.position = "relative"; 
} 

在不支持fixed定位的浏览器,你坚持与颤动......

+0

感谢您的建议。但我们正试图避免任何闪烁。 – 2011-05-12 17:53:23

+0

没有什么其他的你可以做,我很害怕.. – MicronXD 2011-05-12 17:55:06

0

之前从来没有tryed这一点,但打破事件的链条,将有可能:

  1. 捕获滚动事件
  2. 做你的东西
  3. 使用的preventDefault()和stopPropagation使用原来的(这应该是我认为是可行的)

希望这将有助于抑制事件

  • 假一新的滚动事件。

  • +0

    在捕获滚动事件的时候,元素已经被滚动了。 – 2011-05-16 18:26:05

    +1

    滚动是一个异步事件,这就是为什么它不能通过滚动事件对象阻止onscroll监听器;) – csuwldcat 2013-07-27 12:49:16

    相关问题