JSFiddle - React, Tailwind, and code Playground

by digitalicarus

JavaScript

var eventQ   = []
,   doItNowQ = []
;

function queueEvent(func, millis) {
    
    var event = {
        whenScheduled: (new Date()).getTime(),
        func: func,
        duration: millis
    };
    
    event.timer = setTimeout(function() {
        // close over event
        doItNowQ.push(event.func);
        purgeFromEventQ(event);
    });
    
    eventQ.push(event);
}

function onPause() {
    var i = 0;
    for(i=0; i<eventQ.length; i++) {
        clearTimeout(eventQ[i].timer);
        // set a new duration based on elapsed so far
        eventQ[i].duration = (new Date()).getTime() - whenScheduled;
    }
}

function onResume() {
    var i = 0;
    for(i=0; i<eventQ.length; i++) {
        eventQ[i].whenScheduled = (new Date()).getTime();
        eventQ.timer = setTimeout(function() {
            // ready for next frame
            doItNowQ.push(event.func);
            // get it out of the wait Queue
            purgeFromEventQ(event);
        });
    }
}