原文 https://blog.csdn.net/weixin_43967603/article/details/104413668
防抖函数分为非立即执行版和立即执行版
function debounce(fn, delay) {
let timeout;
return function () {
clearTimeout(timeout);
timeout = setTimeout(() => {
fn.apply(this, arguments);
}, delay);
};
}
window.onscroll = debounce(showTop,1000)
function debounce(fnc, delay) {
let timeout;
return function () {
clearTimeout(timeout);
if (!timeout) fnc.apply(this, arguments)
timeout = setTimeout(() => {
timeout = null;
}, delay)
}
}
window.onscroll = debounce(showTop, 1000)
节流
function debounce(fnc, delay) {
let done = 1;
return function () {
if(done) {
fnc.apply(this, arguments)
done = 0
setTimeout(()=>{
done =1
}, delay)
}
}
}
window.onscroll = debounce(showTop, 1000)
防抖 和 节流 的区别
比如我们在抢票,我们在狂点 ‘抢票’ 这个按钮
?防抖(非立刻执行):不管你狂点多少次,我只等你不狂点了才提交你的最后一次点击
?防抖(立刻执行):不管你狂点多少次,我只提交你的第一次
?节流:不管你狂点多少次,一定时间内只算你一次
|