這個怎麼樣,看到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,背景色變色? –