JQuery при прокрутке окна анимировать фоновое изображение
Я пытаюсь добиться эффекта прокрутки с помощью jQuery. У меня есть фоновый div, установленный на 100% размер окна браузера с скрытым переполнением. У этого есть большое фоновое изображение, которое приблизительно. 1500px x 2000px.
Эффект, который я хочу, - это когда пользователь прокручивает страницу, перемещаемую фоновым изображением, в процентах от прокрученного расстояния, поэтому для каждых 200 пикселей, прокручиваемых по странице, изображение перемещается на 10 пикселей в одном направлении.
Может ли кто-нибудь указать мне в правильном направлении? Возможно ли это?:) Большое спасибо заранее.
ОБНОВЛЕНИЕ
С тех пор я попробовал варианты предложения @Capt Otis, но я все еще борюсь с кодом, с которым я играю, следующим образом:
$(window).scroll(function(){
if($(this).scrollTop() > 200) {
$('#div').animate({'background-postion': '+=10px 0'}, 500);
}
});
Может ли кто-нибудь пролить свет на то, что я делаю неправильно?
Ответы
Ответ 1
Здесь вы идете. Фон установлен на 10% прокрутки. Вы можете изменить скорость прокрутки фона, изменив значение 10 в коде.
CSS
html, body{
height:100%;
min-height:100%;
margin:0;
padding:0;
}
.bg{
width:100%;
height:100%;
background: #fff url(..) no-repeat fixed 0 0;
overflow:auto;
}
<div class="bg">
<span>..</span>
</div>
JavaScript
$('.bg').scroll(function() {
var x = $(this).scrollTop();
$(this).css('background-position', '0% ' + parseInt(-x / 10) + 'px');
});
Проверьте рабочий пример http://jsfiddle.net/Vbtts/
Нажмите эту ссылку для полноэкранного примера: http://jsfiddle.net/Vbtts/embedded/result/
Ответ 2
Это сработало для меня:
В js:
$(window).scroll(function() {
var x = $(this).scrollTop();
$('#main').css('background-position', '100% ' + parseInt(-x / 1) + 'px' + ', 0% ' + parseInt(-x / 2) + 'px, center top');
});
В css:
#main {
background: url(../img/img1.png) center top no-repeat, url(../img/img2.png) center top no-repeat, url(../img/img3.png);
background-repeat: no-repeat, no-repeat, repeat-x;
background-position: right top, left top, center top;
Где #main - это div, фоновое изображение которого я хотел переместить. Нет необходимости иметь высоту: 100% для html, body.
Это вариант для нескольких фоновых изображений.
Ответ 3
Если вы не хотите, чтобы вас беспокоили дополнительные фоны div, вот мой код, который я обернул из нескольких примеров:
$(window).scroll(function () {
setBackgroundPosition();
})
$(window).resize(function() {
setBackgroundPosition();
});
function setBackgroundPosition(){
$("body").css('background-position', "-" + (1920 - $(window).width()) / 2 + "px " + -(Math.max(document.body.scrollTop, document.documentElement.scrollTop) / 4) + "px");
}
Math.max требуется для кросс-браузерных проблем. Также замените "1920" на ширину фонового изображения
body{
background-image:url(images/background.jpg);
background-position:center top;
background-repeat:no-repeat;
background-attachment:fixed;
}
Ответ 4
Это может сделать это:
$(window).scroll(function(){
$('#div').css("background-position",parseInt($(this).scrollTop()*0.05));
})
Ответ 5
Посмотрите здесь, чтобы увидеть пример того, как далеко прокручивается пользователь на странице. См. $(this).scrollTop()
?
Вместо того, чтобы ссылаться на $(this), попробуйте использовать фоновый div. Затем используйте функцию .scroll, чтобы определить, сколько для перемещения фона.
Ваш код должен выглядеть примерно так:
$("html").scroll(function{
var move["bottom"] = $("bg_div").scrollTop();
$("bg_div").animate({bottom: move}, 500);
});
Ответ 6
Я не думаю, что вы можете использовать + = или - =, когда у вас есть две части в CSS.
Есть что-то, что вы можете сделать, это немного сложно, но он работает:
$(window).scroll(function(){
if($(this).scrollTop() > 200) {
var bgpos = $("#div").css("background-position");
var bgposInt = 0;
if(bgpos.indexOf("px")!=-1) {
bgpos = bgpos.substr(bgpos.indexOf("px")+3);
bgposInt = parseInt(bgpos.substr(0, bgpos.indexOf("px")));
}
bgposInt += 10;
$("#div").animate({"background-position": "0 "+bgposInt+"px"}, 500);
}
});
Этот код получает только второе число из фоновой позиции div (верхняя позиция), преобразует его в int и увеличивает его на 10. Затем он просто анимирует div в новую позицию.