UNPKG

kambo-schedule

Version:

Scheduling utilities

62 lines (54 loc) 1.77 kB
/** * 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 ) }