<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<button id="save-button">保存</button>
<script>
// 防抖:舍弃在规定时间外做的高频操作
// 闭包,使得timer为局部变量,不污染全局
function debounce(time) {
let timer = null;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
console.log('300ms after');
}, time);
}
}
// 小于300ms时间内的高频操作被舍弃
window.addEventListener('resize', debounce(300));
// 节流:在规定的时间内完成之后才能进行下一次操作
function throttle(fn, time) {
let active = true;
// 未保存前,允许点击保存操作
return function() {
if (active) {
// 保存之后,未完成相关操作之前不允许重新保存操作
active = false;
setTimeout(() => {
fn();
// 保存操作完成之后,允许后续点击操作
active = true;
}, time);
}
}
}
const saveButton$ = document.getElementById('save-button');
saveButton$.addEventListener('click', throttle(function() {
console.log('保存点击!');
}, 500))
</script>
</body>
</html>