<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
height: 10000px;
}
</style>
</head>
<body>
<div></div>
<script>
function throttle(fn, wait) {
let _fn = fn, // 保存需要被延迟的函数引用
timer,
flags = true; // 是否首次调用
return function() {
let args = arguments,
self = this;
if (flags) { // 如果是第一次调用不用延迟,直接执行即可
_fn.apply(self, args);
flags = false;
return flags;
}
// 如果定时器还在,说明上一次还没执行完,不往下执行
if (timer) return false;
timer = setTimeout(function() { // 延迟执行
clearTimeout(timer); // 清空上次的定时器
timer = null; // 销毁变量
_fn.apply(self, args)
}, wait)
}
}
window.onscroll = throttle(function() {
console.log(22)
}, 500)
</script>
</body>
</html>