Я разрабатываю веб-сайт, где фон находится в div с отрицательным z-индексом с position:fixed. Затем у меня есть разделы div, которые прокручиваются над ним. Моя цель - изменить фоновое изображение, когда верхняя позиция каждого раздела передается функцией scrollTop. Мой код jQuery в настоящее время создает массив верхней позиции каждого раздела, используя:
var secTops = [];
$('section').each(function(i) {
var t = $(this).offset();
secTops.push(t.top);
});
Затем я подумал, что создам переменную для scroll(), которая будет позицией scrollTop(), например:
$(window).scroll(function() {
var winTop = $(this).scrollTop();
});
Но вот где я застрял. Лучшее, что я могу придумать (что не работает правильно), это следующее:
for (i = 0; i < $('section').length; i++) {
var pos = secTops[i];
if (winTop < pos) {
$('#background').css('background', bgFront + (i+1) + bgBack);
} else {
$('#background').css('background', bgFront + (i+2) + bgBack);
};
};
Но это неправильно. Вы можете игнорировать вторую половину моей функции .css(). Я создал переменные и соответствующим образом пометил свои изображения, так что я знаю, что это работает. Прямо сейчас цикл for проходит через всю итерацию и застревает на полном section.length и, таким образом, переключается только между двумя фоновыми изображениями. Мне нужно это, чтобы постоянно проверять мою переменную winTop на верхние позиции моих разделов и соответствующим образом изменять фон. Я мог бы сделать это с большим количеством if/then или, может быть, даже с длинным переключателем, но должен быть более чистый способ сделать это. Может кто-нибудь помочь мне здесь?
Вот JSFiddle, который использует цвета вместо изображений, но показывает те же проблемы. http://jsfiddle.net/kyleshevlin/5N5WU/1/