美文网首页
JavaScript中的防抖(debounce)和节流(thro

JavaScript中的防抖(debounce)和节流(thro

作者: leslie1943 | 来源:发表于2020-07-09 10:46 被阅读0次

    防抖函数

    /**
     *
     * @param {*} fn :callback function
     * @param {*} duration :duration time,default wait time 0.8 秒
     * @demo in vue methods:
     *      handleEvent: _debounce(function(){
     *        do something
     *      },time)
     */
    export const _debounce = (fn, duration = 800) => {
      // create timer
      let timer = null
      return function () {
        // reset once call
        clearTimeout(timer)
        // create a new timer to make sure call after define time
        timer = setTimeout(() => {
          // execute callbak, the 2nd params is fn's arguments
          fn.apply(this, arguments)
        }, duration)
      }
    }
    

    节流函数

    /**
     * @param {*} fn: callback function
     * @param {*} duration : duration time,default wait time 1 sec
     * @demo in vue methods:
     *      handleEvent: _throttle(function(){
     *        do something
     *      },time)
     */
    export const _throttle = (fn, duration = 1000) => {
      let canRun = true
      return function () {
        if (!canRun) return
        canRun = false
        // execute callbak, the 2nd params is fn's arguments
        fn.apply(this, arguments)
        setTimeout(() => {
          canRun = true
        }, duration)
      }
    }
    

    相关文章

      网友评论

          本文标题:JavaScript中的防抖(debounce)和节流(thro

          本文链接:https://www.haomeiwen.com/subject/mfsjcktx.html