//1.與router文件並列新建一個utils/unils.js,在里面編寫頁面防抖方法 // 用於存儲工具方法 export default { debounce (fn, wait, time) { var previous = null // 記錄上一次運行的時間 var timer = null return function () { var now = +new Date() if (!previous) previous = now // 當上一次執行的時間與當前的時間差大於設置的執行間隔時長的話,就主動執行一次 if (now - previous > time) { clearTimeout(timer) fn() previous = now // 執行函數后,馬上記錄當前時間 } else { // 否則重新開始新一輪的計時 clearTimeout(timer) timer = setTimeout(function () { fn() }, wait) } } }, throttle (fn, time) { let _self = fn let timer = '' let firstTime = true // 記錄是否是第一次執行的flag return function () { let args = arguments // 解決閉包傳參問題 let _me = this // 解決上下文丟失問題 if (firstTime) { // 若是第一次,則直接執行 _self.apply(_me, args) firstTime = false return } if (timer) { // 定時器存在,說明有事件監聽器在執行,直接返回 return false } timer = setTimeout(function () { clearTimeout(timer) timer = null _self.apply(_me, args) }, time || 500) } }, }
//2.在頁面調用
// 監聽頁面滾動防抖 this.addEvent(document, 'scroll', this.$utils.debounce(this.tableScroll, 100)) // 輸入搜索節流 [左側欄輸入搜索] let searchOrgan = document.getElementById('searchOrgan') //獲取搜索框 this.addEvent(searchOrgan, 'keyup', this.$utils.throttle(this.searchOrganEven, 300))