Detect if a scroll event is triggered manually in jQuery

events, javascript, jquery, jquery-events, scroll

Solution

Maybe `:animated` selector will help you:

$('#scroller').scroll(function(e) {
    if ($(this).is(':animated')) {
        console.log('scroll happen by animate');
    } else if (e.originalEvent) {
        // scroll happen manual scroll
        console.log('scroll happen manual scroll');
    } else {
        // scroll happen by call
        console.log('scroll happen by call');
    }
});

Demo

Problem

This question was already asked here a long time ago: Detect jquery event trigger by user or call by code But it has never been answered conclusively (or maybe I'm simply not able to search properly). Is it possible to detect whether a `scroll` event has been triggered by the user or by the jQuery `animate` function? I am trying to prevent the `scroll` event to trigger itself while doing something like this: ``` $(document).scroll(function(){ $("html").stop(true); var number = 400; //some other stuff is happening here clearTimeout(tout); tout = setTimeout(function(){ if(top == $(document).scrollTop()){ $("html").animate({ scrollTop: (number), easing: "easeInQuad", duration: 110 }); } },120); }); ``` This code seems to be suitable: ``` $('#scroller').scroll(function(e) { if (e.originalEvent) { console.log('scroll happen manual scroll'); } else { console.log('scroll happen by call'); } }); ``` But the `originalEvent` object isn't able to detect the animate trigger properly. Is there any other way to do this?

Original source

Related problems