这个怎么样,看到JSFiddle(下文解释):
var height_colors = [
[0, "#FFF"],
[50, "#FFFF00"],
[100, "#FF0000"],
[150, "#FF00FF"],
[200, "#00FF00"],
[250, "#0000FF"],
[300, "#00FFFF"],
[350, "#123456"],
[400, "#654321"],
[450, "ABCDEF"],
[500, "FEDCBA"]
];
var box = $("#lipsum");
box.on("scroll", function() {
var scrollPos = $(this).scrollTop();
$.each(height_colors, function(key, value) {
if(scrollPos < value[0] || key == height_colors.length - 1) {
box.css("background", value[1]);
return false;
}
});
});
给定一个可滚动的div #lipsum
,并[<height>, <color>]
值的数组,当我们滚动我们的元素,我们检查它的scrollTop()
值,并遍历我们的数组,直到我们找到一个height
值比当前scrollTop()
低。
现在,这可以通过多种方式进行转换。例如,不是计算可滚动div的位置,可以计算滚动位置相对于document
的相对位置,然后替换您的数组,作为要素数组以及要迭代的颜色。你会做同样的事情,但是计算迭代元素的offset
,直到你得到一个offset
大于当前scrollTop
的元素。
您的新阵列可能看起来像:
var height_colors = [
["#elem-a", "#FFF"],
["#elem-b", "#555"],
...
]
这可能是在这种情况下,较好地保持了上次检查元素的轨道,让你使用“最后一个前”一旦你意识到你走得太远了。 (未选中该代码)
// Assign a default color for scroll positions before your first element
var last_color = "#FFF";
$.each(height_colors, function(key, value) {
var current = $(value[0]);
if(scrollPos < current.offset().top) {
$("body").css("background", last_color);
}
last_color = value[1];
});
您提供的链接似乎做同样的事情,而且有人指出,你可以使用的.animate()
的jQuery UI的变种颜色之间褪色(虽然我只有50例像素停止,200ms的动画太长了)。
到目前为止你一直在尝试什么? –
认识到,一旦你达到某个点,该网站的背景div改变颜色。你可以做什么来指定,如果高度> = X,背景色变色? –