Press n or j to go to the next uncovered block, b, p or k for the previous block.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | /** * @description 节流 [delay 时间内只执行一次] * @author SoldierAb * @param {Function} func * @param {Number} delay 单位:ms */ export default (func,delay)=>{ let timer = null; if(!func) return; if(!getType(func,'Function')){ throw new Error(`the 1st param must be a Function at throttleUtil`); } if(!delay) delay=300; //默认时间间隔300毫秒 let startTime = Date.now(); return ()=>{ let ctx=this,args=arguments; let curTime = Date.now(); let remaining = delay-(curTime-startTime); clearTimeout(timer); if(remaining<=0){ func.apply(ctx,args); startTime = Date.now(); }else{ timer = setTimeout(()=>{ func.apply(ctx,args); },remaining); } } } const getType = (obj,_type) =>{ if( Object.prototype.toString.call(_type)!==`[object String]`){ throw new Error(' _type must be String at getType'); } return Object.prototype.toString.call(obj)===`[object ${_type.substr(0,1).toUpperCase()}${_type.substr(1).toLowerCase()}]`; } |