前端 vue 防抖和节流,请用具体代码来实现
时间: 2024-03-12 21:47:04 浏览: 180
好的,下面是使用具体代码实现防抖和节流的例子:
防抖:
```javascript
// 防抖函数
function debounce(fn, delay) {
let timer = null; // 定时器变量
return function() {
clearTimeout(timer); // 每次触发时先清除上一次的定时器
timer = setTimeout(() => {
fn.apply(this, arguments); // 用apply指向调用debounce的对象,相当于_this.fn(arguments);
}, delay);
};
}
// 使用防抖函数
let input = document.getElementById('input');
let debounceFn = debounce(() => {
console.log(input.value);
}, 1000);
input.addEventListener('input', debounceFn);
```
上面的代码实现了一个`debounce`函数,它接收两个参数:需要执行的函数和等待的时间。每次调用`debounceFn`函数时,如果在等待时间内有新的调用,则会清除上一次的定时器并重新开始计时,直到等待时间结束后才会执行实际的函数。
节流:
```javascript
// 节流函数
function throttle(fn, delay) {
let timer = null; // 定时器变量
return function() {
if (!timer) { // 如果定时器不存在,则执行函数并设置定时器
timer = setTimeout(() => {
fn.apply(this, arguments);
timer = null;
}, delay);
}
};
}
// 使用节流函数
let scrollFn = () => {
console.log('scroll');
};
let throttleFn = throttle(scrollFn, 1000);
window.addEventListener('scroll', throttleFn);
```
上面的代码实现了一个`throttle`函数,它接收两个参数:需要执行的函数和等待的时间。每次调用`throttleFn`函数时,如果定时器不存在,则执行实际的函数并设置定时器,等待时间结束后再次执行实际的函数。如果在等待时间内有新的调用,则不会执行实际的函数,直到等待时间结束后才会重新开始计时。
阅读全文