如何实现防抖和节流?具体代码怎么实现?
时间: 2024-05-08 08:22:29 浏览: 91
防抖和节流都是为了解决频繁触发事件时的性能问题。
防抖(Debounce):在某个时间段内,只执行一次事件。比如当用户不断输入搜索框时,不会立即执行搜索操作,而是等用户停止输入一段时间后再执行搜索操作,避免频繁发送请求。
节流(Throttle):在某个时间段内,多次事件只执行一次。比如当用户不断滚动页面时,不会每滚动一次就触发事件,而是等待一段时间后再执行,避免频繁触发事件。
具体代码实现如下:
防抖:
```javascript
function debounce(fn, delay) {
let timer = null;
return function() {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
fn.apply(context, args);
}, delay);
}
}
// 使用方式
const searchFn = debounce(function() {
// 搜索操作
}, 500);
input.addEventListener('input', searchFn);
```
节流:
```javascript
function throttle(fn, delay) {
let timer = null;
let lastTime = 0;
return function() {
const context = this;
const args = arguments;
const now = +new Date();
if (now - lastTime > delay) {
clearTimeout(timer);
lastTime = now;
fn.apply(context, args);
} else {
clearTimeout(timer);
timer = setTimeout(function() {
lastTime = now;
fn.apply(context, args);
}, delay - (now - lastTime));
}
}
}
// 使用方式
const scrollFn = throttle(function() {
// 滚动事件
}, 500);
window.addEventListener('scroll', scrollFn);
```
以上是基于函数的方式实现防抖和节流,也可以使用 Lodash 等第三方库来实现。
阅读全文