62 lines
1.5 KiB
JavaScript
62 lines
1.5 KiB
JavaScript
/* js 相关的工具函数 */
|
||
|
||
/**
|
||
* @description [throttle 节流函数]
|
||
* @author shanshuizinong
|
||
* @param {Function} fn 延时调用函数
|
||
* @param {Number} delay 延迟多长时间
|
||
* @param {Number} atleast 至少多长时间触发一次
|
||
* @return {Function} 延迟执行的方法
|
||
*/
|
||
export function throttle(fn, delay = 1000, atleast = 1000) {
|
||
let timer = null
|
||
let previous = null
|
||
return function() {
|
||
let now = +(new Date())
|
||
const args = arguments
|
||
const ctx = this
|
||
if (!previous) previous = now
|
||
if (atleast && now - previous > atleast) {
|
||
fn && fn.apply(ctx, args)
|
||
previous = now
|
||
clearTimeout(timer)
|
||
} else {
|
||
clearTimeout(timer)
|
||
timer = setTimeout(function() {
|
||
fn && fn.apply(ctx, args)
|
||
previous = null
|
||
}, delay)
|
||
}
|
||
}
|
||
}
|
||
|
||
//防抖
|
||
function debounce(fun, delay) {
|
||
return function(args) {
|
||
//获取函数的作用域和变量
|
||
let that = this
|
||
let _args = args
|
||
//每次事件被触发,都会清除当前的timeer,然后重写设置超时调用
|
||
clearTimeout(fun.id)
|
||
fun.id = setTimeout(function() {
|
||
fun.call(that, _args)
|
||
}, delay)
|
||
}
|
||
}
|
||
|
||
|
||
export function uuid() {
|
||
var s = [];
|
||
var hexDigits = "0123456789abcdef";
|
||
for (var i = 0; i < 36; i++) {
|
||
s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
|
||
}
|
||
s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
|
||
s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
|
||
s[8] = s[13] = s[18] = s[23] = "-";
|
||
|
||
var uuid = s.join("");
|
||
return uuid;
|
||
}
|
||
|