/* 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; }