add Ox.throttle and Ox.debounce
This commit is contained in:
parent
0df1056d3f
commit
92a122eb0a
1 changed files with 56 additions and 0 deletions
|
@ -147,6 +147,62 @@ Ox.queue = function(fn, maxThreads) {
|
|||
return ret;
|
||||
};
|
||||
|
||||
/*@
|
||||
Ox.throttle <f> Runs a function at most once per given time frame
|
||||
(fn[, ms]) -> <f> Throttled function
|
||||
fn <f> Function to throttle
|
||||
ms <n|250> Interval in milliseconds
|
||||
@*/
|
||||
Ox.throttle = function(fn, ms) {
|
||||
var args,
|
||||
timeout;
|
||||
ms = arguments.length == 1 ? 250 : ms;
|
||||
return function() {
|
||||
args = arguments;
|
||||
if (!timeout) {
|
||||
fn.apply(null, args);
|
||||
args = null;
|
||||
timeout = setTimeout(function() {
|
||||
if (args !== null) {
|
||||
fn.apply(null, args);
|
||||
}
|
||||
timeout = null;
|
||||
}, ms);
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
/*@
|
||||
Ox.debounce <f> Runs a function once it stops being called for a given time frame
|
||||
(fn[, ms][, immediate]) -> <f> Throttled function
|
||||
fn <f> Function to debounce
|
||||
ms <n|250> Interval in milliseconds
|
||||
immediate <b|false> If true, function is called once immediately
|
||||
@*/
|
||||
Ox.debounce = function(fn/*, ms, immediate*/) {
|
||||
var args,
|
||||
immediate = Ox.last(arguments) === true,
|
||||
ms = Ox.isNumber(arguments[1]) ? arguments[1] : 250,
|
||||
timeout;
|
||||
return function() {
|
||||
args = arguments;
|
||||
if (!timeout) {
|
||||
if (immediate) {
|
||||
fn.apply(null, args);
|
||||
args = null;
|
||||
}
|
||||
} else {
|
||||
clearTimeout(timeout);
|
||||
}
|
||||
timeout = setTimeout(function() {
|
||||
if (args !== null) {
|
||||
fn.apply(null, args);
|
||||
}
|
||||
timeout = null;
|
||||
}, ms);
|
||||
};
|
||||
};
|
||||
|
||||
/*@
|
||||
Ox.time <f> Returns the time it takes to execute a given function
|
||||
(fn) -> <n> Time in milliseconds
|
||||
|
|
Loading…
Reference in a new issue