vue中實現(xiàn)防抖和節(jié)流

防抖

什么是防抖?

  • 防抖,即短時間內(nèi)大量觸發(fā)同一事件,只會執(zhí)行一次函數(shù),實現(xiàn)原理為設(shè)置一個定時器,約定在xx毫秒后再觸發(fā)事件處理,每次觸發(fā)事件都會重新設(shè)置計時器,直到xx毫秒內(nèi)無第二次操作,防抖常用于搜索框/滾動條的監(jiān)聽事件處理,如果不做防抖,每輸入一個字/滾動屏幕,都會觸發(fā)事件處理,造成性能浪費。

防抖的實現(xiàn)

index.js
/**
* @desc 函數(shù)防抖
* @param func 目標函數(shù)
* @param wait 延遲執(zhí)行毫秒數(shù)
*/
export const debounce = (fn, gapTime) => {
    let _lastTime
    return function () {
        clearTimeout(_lastTime)
        _lastTime = setTimeout(() => {
            fn.apply(this, arguments)
        }, gapTime)
    }
}

<template>
  <div>
    <div>
      {{num}}
    </div>
    <input
      type="text"
      v-model="value"
      @keydown="inputHandle"
    >
  </div>
</template>

<script>
import { debounce } from '../untils/index'
export default {
  data() {
    return {
      num: 0,
      value: ''
    };
  },
  methods: {
    inputHandle: debounce(function () {
      this.num++
    }, 1000)
  }

};
</script>

節(jié)流

什么是節(jié)流?

  • 防抖是延遲執(zhí)行,而節(jié)流是間隔執(zhí)行,函數(shù)節(jié)流即每隔一段時間就執(zhí)行一次,實現(xiàn)原理為設(shè)置一個定時器,約定xx毫秒后執(zhí)行事件,如果時間到了,那么執(zhí)行函數(shù)并重置定時器,和防抖的區(qū)別在于,防抖每次觸發(fā)事件都重置定時器,而節(jié)流在定時器到時間后再清空定時器

節(jié)流的實現(xiàn)

index.js
/**
* @desc 函數(shù)節(jié)流
* @param func 函數(shù)
* @param wait 延遲執(zhí)行毫秒數(shù)
*/
export const throttle = (fn, gapTime) => {
    if (gapTime == null || gapTime == undefined) {
        gapTime = 1500
    }
    let _lastTime = null
    // 返回新的函數(shù)
    return function () {
        let _nowTime = +new Date()
        if (_nowTime - _lastTime > gapTime || !_lastTime) {
            fn.apply(this, arguments) //將this和參數(shù)傳給原函數(shù)
            _lastTime = _nowTime
        }
    }
}
<template>
  <div>
    <div>
      {{num}}
    </div>
    <div @click.stop="clickHandle">點擊</div>
  </div>
</template>

<script>
import {  throttle } from '../untils/index'
export default {
  data() {
    return {
      num: 0
    };
  },
  methods: {
    clickHandle: throttle(function () {
      this.num++
    }, 1000)
  }

};
</script>


本文參考鏈接 https://juejin.im/post/5e8b261ae51d4546c0382ab4#heading-6

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容