如何在JavaScript中以编程方式区分鼠标滚动和滚动?

tra*_*boy 8 javascript jquery scroll javascript-events

我通过更改Javascript中的scrollLeft属性来滚动溢出的DIV内容:

setInterval(function(){
  $('#scrollbox').scrollLeft($('#scrollbox').scrollLeft()+1);
}, 50);
Run Code Online (Sandbox Code Playgroud)

但是,我想在用户使用鼠标滚动内容后立即停止此操作.我试图使用scroll事件检测到这一点

$('#scrollbox').scroll(function(){...});
Run Code Online (Sandbox Code Playgroud)

但是,我上面的自动滚动也会触发该事件.我如何区分这个并且只对用户启动的滚动作出反应?(或者:如何阻止上面的代码触发滚动事件?这也可以解决问题)

jda*_*ies 6

当鼠标悬停在scrollbox元素上时,您可以使用.hover():函数停止滚动:

http://jsfiddle.net/bGHAH/1/

setInterval(function(){
    if(!mouseover)
    {
       $('#scrollbox').scrollLeft($('#scrollbox').scrollLeft()+1);
    }
}, 50);

var mouseover = false;
$('#scrollbox').hover(function(){
    mouseover = true;
},function(){
    mouseover = false;    
});
Run Code Online (Sandbox Code Playgroud)

编辑

根据您的评论,我设法从以下站点找到一个jquery插件:jquery的特殊滚动事件.

此插件包含一个事件,该事件尝试根据上次滚动步骤和检查时间之间经过的时间段确定滚动是否已停止.

为了使这个工作起作用,我需要将你的间隔减慢到恰好超过插件使用的延迟,这个延迟时间为310毫秒.这样做意味着我必须增加滚动步骤以保持其明显移动.

链接在这里:

http://jsfiddle.net/EWACn/1/

这是代码:

var stopAutoScroll = false;

$(document).ready(function(){

setInterval(function(){
    if(!stopAutoScroll)
    {
       $('#status').html('scrolling');
       $('#scrollbox').scrollLeft($('#scrollbox').scrollLeft()+10);
    }else{
       $('#status').html('not scrolling');
    }
}, 310);

$('#scrollbox').bind('scrollstart', function(e){
    stopAutoScroll = true;
});

$('#scrollbox').bind('scrollstop', function(e){
    stopAutoScroll = false;
});

});
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.