帮我写一个vue2的防抖函数 并举例
时间: 2023-08-28 14:20:41 浏览: 96
好的,防抖函数可以通过使用定时器来实现。在函数被触发时,首先清除之前的定时器(如果有),然后重新设置一个定时器。如果在定时器执行之前,函数再次被触发,则清除之前的定时器并重新设置一个定时器,直到定时器执行时没有新的触发。
以下是一个简单的Vue2的防抖函数的实现:
```javascript
function debounce(fn, delay) {
let timer = null;
return function() {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(() => {
fn.apply(context, args);
}, delay);
};
}
```
其中,fn是要进行防抖的函数,delay是防抖的时间间隔,单位为毫秒。
举个例子,比如我们有一个搜索框,用户输入时触发搜索函数,但是如果用户连续输入,可能会导致搜索函数频繁触发,影响性能。我们可以使用防抖函数来限制搜索函数的触发次数,例如:
```html
<template>
<div>
<input type="text" v-model="keyword" @input="debounceSearch">
</div>
</template>
<script>
import debounce from './debounce.js';
export default {
data() {
return {
keyword: '',
};
},
methods: {
search() {
console.log('searching...', this.keyword);
// 发起搜索请求...
},
debounceSearch: debounce(function() {
this.search();
}, 500),
},
};
</script>
```
在这个例子中,我们使用了debounce函数来创建一个防抖版本的search函数,当用户在输入框中输入时,会触发debounceSearch函数,而不是直接触发search函数。当用户停止输入500ms之后,才会触发search函数进行搜索。这样就可以避免用户连续输入导致搜索函数频繁触发,提高了性能。
阅读全文