UPDATE:
Вот пример jsbin, демонстрирующий проблему.
ОБНОВЛЕНИЕ 2:
И здесь фиксированная версия благодаря fudgey.
В принципе, у меня есть следующий javascript, который прокручивает окно до привязки на странице:
// get anchors with href that start with "#"
$("a[href^=#]").live("click", function(){
var target = $($(this).attr("href"));
// if the target exists: scroll to it...
if(target[0]){
// If the page isn't long enough to scroll to the target position
// we want to scroll as much as we can. This part prevents a sudden
// stop when window.scrollTop reaches its maximum.
var y = Math.min(target.offset().top, $(document).height() - $(window).height());
// also, don't try to scroll to a negative value...
y=Math.max(y,0);
// OK, you can scroll now...
$("html,body").stop().animate({ "scrollTop": y }, 1000);
}
return false;
});
Он отлично работает...... пока я не попытаюсь вручную прокрутить окно. Когда прокрутка или колесико прокручивается, мне нужно остановить текущую анимацию прокрутки... но я не уверен, как это сделать.
Это, наверное, моя отправная точка...
$(window).scroll(e){
if(IsManuallyScrolled(e)){
$("html,body").stop();
}
}
... но я не уверен, как закодировать функцию IsManuallyScrolled
. Я проверил e
(объект event
) в консоли Google Chrome и AFAIK не существует способа различать прокрутку вручную и прокрутку jQuery animate()
.
Как я могу различать ручную прокрутку и одну, вызванную через функцию jQuery $.fn.animate
?