我正在尝试构建一个视差网站,在滚动网站时会移动少量元素。
但是,在阅读this post by Paul Irish和this video之后我没有使用滚动事件监听器,而是使用requestAnimationFrame
,而滚动监听器有点错误。我的问题是:
我的文件位于http://www.socialbuzz.com.au/index.html,请滚动到页面底部以查看正在通过javascript操作的元素。
答案 0 :(得分:6)
你应该有一个scroll事件触发一个requestAnimationFrame循环。没有由scroll事件本身触发的requestAnimationFrame。你应该有类似var scrolling = true的东西;发生这种情况时,请运行requestAnimationFrame循环,该循环引用scroll事件中的事件数据。你需要去掉滚动事件,一旦你完成就转向循环,这是一件苦差事,但结果是值得的。希望这可以帮助。
答案 1 :(得分:2)
你不执行动画;也就是说,您没有在没有用户交互的情况下连续修改图形 。当用户滚动时,您对该页面的操作仅发生 ,并且在用户停止滚动后不会继续。因此,使用requestAnimationFrame
没有任何好处,您应该坚持使用简单的事件处理程序。
requestAnimationFrame
的目的是为连续动画提供最佳行为;这里没有任何优势适用。如你所知,循环内部没有任何作用的循环requestAnimationFrame
是完全合适的,如果循环的每一步都以某种方式更新图形,但是由于这里没有任何变化,当用户不滚动时,循环只是浪费CPU时间。
追赶动画应该在一个requestAnimationFrame
循环中完成,该循环是从滚动事件处理程序启动的,并且该循环应该在追赶完成时停止。
答案 2 :(得分:2)
我有类似的经历,经过多次使用鼠标移动监听器和setInterval
以增加动画步骤的频率,我回到了使用onscroll
并在FF10上找到它和FF 15它运作良好。
也许我的要求与你的要求不一样 - 它是一个跟踪滚动条的元素,所以onscroll是改变盒子位置的提示。它落后于FF并且在FF上生涩,但在WebKit和IE上运行良好。我发现onscroll
并没有像在Chrome / IE上那样经常在FF上激活。
当我最初尝试这个时,它将在FF 5或6上。使用鼠标移动监听器或频繁的间隔,我能够增加我的句柄滚动功能被调用的频率 - 但这实际上具有使定位显得更加笨拙的效果。现在使用onscroll似乎在10 ESR和15上为我工作,也许他们修复了一些东西。