函数防抖:
什么是函数防抖: 当持续触发某件事件时,一定时间间隔内没有再触发该事件,事件函数会执行一次。如果设定的时间间隔到来之前,再次触发了事件,就重新开始延时。
例如: 当持续触发scroll事件,并不立即执行handle函数,当1000毫秒内没有触发scroll事件时,才会延时触发一次handle函数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>js函数防抖</title>
<style>
body {
height: 3000px;
}
#centerNum {
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<p id="centerNum">0</p>
</body>
<script>
var num = 0;
// //当触发滚动条时
window.addEventListener('scroll', debounce(handle, 1000))
function debounce(fn, time) {
console.log("调用函数")
let timeout = null;
return function () {
//当定时器不为空的时候 //清除定时器
if (timeout !== null) clearTimeout(timeout)
timeout = setTimeout(fn, time);
}
}
function handle() {
var h = document.getElementById('centerNum');
num++;
h.innerHTML = num;
}
</script>
</html>
函数节流:
函数节流就是: 当持续触发一个事件时,有规律的每隔一个时间间隔触发一次事件处理函数。
例如: 当持续触发scroll事件时,并不执行handle函数,而是每隔1000毫秒才会执行一次事件处理函数。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>js函数节流</title>
<style>
body {
height: 3000px;
}
#centerNum {
width: 100px;
height: 100px;
line-height: 100px;
text-align: center;
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
</style>
</head>
<body>
<p id="centerNum">0</p>
</body>
<script>
var num = 0;
// 当触发滚动条时
window.addEventListener('scroll', throttle(handle, 1000))
function throttle(fn, time) {
let prev = Date.now();
console.log("prev", prev);
console.log("调用");
return function () {
let now = Date.now();
console.log("now", now);
if (now - prev > time) {
fn();
prev = Date.now();
}
}
}
function handle() {
var h = document.getElementById('centerNum');
num++;
h.innerHTML = num;
}
</script>
</html>