2013-07-19 157 views
3

我想自動滾動到頂部,但是如果用戶開始滾動,則保留。javascript自動滾動到頂部,除非用戶開始滾動

因爲滾動動畫本身滾動,所以它會觸發「如果滾動發生時停止滾動」動作,我當前已經停止了動畫。

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觸發?有沒有更好的方法?

+0

'$(窗口).scroll(函數(){的console.log( '滾動');});'做到這一點火,如果你以編程方式滾動? – Johan

+0

@Johan yessir它確實有 – rikAtee

回答

-1

爲什麼不簡單地收聽mousewheel事件。如果它被解僱,用戶就試圖自己滾動。你也可以聽點擊事件,如果用戶點擊某處停止滾動...

+2

滾動的方式比鼠標滾輪還多。 – Johan

+1

滾動可以通過向上鍵,向下鍵,scrooll輪,鼠標點擊scoroll欄或一些不尋常的方式觸發 - 這就是爲什麼要聽window.scroll事件,而不是觸發所述事件的事情 – rikAtee

+0

是的,你是對的。我很好奇這個問題的解決方案。 – Christian

1

希望這會有所幫助。

它偵聽鼠標滾輪事件+鍵可以用來滾動頁面(頁面向上/向下,空格鍵,arrowkeys等):

$(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/