Обнаружение триггера события jquery пользователем или вызов по коду

у меня есть немногоwindow.onscroll событие

$(window).scroll(function(e){
    //My Stuff
});

но в моем коде я называю анимационный прокрутку к где-то

$('html, body').stop().animate({
   scrollTop:555
}, 1000);

так, как я обнаружил, что страница прокручивалась пользователем или вызывалась моим кодом. Мое текущее решение поставить флаг перед вызовомanimate затем в моем коде очистите его, но это не умное решение. Я также читал об обнаруженииe.which или жеe.originalEvent но это не работает. Я думаю, у вашего эксперта есть хорошее решение здесь.

 Trinh Hoang Nhu15 июн. 2012 г., 12:58
Мне приходится вызывать анимацию в нескольких местах, поэтому обновлять их все будет недостаточно умно. Но что происходит, когда пользователь прерывает анимацию, прокручивая страницу? Флаг не может помочь
 Trinh Hoang Nhu15 июн. 2012 г., 12:59
Флаг @Sarfraz может быть установлен в false, когда анимация завершена (в jquery)
 Sarfraz15 июн. 2012 г., 12:57
@gdoron: Флаг, установленный как true, всегда будет истинным, потому что он не может определить, прокручивал ли пользователь сам и установил ли этот флаг снова в false, насколько я понимаю из вопроса.
 gdoron15 июн. 2012 г., 12:54
Подождите, почему решение флага недостаточно хорошо? Что в этом не умного?

Ответы на вопрос(2)


я приведу здесь вопрос для тех, кто найдет эту ветку.

Определить, запускается ли событие прокрутки вручную в jQuery

Решение Вопроса
$('#scroller').scroll(function(e) {
    if (e.originalEvent) {
        // scroll happen manual scroll
        console.log('scroll happen manual scroll');
    } else {
        // scroll happen by call
        console.log('scroll happen by call');
    }
});

$('#scroller').scroll(); // just a initial call

e.originalEvent будутundefined но при прокрутке вручную это дастscroll объект.

DEMO

 13 февр. 2015 г., 18:25
Кажется, больше не работает.
 03 янв. 2014 г., 23:44
Не работает сanimate, ...
 26 окт. 2014 г., 11:04
У меня не работает: e.originalEvent всегда есть и идентичен в обоих случаях.
 Trinh Hoang Nhu15 июн. 2012 г., 13:40
Эй, интересно. Если я использую$('#scroller').scroll(); тогда он может обнаружить случиться по вызову, но если я использую$('#scroller').animate({scrollTop: 200}, 1000); это сказал ручная прокрутка. Это ложь?
 Trinh Hoang Nhu15 июн. 2012 г., 13:41
Я обновил вашу демоjsfiddle.net/QStkd/295

Ваш ответ на вопрос