У меня есть специальная секция прокрутки параллакса на сайте. В разных местах есть пузыри речи, и все они прокручиваются с разной скоростью.Пользовательские проблемы с прокруткой параллакса
http://goo.gl/jZhVrJ (вы найдете речь пузыри на полпути вниз страницы)
При прокрутке вниз в первый раз, все работает отлично и элементы позиционируются, где я хотел бы их. Вот скриншот того, как он должен выглядеть:
Однако, если прокрутить назад к вершине, а затем снова вниз - позиционирование пузырьков меняется каждый раз, когда вы вернуться к этому разделу. Если вы делаете это достаточно времени, вы можете получить речевые пузыри полностью вне этого блока контента. Вот скриншот об этом, в конечном счете, не выглядящий справа:
Общая концепция заключается в том, что я позиционировал каждый из пузырьков речи. Затем, когда пользователь прокручивает код, изменяется свойство «top» для каждого пузыря. Если пользователь прокручивается вниз, он уменьшает «верхнее» значение. Если они прокручиваются вверх, это увеличивает «верхнее» значение. Каждый пузырь - это другая лупа, поэтому пузырьки движутся с разной скоростью.
Это также использует плагин «inview», поэтому прокрутка происходит только тогда, когда пользователь имеет этот блок.
Вот код JS делает параллакс скроллинга:
var $window = $(window);
var windowHeight = $window.height();
var $quoteBG = $('.philosophy');
var quote1 = $("#quote1");
var quote2 = $("#quote2");
var quote3 = $("#quote3");
var quote4 = $("#quote4");
var quote5 = $("#quote5");
var quote6 = $("#quote6");
var quote7 = $("#quote7");
var quote8 = $("#quote8");
var quote9 = $("#quote9");
var scrolldirection = '-';
var lastScrollTop = 0;
var modifier = '-';
$(window).scroll(function(event){
var st = $(this).scrollTop();
if (st > lastScrollTop){
scrolldirection = 'down';
} else {
scrolldirection = 'up';
}
lastScrollTop = st;
});
//function to be called whenever the window is scrolled or resized
function Move(){
//if the second section is in view...
if($quoteBG.hasClass("inview")){
if (scrolldirection == 'down') {
modifier = '-';
} else {
modifier = '+';
}
quote1.css('top', modifier+'=2');
quote2.css('top', modifier+'=1');
quote3.css('top', modifier+'=3');
quote4.css('top', modifier+'=2.1');
quote5.css('top', modifier+'=2.5');
quote6.css('top', modifier+'=3');
quote7.css('top', modifier+'=2');
quote8.css('top', modifier+'=1.5');
quote9.css('top', modifier+'=3');
}
}
$window.resize(function(){ //if the user resizes the window...
Move(); //move the background images in relation to the movement of the scrollbar
});
$window.bind('scroll', function(){ //when the user is scrolling...
Move(); //move the background images in relation to the movement of the scrollbar
});
Я не вижу поведения, которое вы описываете по ссылке, которую вы предоставили. Можно ли создать JSFiddle или что-то подобное, что демонстрирует проблему? –
Я не могу заставить это работать в JSFiddle, кажется слишком сложным для меня, чтобы воссоздать. Вам нужно прокручивать вниз и назад к вершине несколько раз. Чтобы он выглядел как скриншот, где он сильно сломан, я спустился и вернулся примерно в 25 раз. – sccr410
Nevermind, получил функциональный (дисфункциональный?) JSFiddle! http://jsfiddle.net/up15ns6t/ – sccr410