UNPKG

kambo-schedule

Version:

Scheduling utilities

81 lines (68 loc) 2.28 kB
(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 }); })));