1、 封装utils.js
let timeout = null
let timer, flag
function debounce(func, params, wait = 500, immediate = false) {
if (timeout !== null) clearTimeout(timeout)
if (immediate) {
var callNow = !timeout
timeout = setTimeout(function () {
timeout = null
}, wait)
if (callNow) typeof func === 'function' && func(params)
} else {
timeout = setTimeout(function () {
typeof func === 'function' && func(params)
}, wait)
}
}
function throttle(func, params, wait = 500, immediate = true,) {
if (immediate) {
if (!flag) {
flag = true
typeof func === 'function' && func(params)
timer = setTimeout(() => {
flag = false
}, wait)
}
} else {
if (!flag) {
flag = true
timer = setTimeout(() => {
flag = false
typeof func === 'function' && func(params)
}, wait)
}
}
}
export default {
install(Vue) {
Vue.prototype.$debounce = debounce
Vue.prototype.$throttle = throttle
}
}
2、 main.js 注册
import utils from '@/utils/instruction'
Vue.use(utils)
3、 组件调用
//fun 控制函数
//params传递参数
//时间
//第四个布尔参数标识是否立即执行
<button @click="$throttle(fun, params,1000,false)" type="primary"><a-icon type="check-circle" />保存
</button>
注:节流防抖函数使用的为uview官方api代码,稍作传参修改