2017-06-19 38 views
0

我有這個功能,我使用它在我AngularJS指令。這個函數會滾動到頁面的頂部,但這不是我想要做的事情:我想讓它向上滾動400px或30%。windows.scrollBy增加一個固定值滾動到頂部

function scrollToTop() { 
    var scrollDuration = 500; 
    var scrollStep = -window.scrollY/(scrollDuration/15); 
    console.log(scrollStep); 

    var scrollInterval = setInterval(function() { 
     if (window.scrollY != 0) { 
      window.scrollBy(0, scrollStep); 
     } else { 
      clearInterval(scrollInterval); 
     } 
    }, 15); 
} 

我試圖改變scrollStep變量爲300或任何其他號碼,但我不能真正理解它。

+0

「我想讓它向上滾動只是400像素或30%,」可以請你解釋更詳細? –

+0

@FreemanLambda嘿。現在發生的事情是,當我從我的頁面底部的一個按鈕觸發此功能。屏幕滾動到頁面頂部,但我希望它只滾動400像素或任何其他數字不頂。 –

回答

1

distanceToScroll是像素的任一個任意數(即400)或整個窗口滾動距離是否小於400。對於可以使用Math.minscrollStep的計算取決於distanceToScroll。您需要在setInterval中保留「迄今已滾動多少」的計數,可以將其稱爲distanceScrolled。繼續滾動,直到覆蓋distanceToScroll

function scrollToTop() { 
 
    var scrollDuration = 500; 
 
    var stepDuration = 15; 
 
    
 
    var distanceToScroll = Math.min(400, window.scrollY); 
 
    
 
    var scrollStep = distanceToScroll/(scrollDuration/stepDuration); 
 
    console.log(scrollStep); 
 

 
    var distanceScrolled = 0; 
 

 
    var scrollInterval = setInterval(function() { 
 
     if (distanceScrolled < distanceToScroll) { 
 
      window.scrollBy(0, -1 * scrollStep); 
 
      distanceScrolled += scrollStep 
 
     } else { 
 
      clearInterval(scrollInterval); 
 
     } 
 
    }, stepDuration); 
 
} 
 

 
document.getElementById('btn').addEventListener('click', scrollToTop);
#very-high { 
 
    height: 3000px; 
 
} 
 

 
#btn { 
 
    position: fixed; 
 
    right: 10px; 
 
    top: 10px; 
 
}
<div id="very-high"></div> 
 
<button id="btn">Scroll</button>

+0

哦,真的非常感謝你。你向我解釋了我應該怎麼想,併爲我解決。非常感謝你,我真的很感激。 –