防抖节流 话不多说上代码,亲测有效
1.js公共文件中放置代码
// 放到公共方法里面
/*函数节流(时间差):如果interval不传,则默认300ms*/
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;//赋值给第一次触发的时间,这样就保存了第二次触发的时间
}
};
}
/*函数防抖(定时器):如果interval不传,则默认1000ms*/
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);
};
}
module.exports = {
throttle,
debounce
}
2.在对应文件中引入
import $commjs from "../../utils/common";
// 防抖节流用法
goLogin: $commjs.debounce( function(e){
console.log('1111')
},600),
// 在600ms时间内点击都会重置,重新计算时间
//普通方法
goLogin(){
console.log('1111')
}