/**
* 模拟请求
* @param {Object} content
*/
function mockAjax(content) {
setTimeout(() => {
console.log('ajax request ', content)
}, 500)
}
/**
* 防抖函数 记住原则 最后一次操作后delay后才执行
* 所以,当新的操作进来 就需要清空之前得操作timer
* @param {Object} callbackFun
* @param {Object} delay
*/
function debounce(callbackFun, delay) {
var timer = null
var that = this
return (args) => {
if (timer) {
clearTimeout(timer)
}
timer = setTimeout(() => {
callbackFun.call(that, args)
}, delay)
}
}
/**
* 节流 记住两个原则就能写出来 第一个是什么是节流 需要一个执行完毕才能执行下一个
* 所以,只能是timer 留空才能执行
* @param {Object} callbackFun
* @param {Object} delay
*/
function throttle(callbackFun, delay) {
var timer = null
let that = this;
return (args) => {
if (!timer) {
timer = setTimeout(() => {
callbackFun.call(that, args)
timer = null
}, delay)
}
}
}
let debounceFun = debounce(mockAjax, 3000)
let throttleFun = throttle(mockAjax, 3000)
document.addEventListener('scroll', (e) => {
// debounceFun(e)
throttleFun(e)
})
JS防抖节流函数
于 2021-09-27 14:29:55 首次发布