检测用户的jquery事件触发器或代码调用

Tri*_*Nhu 10 javascript jquery

我有一些window.onscroll事件

$(window).scroll(function(e){
    //My Stuff
});
Run Code Online (Sandbox Code Playgroud)

但在我的代码中,我将动画滚动调用到某些地方

$('html, body').stop().animate({
   scrollTop:555
}, 1000);
Run Code Online (Sandbox Code Playgroud)

所以我如何检测页面是由用户滚动或由我的代码调用.我当前的解决方案是animate在我的代码调用之前放置一个标志,然后清除它,但这不是一个聪明的解决方案.我也读过关于检测的信息e.which,e.originalEvent但它不起作用.我想你的专家在这里有一个很好的解决方案.

the*_*dox 19

$('#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
Run Code Online (Sandbox Code Playgroud)

当您通过调用滚动e.originalEvent的意愿undefined,但是当滚动手动它将给scroll对象.

DEMO

  • 对我不起作用:e.originalEvent总是在那里并且在两种情况下都是相同的. (4认同)