请帮我写js防抖函数
时间: 2023-08-31 11:38:23 浏览: 110
### 回答1:
防抖函数的实现方式如下:
```javascript
function debounce(fn, delay) {
let timer = null;
return function(...args) {
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(this, args);
}, delay);
}
}
```
使用方法:
```javascript
const debouncedFn = debounce(yourFunc, 200);
// 然后在需要触发防抖的地方调用 debouncedFn
```
说明:
- `fn` 是需要防抖的函数
- `delay` 是防抖时间(单位: 毫秒)
- 上面代码中, 每次调用 debouncedFn 都会清除之前的定时器, 重新计时。
- 如果在 delay 时间内再次触发 debouncedFn, 则会重新计时, 并且只有最后一次触发的 debouncedFn 会真正被执行.
### 回答2:
防抖函数的作用是在短时间内多次触发同一事件时,只执行一次函数。下面是一个简单的实现防抖函数的示例:
```javascript
function debounce(func, delay) {
let timer;
return function() {
clearTimeout(timer); // 每次触发事件时先清除之前的定时器
timer = setTimeout(() => {
func.apply(this, arguments);
}, delay); // delay 毫秒后执行函数
}
}
```
上述代码中,防抖函数接受两个参数:func为需要执行的函数,delay为延迟时间,也就是函数需要等待的时间间隔。
在返回的辅助函数里,我们首次调用clearTimeout来清除之前设置的定时器。然后,我们使用setTimeout来设置一个新的定时器,延迟delay毫秒后执行函数func。
这样,当事件被触发时,定时器会被清除并重新设置,只有当事件停止触发后的delay毫秒内没有再次触发事件时,才会真正执行函数func。
使用示例:
```javascript
function myFunction() {
console.log("Hello, World!");
}
let debouncedFunc = debounce(myFunction, 1000);
window.addEventListener('scroll', debouncedFunc); // 当页面滚动时,delay毫秒后执行函数
```
在这个示例中,当页面滚动时,会触发debouncedFunc函数执行。如果在1秒内连续滚动多次,那么只有最后一次滚动结束后的1秒内没有再次滚动,才会执行函数myFunction。
### 回答3:
防抖函数是一种常用的优化性能的方法,用来解决在频繁触发某个事件时造成的资源浪费问题。下面是一个简单的JavaScript实现:
```javascript
function debounce(func, delay) {
let timer;
return function() {
clearTimeout(timer);
timer = setTimeout(() => {
func.apply(this, arguments);
}, delay);
};
}
```
这个函数接受两个参数:`func`是要执行的函数,`delay`是延迟的时间间隔。函数内部通过`clearTimeout`方法来清除之前设置的定时器,然后使用`setTimeout`方法创建一个新的定时器来延迟执行函数。
使用方法如下:
```javascript
function handleClick() {
console.log('防抖函数被触发');
}
const debouncedClick = debounce(handleClick, 2000);
// 在触发点击事件后,2秒内不会执行handleClick函数,超过2秒后才会触发。
button.addEventListener('click', debouncedClick);
```
在这个例子中,当点击事件发生时,会调用`debouncedClick`函数,该函数会等待2000毫秒(2秒),若在2秒内再次发生点击事件,则会重新计时,直到2秒内没有新的点击事件才会执行`handleClick`函数。这样可以避免在短时间内频繁触发`handleClick`函数,提高性能并减少资源浪费。
阅读全文