2016-11-24 83 views
4

如何在使用position: fixed元素按下鼠標按鈕時逐漸向下滾動視口?在mousedown上逐漸滾動,直到mouseup

+0

滾動時,鼠標光標不會脫離它們按住的元素嗎?如果你的意思是「點擊」而不是持有,那麼檢查一下:[Javascript平滑滾動而不使用jQuery](https://stackoverflow.com/questions/10063380/javascript-smooth-scroll-without-the-use -jquery)或[this](https://www.sitepoint.com/smooth-scrolling-vanilla-javascript/) –

+0

謝謝,但它會是一個固定的元素,他們按住 –

回答

2

在這裏你可以jQuery.animate()結合setTimeout()clearTimeout()做到這一點:

$('.button').on('mousedown', function() { 
    console.log('Start Animate'); 
    (function smoothSrcroll() { 
     console.log(Math.max($('html').scrollTop(), $('body').scrollTop())); 
     $('html, body').stop().animate({ 
      scrollTop: Math.max($('html').scrollTop(), $('body').scrollTop()) + 100 
     }, 1000, 'linear', function() { 
      window.timeout = setTimeout(smoothSrcroll(), 0); 
     }); 
    })(); 
}).on('mouseup', function() { 
    console.log('Stop Animate'); 
    $('html, body').stop(); 
    clearTimeout(window.timeout); 
}); 

CodePen Demo

我針對$('html, body'),這樣它會在Firefox和Chrome瀏覽器。這有點棘手,因爲animate()實際上運行兩次,因爲兩個選擇器。爲了解決這個問題,我使用了jQuery.stop()。由於Firefox可以使用$('html').scrollTop()而Chrome使用$('body').scrollTop(),我使用Math.max()來計算增量。該功能在完成時自行執行,並在釋放鼠標時使用clearTimeout()jQuery.stop()

+0

工程很好,謝謝!有沒有辦法讓它更平滑些? –

+0

@ScottHunter在默認的jQuery庫中增加了一些補充腳本。實際上只有3種設置:線性,擺動和默認設置。您可以找到創建更平滑過渡的腳本。 – Daerik

相關問題