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             }

  而點擊期間不能再次點擊,我們可以設置一個全局變量,用戶點擊后變量切換狀態,該狀態不能再次點擊操作。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM