函数防抖(debounce):
含义:延迟函数执行 ; 用处:多用于input框输入时,显示匹配的输入内容。(n秒后延迟执行)
函数节流(throttle):
含义:单位时间内,只执行第一次触发,之后的时间内都不执行,知道单位时间结束。 (立即执行,n秒后在立即执行)
用处:防止按钮重复点击,页面滚动,窗口resize等。
两者的区别:函数节流是减少函数的触发频率,而函数防抖则是延迟函数执行,并且不管触发多少次都只执行最后一次。
<举个栗子><举个栗子><举个栗子>
防抖和节流函数一般都是封装在公用的js中使用:
utils.js:
/*函数节流*/
function throttle(fn, interval) {
var enterTime = 0;//触发的时间
var gapTime = interval || 300 ;//间隔时间,如果interval不传,则默认300ms
return function() {
var context = this;
var backTime = new Date();//第一次函数return即触发的时间
if (backTime - enterTime > gapTime) {
fn.call(context,arguments);
enterTime = backTime;//赋值给第一次触发的时间,这样就保存了第二次触发的时间
}
};
}
/*函数防抖*/
function debounce(fn, interval) {
var timer;
var gapTime = interval || 1000;//间隔时间,如果interval不传,则默认1000ms
return function() {
clearTimeout(timer);
var context = this;
var args = arguments;//保存此处的arguments,因为setTimeout是全局的,arguments不是防抖函数需要的。
timer = setTimeout(function() {
fn.call(context,args);
}, gapTime);
};
}
export default {
throttle,
debounce
};
index.vue:
import tool from "../../static/js/utils.js";
Page({
data:{
win_scrollTop:0
},
onPageScroll: tool.throttle(function(msg){
//执行函数
}),
gotoUnlock: tool.debounce(function() {
//执行函数
}),
})