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 に答える