手写防抖函数
时间: 2023-08-10 15:11:26 浏览: 110
防抖函数的作用是在函数频繁触发时,只执行最后一次触发的函数。这在一些需要减少频繁操作的场景下很有用,比如输入框连续输入时触发搜索操作。
以下是手写的防抖函数代码:
```javascript
function debounce(func, delay) {
let timerId = null;
return function (...args) {
clearTimeout(timerId);
timerId = setTimeout(() => {
func.apply(this, args);
}, delay);
}
}
```
该函数接收两个参数:需要执行的函数 `func` 和延时时间 `delay`,返回一个新的函数。
在新的函数中,使用 `clearTimeout` 函数清除之前设置的定时器,然后重新设置一个新的定时器,延时时间为 `delay`。当定时器触发时,调用 `func` 函数,并传入之前保存的参数 `args`。
使用该函数可以实现防抖效果:
```javascript
const searchInput = document.querySelector('#search-input');
function search() {
console.log('search...');
}
searchInput.addEventListener('input', debounce(search, 500));
```
在输入框连续输入时,只有当输入停止了 500 毫秒后才会触发搜索操作。
相关问题
在vue中手写防抖函数,并使用
在Vue中手写防抖函数可以通过以下步骤实现:
1. 在Vue组件中定义防抖函数,例如:
```
export default {
data() {
return {
inputValue: '',
}
},
methods: {
// 手写防抖函数
debounce(func, delay) {
let timer
return function() {
const context = this
const args = arguments
clearTimeout(timer)
timer = setTimeout(() => {
func.apply(context, args)
}, delay)
}
},
handleInput: function() {
console.log(this.inputValue)
},
},
}
```
2. 在模板中通过v-model绑定数据,例如:
```
<template>
<div>
<input v-model="inputValue" @input="debounce(handleInput, 500)">
</div>
</template>
```
这样就可以在Vue组件中手写防抖函数并使用了,当用户输入后停顿500ms才会输出输入的内容。
手写javaScript防抖函数
当用户在短时间内频繁触发某个事件时,防抖函数可以将多次触发的事件合并成一次,并在一定时间后执行一次。以下是一个手写的 JavaScript 防抖函数的示例代码:
```javascript
function debounce(func, delay) {
let timer = null;
return function() {
const context = this;
const args = arguments;
clearTimeout(timer);
timer = setTimeout(function() {
func.apply(context, args);
}, delay);
};
}
```
其中,`func` 是需要执行的函数,`delay` 是防抖的时间间隔。在防抖函数内部,使用 `setTimeout` 来延迟执行 `func` 函数,并在每次触发事件时清除上一次的延时器。最后,返回一个新的函数,用于替代原来的事件处理函数。
阅读全文