Scandio.timing = {};
Register timinig namespace on scandiojs object
Scandio.timing = {};
Puts the breaks on a function which may be called to often
such as scrolling or resizing callbacks.
The function will actually be called after release
-milliseconds elapsed
Scandio.timing.breaks = function(on, release) {
Initialize the context, arg, timeout and previous local variables
var
context = null,
args = null,
result = null,
timeout = null,
previous = 0,
remaining = null,
Wrapper to be called if release
has not elapsed yet
toBeCalled = function() {
Timestamp of call
previous = new Date();
timeout = null;
Result being function on which brakes have been put
result = on.apply(context, args);
};
Returning a function which returns the execution’s result
return function() {
Where the function is in time
var now = new Date();
If a previous call hasnt been made its now
if (!previous) {
previous = now;
}
How much time remains until final execution of on
remaining = release - (now - previous);
The function context and arguments
context = this;
args = arguments;
Time has elapsed, on
can be called
if (remaining <= 0) {
Clears all state
clearTimeout(timeout);
This will break it on next call
timeout = null;
previous = now;
result = on.apply(context, args);
} else if (!timeout) {
Next execution round
timeout = setTimeout(toBeCalled, remaining);
}
return result;
};
};
Delays a function execution ms
milliseconds.
Scandio.timing.delay = function(fn, ms) {
Arguments are anything after fn
and ms
var args = slice.call(arguments, 2);
Return the result of setTimeout
return setTimeout(function() {
return fn.apply(null, args);
}, ms);
};