для небольших изменений положения (containerScrollY1-containerScrollY2) = 1 или -1. У вас проблема с округлением на
newY = myPosY + (containerScrollY1-containerScrollY2)*params.inertiaY;
$base.css('top',newY+'px');
, если inertia = 0.25
, и вы прокрутите вниз на один пиксель, then new = old - 0.25
, чтоэтажей до old - 1
, если вы прокрутите вверх на один пиксель, а затем new = old + 0.25
, что даст этажей до old
, поэтому для любой прокрутки одного пикселя (которую я записал много, пытаясь использовать ваш код), объект перемещается на единицу при прокруткевниз и не двигается вообще при прокрутке вверх.
для больших изменений в положении (прокрутка быстро, о которых вы говорили) проблема возникает только из движущихся объектов, если они видимы.Если вы удалите условие isVisible
внутри handleScrolling
, проблема быстрой прокрутки исчезнет (если каждая прокрутка достаточно велика, чтобы избежать проблемы округления выше).Например, прокрутка в 100 пикселей приводила к тому, что объект, находящийся за пределами экрана в 20 пикселей, перемещался на 80 пикселей в незаписанном прыжке (т. Е. Его myPosY
не синхронизировался на 80 пикселей).
Чтобы устранить потенциально обе эти проблемы, я бы сохранил исходную позицию объекта в качестве параметра, а затем всегда вычислял его параллаксированную позицию из этого абсолюта.Например, newY = params.origY - $(params.container).scrollTop()*inertiaY
Это сработало с моей стороны.Удачи!
Кроме того, http://johnpolacek.github.com/scrollorama/ довольно хорош и имеет параллакс, если вы его не пробовали.Не знаю, работает ли он для вашей специфики.