函数节流、函数防抖的实现及使用
1、函数节流:一段时间间隔内只执行一次;使用在会频繁触发的地方,例如页面滚动事件
2、函数防抖:一段时间内重新计时且满足时间间隔后执行函数;使用在某个事件触发之后需要等待一段时间才触发执行操作时,例如输入框onchange时触发验证事件
/**
* 节流函数
* @param {*} func 处理函数
* @param {*} interval 时间间隔 一段时间间隔内只执行一次
*
*/
function throttle(func, interval) {
let timeout;
let startTime = new Date();
return function () {
clearTimeout(timeout);
let curTime = new Date();
if (curTime - startTime < interval) {
timeout = setTimeout(() => {
func(document.documentElement.scrollTop);
}, interval);
} else {
startTime = curTime;
func(document.documentElement.scrollTop);
}
}
}
function realFunc(data) {
document.getElementById('contain2').innerText = data
}
window.addEventListener('scroll', throttle(realFunc, 300));
/**
* 简单的防抖动函数
* @param {*} func 执行函数
* @param {*} time 时间间隔 一段时间内重新计时且满足时间间隔后执行函数
*/
function debounce(func, time) {
let timeout = null; //定时器变量
return function () {
clearTimeout(timeout); //清空定时器变量
timeout = setTimeout(() => { func(new Date().getSeconds()) }, time); //制定 XXms 后触发想要操作的函数
}
}
//时间处理程序
function setfunc(data) {
document.getElementById('contain1').innerText = data;
console.log(1);
}
const input = document.getElementById('input');
input.addEventListener('keydown', debounce(setfunc, 500));