1. 程式人生 > >js中的防抖、節流、點選事件回撥

js中的防抖、節流、點選事件回撥

  以前,貼吧騙贊有個說法,快速點選兩次可以贊兩下哦,這個情況倒是可以發生的,就是將點贊資訊提交了多次。就算後端幫助判斷了不能點贊多次,將錯誤資訊返回前臺,頻繁提示“不能多次點贊”看起來也是很Low。我們可以根據需求來使用下面幾種方式讓效果、效能都能完美實現。

  防抖的原理是在規定觸發時間內,多次點選,都會重新重新整理觸發時間,直到觸發時間完成回撥才會觸發。防抖的運用場景大多在搜尋關聯詞匹配、window視窗的變化已經滾動條的滾動。

  節流的原理是在規定時間內不管點選多少次都只會執行一次。而像我們提交資訊的話,需要的是當後臺返回資訊後,我們做自己的邏輯判斷。節流的運用場景在瀑布流更新列表資訊、當然短時間內不能重複提交、點選事件也可以拿來使用。

  防抖的核心實現程式碼如下:

 1             //防抖
 2             function debounce(fun, delay = 200) {
 3                 return function (args) {
 4                     //獲取函式的作用域和變數
 5                     let that = this
 6                     let _args = args
 7                     //每次事件被觸發,都會清除當前的timeer,然後重寫設定超時呼叫
8 clearTimeout(fun.id) 9 fun.id = setTimeout(function () { 10 fun.call(that, _args) 11 }, delay) 12 } 13 }

  節流的核心實現程式碼如下:

 1             //節流
 2             function throttle(fun, delay = 1000) {
3 let last, deferTimer; 4 return function (args) { 5 let that = this; 6 let _args = arguments; 7 8 let now = +new Date(); 9 if (last && now < last + delay) { 10 clearTimeout(deferTimer); 11 deferTimer = setTimeout(function () { 12 last = now; 13 fun.apply(that, _args); 14 }, delay) 15 } else { 16 last = now; 17 fun.apply(that, _args); 18 } 19 } 20 }

  而點選期間不能再次點選,我們可以設定一個全域性變數,使用者點選後變數切換狀態,該狀態不能再次點選操作。