在我們做前端開發(fā)時佩憾,有時候會收到監(jiān)聽滾動條滾動和滾動條停止的需求逆日,要想監(jiān)聽滾動條的滾動很簡單,直接用window.addEventListener('scroll', function () {})
就可以實現(xiàn),但是如果想要實現(xiàn)監(jiān)聽滾動條停止卻似乎沒那么簡單了谣妻,畢竟js并沒有這樣的監(jiān)聽事件給我們兽叮,這時候可以用函數(shù)節(jié)流的方法來實現(xiàn)監(jiān)聽
函數(shù)節(jié)流的基本思想是設置一個定時器芬骄,在指定時間間隔內(nèi)運行代碼時清楚上一次的定時器猾愿,并設置另一個定時器,直到函數(shù)請求停止并超過時間間隔才會執(zhí)行账阻。
在javascript高級程序設計中蒂秘,定義了一個方法,如下:
function throttle(method,context){
clearTimeout(method.tId);
method.tId=setTimeout(function(){
method.call(context)
},300)
}
應用在我們的需求里是這樣的:
window.addEventListener('scroll', function () {
_this.show = false; //滾動時執(zhí)行的方法
clearTimeout(_this.isInterval); //滾動時清除定時器
_this.isInterval = setTimeout(function(){
_this.show = true;
},500) //當停止?jié)L動時定時器執(zhí)行
})
利用這個方法淘太,既滿足了需求姻僧,也釋放了瀏覽器的性能,避免了在滾動時要不斷監(jiān)聽滾動條的行為