Я использую функцию внутри объекта для преобразования боковой панели в верхнюю панель при прокрутке.
Выглядит так (я "минифицировал код и удалил имя объекта"):
$(document).on("scroll", vars.stickyNav );
var vars = { ... etc
undoStick: function() {
vars.sticked = false;
vars.stickyMenu.removeClass('_sticked');
return vars.stickyMenu.animate({ 'top': '-60px' }, 0, function() {
vars.clone.css({'left':-32,display:'none'});
});
},
stickyNav: function() {
if ( ! vars.sticked && vars.stickyHeight <= vars.scrollTop ) {
vars.sticked = true;
return vars.stickyMenu.addClass('_sticked').animate({ 'top': '40px'}, 0, function(){
vars.clone.show(null);
vars.clone.css('left',0);
});
}
else if ( vars.sticked && vars.stickyTop >= vars.scrollTop ) {
return vars.undoStick();
}
}
}
Проблема в том, что... если я очень быстро прокручиваю страницу снизу вверх, панель не прилипает к краю. Если я прокручиваю нормально/медленно/нормально быстро, это работает.
Большинство переменных определены вне функции прокрутки. есть дополнительная функция прокрутки, привязанная к окну, которая обновляет переменную $(window).scrollTop() при прокрутке.
Что может быть причиной такого поведения? Функции анимации установлены на 0 мс.
PS: Есть css переход (кубический безье).