lp-vue
Version:
vue2组件库&方法&指令集合
46 lines (40 loc) • 1.25 kB
JavaScript
;
exports.__esModule = true;
exports.debounce = debounce;
function debounce(func, wait, immediate) {
var timeout = void 0,
args = void 0,
context = void 0,
timestamp = void 0,
result = void 0;
var later = function later() {
// 据上一次触发时间间隔
var last = +new Date() - timestamp;
// 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
if (last < wait && last > 0) {
timeout = setTimeout(later, wait - last);
} else {
timeout = null;
// 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
if (!immediate) {
result = func.apply(context, args);
if (!timeout) context = args = null;
}
}
};
return function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
context = this;
timestamp = +new Date();
var callNow = immediate && !timeout;
// 如果延时不存在,重新设定延时
if (!timeout) timeout = setTimeout(later, wait);
if (callNow) {
result = func.apply(context, args);
context = args = null;
}
return result;
};
}