@livelybone/request-idle-callback
Version:
A polyfill for `window.requestIdleCallback`, support NodeJs. It can be used for time slicing
10 lines (8 loc) • 2.06 kB
JavaScript
/**
* Bundle of @livelybone/request-idle-callback
* Generated: 2020-05-11
* Version: 1.1.0
* License: MIT
* Author: 2631541504@qq.com
*/
!function(e,n){"object"==typeof exports&&"undefined"!=typeof module?n(exports):"function"==typeof define&&define.amd?define(["exports"],n):n((e=e||self).RIC={})}(this,function(e){"use strict";var i={hidden:!1};var n="undefined"==typeof window?global||{}:window,u={times:1,duration:1e3/30,update:function(e){var n=Math.max(1e3/120,Math.min(1e3/30,e));this.times+=1,this.duration=(this.duration+n)/2},correct:function(){var o,d=0;return new Promise(function(i){!function t(){"function"==typeof n.requestAnimationFrame&&n.requestAnimationFrame(function(e){var n=e||(new Date).getTime();o&&u.update(n-o),o=n,++d<15?t():i(u.duration)})}()})}};u.correct(),u.duration=1e3/60;var o,d=function(){return(new Date).getTime()},a=d();function c(){return Math.max(0,u.duration-(d()-a))}function r(e){return{didTimeout:e,timeRemaining:function(){return 50*c()/u.duration}}}function f(t){cancelAnimationFrame(o);function e(){setTimeout(function(){for(var e=0;c()&&e<t.length;e+=1){var n=t[e];if(!n.canceled&&!n.done){try{n.callback(r(!1))}catch(e){setTimeout(function(){throw e},0)}n.done=!0}}t.splice(0,e),a=d(),t.length&&f(t)})}i.hidden?e():o=requestAnimationFrame(e)}var m=0;var l=[];!function(e){if("undefined"!=typeof document){var n="hidden"in document?"hidden":"webkitHidden"in document?"webkitHidden":"mozHidden"in document?"mozHidden":null;if(n){var t=n.replace(/hidden/i,"visibilitychange");window.addEventListener(t,function(){i.hidden=document[n],e(i.hidden)})}}}(function(e){e&&f(l)}),e.cancelIdleCallback=function(e){for(var n=0;n<l.length;n+=1)if(l[n].id===e){l[n].canceled=!0;break}},e.requestIdleCallback=function(e,n){var t,i=(t=e,{id:++m,canceled:!1,done:!1,callback:function(e){try{t(e)}catch(e){setTimeout(function(){throw e},0)}}});return l.push(i),n&&n.timeout&&+n.timeout&&setTimeout(function(){i.done||(i.callback(r(!0)),i.done=!0)},+n.timeout),f(l),i.id},Object.defineProperty(e,"__esModule",{value:!0})});