去抖和节流
很早之前做一个支付按钮,那时候经验浅,直接就是点击提交按钮,在上线后 lead 发现了,及时回滚,事后告诉我需要防止重复提交,所以需要用到去抖和节流。 这一次跟我的印象很深,所以记录下来。
function debounce(method, delay, immediate) {
let timer
return function () {
let context = this,
args = arguments
let later = function () {
timer = null
if (!immediate) {
method.apply(context, args)
}
}
if (immediate && !timer) {
method.apply(context, args)
}
console.info(timer)
clearTimeout(timer)
timer = setTimeout(later, delay)
console.info(timer)
}
}
debounce(calcPrice, 5000, false)
//疑问?如果改成这种 打印timer的时候 发现clearTimeout 不是上一次的,而是空,其实是因为没有把以前的setInterval清除造成的, //运行这个函数返回的是一个函数 不会执行里面的代码的
let my_keyup_fun = function () {
debounce(calcPrice, 5000, false)
}
//<input type="text" ng-keyup="my_keyup_fun()" ng-model="spaceSlide.value" maxlength="4" ng-maxlength="4" class="my-ipt my-ipt-md" />