監聽頁面滾動防抖,以及節流


//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))

  


免責聲明!

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



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