1.防抖函数
假定两次 Ajax 通信的间隔不得小于2500毫秒,上面的代码可以改写成下面这样。
$('textarea').on('keydown', debounce(ajaxAction, 2500));
function debounce(fn, delay){
var timer = null; // 声明计时器
return function() {
var context = this;
var args = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(context, args);
}, delay);
};
}
上面代码中,只要在2500毫秒之内,用户再次击键,就会取消上一次的定时器,然后再新建一个定时器。这样就保证了回调函数之间的调用间隔,至少是2500毫秒。
2.Vue中使用debouce防抖函数
创建一个 debounced
(防抖动)函数,该函数会从上一次被调用后,延迟 wait 毫秒后调用 func 方法。 debounced(防抖动)函数提供一个 cancel 方法取消延迟的函数调用以及 flush
方法立即调用。 可以提供一个 options
(选项) 对象决定如何调用 func 方法,options.leading 与|或 options.trailing 决定延迟前后如何触发
(注:是 先调用后等待 还是 先等待后调用)。
func
调用时会传入最后一次提供给 debounced
(防抖动)函数 的参数。 后续调用的 debounced
(防抖动)函数返回是最后一次 func 调用的结果。
Lodash debouce参数:
func (Function)
: 要防抖动的函数。[wait=0] (number)
: 需要延迟的毫秒数。[options=] (Object)
: 选项对象。[options.leading=false] (boolean)
: 指定在延迟开始前调用。[options.maxWait] (number)
: 设置 func 允许被延迟的最大值。[options.trailing=true] (boolean)
: 指定在延迟结束后调用。
<template>
<el-input
v-model="value"
size="mini"
placeholder="请输入.."
clearable
@keydown.enter="handleSearch"
></el-input>
</template>
<script>
import _ from 'lodash'
export default {
data() {
return { value: '' }
},
create() {
this.handleSearch = _.debounce(() => {
// 获取列表
this.getList();
}, 300);
},
beforeDestroy() {
// 取消该函数的防抖动调用
this.handleSearch.cancel();
},
}
</script>
到此这篇关于如何在Vue中使用debouce防抖函数的文章就介绍到这了,更多相关Vue中使用debouce防抖函数内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!