防抖節流
防抖節流
我們可能都會遇到這樣的一個問題,網頁卡了的時候,或者是閒著無聊,胡亂點選按鈕,但是這樣的結果就是這個按鈕繫結的事件函式將會根據你點選的次數不斷觸發。
這樣無疑會給效能帶來一些問題,甚至有些手速快的同hai
,一分鐘能點一百多次。那我們就需要想點辦法來改進一下,防止這樣的同hai
對我們的網頁產生不好的印象。
<!--首先我來定義一個按鈕,這個按鈕繫結了一個點選事件-->
<div>
<button id='btnClick'></button>
</div>
接下來我們來繫結這個事件函式
var btnItem=document.getElementById('btnClick');
var clickCount=0;
btn.addEventListener('click',function(){
clickCount++;
})
如果一個網頁這樣寫的話,那麼使用者點選按鈕多少次就會執行多少次事件函式。我們可以改進一下
如,點了按鈕1s
鍾之內,使用者將無法對按鈕進行點選,或者是點選無效
btn.addEventListener('click',()=>{
setTimeout(()={
console.log(clickCount++);
},1000);
})
這樣寫的話我們就可以看到一秒鐘會列印出一個clickCount
借用一位博主的話來說,防抖就是法師放技能讀條,節流就像是我們在普通攻擊的時候,無論按多少次,都會只有設定的值觸發
函式防抖(debounce
)
函式防抖就是函式觸發後一段時間無法再次進行觸發,必須超過某個等待時間否則函式不執行。
機制:
- 事件函式不會立即執行
- 在等待時間內觸發事件,將會重新進入等待時間
- 使用者等待時間大於設定好的等待時間,則會再次觸發時間函式
function Debounce(handle,wait){
let timer=null;
return function(){
let that=this;
let _argument=argument;
clearTimeout(timer);
timer=setTimeout({
handle.apply(that,_argument);
},wait)
}
}
function handle(){
console.log('呼叫成功');
}
DOM.addEventListener('click',Debounce(handle,wait),false);
函式節流(throttle
)
節流就是在一段時間內,只能觸發一次函式,如果觸發多次的話,只算作一次觸發。
我們來說下我們想利用的這個節流的機制:
- 一個函式被執行(計時為A)
- 另一個函式被執行(計時為B)
- (B-A<等待時間)不執行,否則就執行
我們有兩種實現節流的方式:事件戳 和 定時器
那我們把這個封裝一下吧
//節流(時間戳版)
function throttle (handle,wait){
let lastTime=0;
return function(){
var that=this;
var nowTime=new Date().getTime();
var _argument=argument;
if(nowTime-lastTime>wait){
handle.apply(that, _argument);
lastTime=nowTime;
}
}
}
function handle(){
console.log('呼叫成功');
}
//使用的時候只需要在繫結事件函式的時候使用即可
DOM.addEventListener('click',throttle(handle,wait),false)
//節流(定時器版)
function throttle (handle,wait){
let Timer=null;
return function(){
var that=this;
var _argument=argument;
if(!Timer){
Timer=setTimeout({
handle.apply(that, _argument);
Timer=null;
},wait)
}
}
}
function handle(){
console.log('呼叫成功');
}
節流和防抖區別
函式防抖是某一段時間內只執行一次,而函式節流是間隔時間執行。
應用
DeBounce
:
- search搜尋聯想,使用防抖
- window觸發resize的時候,不斷的調整瀏覽器視窗大小會不斷的觸發這個事件,用防抖來讓其只觸發一次
Thtottle
:
- 滑鼠不斷點選觸發,
mousedown
點選只觸發一次 - 監聽滑鼠滾動事件,滑倒底部載入更多
相關文章
- 防抖和節流
- 節流與防抖
- 防抖與節流
- 節流防抖封裝封裝
- js防抖和節流JS
- debounce(防抖) & throttle(節流)
- 函式防抖和節流函式
- 函式節流和防抖函式
- JavaScript之節流與防抖JavaScript
- 筆記-JavaScript[節流][防抖]筆記JavaScript
- 防抖和節流原理分析
- js優化之防抖節流JS優化
- JavaScript中函式防抖、節流JavaScript函式
- 當Flutter遇到節流與防抖Flutter
- js 函式防抖和節流JS函式
- 函式的防抖和節流函式
- 函式的防抖與節流函式
- js防抖 和節流函式JS函式
- 固定表頭和首列,防抖節流
- 防抖和節流(例項講解)
- 淺聊函式防抖與節流函式
- 淺談JavaScript的防抖與節流JavaScript
- 函式節流與函式防抖函式
- 效能優化之防抖和節流優化
- 函式防抖debounce與節流throttle函式
- UnderScore原始碼看防抖和節流原始碼
- 節流與防抖【從0到0.1】
- javascript之函式防抖與節流JavaScript函式
- 函式防抖和函式節流函式
- JavaScript專題系列-防抖和節流JavaScript
- 女友都懂系列之防抖與節流分析
- js函式防抖debounce和節流throttleJS函式
- 區分函式防抖&函式節流函式
- 防抖動處理和節流 小技巧
- JS函式節流和函式防抖JS函式
- js函式中的節流和防抖JS函式
- 蝦扯蛋之函式防抖和節流函式
- JS簡單實現防抖和節流JS