手写实现节流throttle方法
节流原理:持续触发事件,每隔一段时间,只执行一次事件。
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
| function throttle(func, wait) { var timeout, context, args, result; var previous = 0;
var later = function() { previous = +new Date(); timeout = null; func.apply(context, args) };
var throttled = function() { var now = +new Date(); var remaining = wait - (now - previous); context = this; args = arguments; if (remaining <= 0 || remaining > wait) { if (timeout) { clearTimeout(timeout); timeout = null; } previous = now; func.apply(context, args); } else if (!timeout) { timeout = setTimeout(later, remaining); } }; return throttled; }
|