kambo-schedule
Version:
Scheduling utilities
81 lines (68 loc) • 2.28 kB
JavaScript
(function (global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
typeof define === 'function' && define.amd ? define(['exports'], factory) :
(factory((global.kambo = global.kambo || {})));
}(this, (function (exports) { 'use strict';
/**
* Functions with sane names to scheduling calls on the browser
*
* @module kambo-schedule
* @example
* var schedule = require('kambo-schedule')
* schedule.onNextPaint( render ) ⇒ requestAnimationFrame( render )
* schedule.every( render, 1000 ) ⇒ setInterval( 1000, render )
* schedule.at( render, 1000 ) ⇒ setTimeout( 1000, render )
*/
/**
* Schedule `f` on next render paint
* @param {Function} f
*/
function onNextPaint( f ){ window.requestAnimationFrame(f); }
/**
* Schedule `f` on the next microtask loop
* @param {Function} f
* @param {*} ...args Arguments to use
*/
function onNextTick( f , ...args ) {
return new Promise( (resolve, reject) => { resolve(args); }).then( f )
}
/**
* Schedule `f` when page is idle
* @param {Number} timeout Wait `timeout` miliseconds for idle opportunity. Run if time is out.
*/
function onIdle( f , timeout=300 ) {
return window.requestIdleCallback( f, timeout )
}
/**
* Schedule `f` every t miliseconds
* @param {Function} f
* @param {Number} [t=1000] Time in miliseconds
* @return {Number} scheduled ID
*/
function every( f , t=1000) { return window.setInterval( f, t) }
/**
* Schedule `f` after t miliseconds from now
* @param {Function} f
* @param {Number} [t=1000] Time in miliseconds
* @return {Number} scheduled ID
*/
function at( f , t=1000) { return window.setTimeout( f, t ) }
/**
* Cancel recurrent appointment marked by `evID`
* @param {Number} evID Scheduled ID
*/
function cancelEvery( evID ) { window.clearInterval( evID ); }
/**
* Cancel single appointment marked by `evID`
* @param {Number} evID Scheduled ID
*/
function cancelAt( evID ) { window.clearTimeout( evID ); }
exports.onNextPaint = onNextPaint;
exports.onNextTick = onNextTick;
exports.onIdle = onIdle;
exports.every = every;
exports.at = at;
exports.cancelEvery = cancelEvery;
exports.cancelAt = cancelAt;
Object.defineProperty(exports, '__esModule', { value: true });
})));