概念
- 防抖:防止抖动,单位时间内事件触发会被重置,避免事件被误伤触发多次。代码实现重在清零 clearTimeout。防抖可以比作等电梯,只要有一个人进来,就需要再等一会儿。业务场景有避免登录按钮多次点击的重复提交。
- 节流:控制流量,单位时间内事件只能触发一次,与服务器端的限流 (Rate Limit) 类似。代码实现重在开锁关锁 timer=timeout; timer=null。节流可以比作过红绿灯,每等一个红灯时间就可以过一批。
使用
1 . 在公共方法中(如 public.js 中),加入函数防抖和节流方法
<script>
// 防抖
export function _debounce(fn, delay) {
var delay = delay || 200
var timer
return function () {
var th = this
var args = arguments
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(function () {
timer = null
fn.apply(th, args)
}, delay)
}
}
// 节流
export function _throttle(fn, interval) {
var last
var timer
var interval = interval || 200
return function () {
var th = this
var args = arguments
var now = +new Date()
if (last && now - last < interval) {
clearTimeout(timer)
timer = setTimeout(function () {
last = now
fn.apply(th, args)
}, interval)
} else {
last = now
fn.apply(th, args)
}
}
}
2 . 在需要使用的组件引用
<script>
import { _debounce } from "@/utils/public";
3 . 在 methods 中使用
<script>
methods: {
changefield: _debounce(function(_type, index, item) {
}, 200)