/**
* 节流指令 一段时间内首次触发时立即执行,此时间段内再次触发,不会执行!
* @param {Function} fn - 执行事件
* @param {?String|"click"} event - 事件类型 例:"click"
* @param {?Number|1000} time - 间隔时间
* @param {Array} binding.value - [fn,event,time]
* 直接使用: v-throttle="fn"
* 配置事件,间隔时间: v-throttle="[fn,'click',1000]"
* 事件传递参数则: v-throttle="[()=>fn(param),`click`,1000]"
*/
export default {
bind: function (el, binding) {
let fn, event = "click",
time = 1000;
if (typeof binding.value == 'function') {
fn = binding.value
} else {
[fn, event = "click", time = 1000] = binding.value
}
/**
* el.preTime 记录上次触发事件,
* 每次触发比较nowTime(当前时间) 和 el.preTime 的差是否大于指定的时间段!
*/
el.addEventListener(event, () => {
const nowTime = new Date().getTime()
if (!el.preTime || nowTime - el.preTime > time) {
el.preTime = nowTime
fn();
}
})
}
}
标签:el,节流,binding,param,event,指令,click,fn From: https://www.cnblogs.com/Privatexaio/p/17697445.html