【发布时间】:2012-02-18 21:06:55
【问题描述】:
我正在尝试使用 JavaScript 重新创建具有视差效果的网站。这意味着我有两个或更多层,它们在滚动时以不同的速度移动。
在我的例子中,我只移动了一层,另一层保持静止: 第 1 层 = 网站文本; 第 2 层 = 元素背景;
为此,我使用简单的源代码(使用 jQuery 1.6.4):
var docwindow = $(window);
function newpos(pos, adjust, ratio){
return ((pos - adjust) * ratio) + "px";
}
function move(){
var pos = docwindow.scrollTop();
element.css({'top' : newpos(pos, 0, 0.5)});
}
$(window).scroll(function(){
move();
});
问题: - 所有计算都正确完成,效果按预期“工作”。但是在某些浏览器(Chrome MAC/Windows、Opera MAC、IE,矛盾的是不是 Safari)下存在一些性能故障。
在滚动过程中我看到了什么? - 滚动时背景与滚动一起向一个方向移动,但似乎偶尔会前后跳跃几个像素,这会产生非常令人不安的效果(不流畅)。
我尝试过的解决方案: - 添加一个计时器来限制滚动事件 - 使用持续时间短的 .animate() 方法而不是 .css() 方法。
我还观察到,使用 .scrollTo 方法(scrollTo jQuery 插件)时动画很流畅。所以我怀疑触发滚动事件(太快)有问题。
您是否观察到相同的行为? 知道怎么解决吗? 你能发布一个更好的解决方案吗?
感谢所有回复
编辑#1: 在这里你可以找到 jsfiddle 演示(带计时器):http://jsfiddle.net/4h9Ye/1/
【问题讨论】:
-
window.onscroll 很紧张,它不会为移动的每个像素触发。
-
我认为没有必要为每个像素触发事件(这会更重)。有什么我可以使用的选项吗?
-
“我怀疑触发滚动事件(太快)有问题。” 是的,你是对的。
标签: javascript animation scroll smooth