// 防抖 作用:防止重复触发事件
var count = 1;
var container = document.getElementById('container');
function getUserAction(e) {
// console.log(this)
// console.log(e);
container.innerHTML = count++;
}
// container.onmouseover = getUserAction
/**
*
* @param {*} func 回调方法
* @param {*} wait 等待时长
* @param {*} immediate immediate 是否立即执行,触发事件的几秒内不能重复触发; false:等待wait时间后再触发函数,只执行一次
* @returns
*/
function debounce(func, wait, immediate) {
var timeout;
console.log(arguments, 'arguments')
return function() {
var context = this;
var args = arguments;
console.log(args, 'args');
// 如果有timeout,那么清除timeout
if(timeout) clearTimeout(timeout);
if(immediate) {
// 如果immediate为true的时候,vallNow肯定是ture; 当 callNow 是true的时候也就是 timeout 为null
var callNow = !timeout
console.log(timeout)
timeout = setTimeout(function() {
timeout = null;
}, wait)
if(callNow) func.apply(context, args)
}else {
console.log(timeout, 'timeout')
timeout = setTimeout(() => {
func.apply(context, args)
}, wait)
}
}
}
container.onmousemove = debounce(getUserAction, 2000, true);