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

时间:2012-06-15 10:52:43

标签: javascript jquery

我有一些window.onscroll事件

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

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

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

所以我如何检测页面是由用户滚动还是由我的代码调用。我的当前解决方案在我的代码中调用animate之前放了一个标志,然后清除它,但它不是一个聪明的解决方案。我还了解了有关检测e.whiche.originalEvent的内容,但它不起作用。我认为你的专家在这里有一个很好的解决方案。

2 个答案:

答案 0 :(得分:18)

$('#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

答案 1 :(得分:3)

我已经重新提出了这个问题,得到了2个有用的答案 我会把这个问题链接到其他能找到这个帖子的人。

Detect if a scroll event is triggered manually in jQuery