3

我想自动滚动到顶部,但如果用户开始滚动,请退出。

我目前有什么过早地停止动画,因为滚动动画本身就是滚动的——所以它触发了“如果发生滚动则停止滚动”动作。

function stop_scrolling_to_top(){
    // stop animation attached to selector
    $('html, body').stop();
}

// scroll to the top automatically
$('html, body').animate({ scrollTop: 0}, 1400, "easeOutQuint", function(){ 
    // callback when animation complete
    do_not_do_when_scrolling(stop_scrolling_to_top);
});

// stop animation if scrolling starts
do_when_scrolling(stop_scrolling_to_top);

有没有办法确定滚动是由人触发的还是由js触发的?有没有更好的方法?

4

2 回答 2

1

希望这会有所帮助。

它侦听鼠标滚轮事件 + 可用于在页面上滚动的键(向上/向下翻页、空格键、箭头键等):

$(document).keyup(function(e){

    if($.inArray(e.which, [33,34,32,38,40]) !== -1)
        console.log('key');
        //potential scroll by key

});

$(document).bind((/Firefox/i.test(navigator.userAgent)) 
                                 ? 'DOMMouseScroll' 
                                 : 'mousewheel', function(e){

    var evt = window.event || e;   
    evt = evt.originalEvent ? evt.originalEvent : evt;               
    var delta = evt.detail ? evt.detail*(-40) : evt.wheelDelta;

    if(delta > 0) 
        console.log('mousewheel up');
        //scroll up
    else
        console.log('mousewheel down');
        //scroll down  
});

如果您注意到“您的”滚动处于活动状态,请像上面那样停止它:

if($('html, body').is(':animated'))
    $('html, body').stop();

http://jsfiddle.net/MQQ3F/1/

于 2013-07-19T12:17:59.360 回答
-1

为什么不简单地听一下鼠标滚轮事件。如果它被触发,用户会尝试自己滚动。如果用户单击某处以停止滚动,您也可以侦听单击事件...

于 2013-07-19T11:58:26.327 回答