kambo-schedule
Version:
Scheduling utilities
62 lines (54 loc) • 1.77 kB
JavaScript
/**
* 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
*/
export function onNextPaint( f ){ window.requestAnimationFrame(f) }
/**
* Schedule `f` on the next microtask loop
* @param {Function} f
* @param {*} ...args Arguments to use
*/
export 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.
*/
export 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
*/
export 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
*/
export function at( f , t=1000) { return window.setTimeout( f, t ) }
/**
* Cancel recurrent appointment marked by `evID`
* @param {Number} evID Scheduled ID
*/
export function cancelEvery( evID ) { window.clearInterval( evID ) }
/**
* Cancel single appointment marked by `evID`
* @param {Number} evID Scheduled ID
*/
export function cancelAt( evID ) { window.clearTimeout( evID ) }