animation-stepper
Version:
Javascript library to handle several animations at once using a singleton approach. One window.requestAnimationFrame instance will be running in the background to orchest all animations.
9 lines • 4.01 kB
JavaScript
/**
* animation-stepper
* Javascript library to handle several animations at once using a singleton approach. One window.requestAnimationFrame instance will be running in the background to orchest all animations.
* @version 1.0.0 - 2019-05-19
* @link https://github.com/ajsoriar/animation-stepper
* @author Andres J. Soria R. <ajsoriar@gmail.com>
* @license MIT License, http://www.opensource.org/licenses/MIT
*/
!function(){"use strict";function animate(){AS.mainAnimation.defaultFunction(),window.AS.flags.mainFuncFinished&&executeFuncsInMainThreat(window.AS.mainAnimation.attachedFuncs),window.AS.flags.attachedFuncsFinished&&executeAttachedAnimations(window.AS.attachedAnimations),requestId=window.requestAnimationFrame(animate)}function executeFuncsInMainThreat(funcsArray){if(window.AS.flags.mainFuncFinished=!1,void 0!==funcsArray&&0!==funcsArray.length){for(var lon=funcsArray.length,i=0;lon>i;i++){var f=funcsArray[i];f()}window.AS.flags.mainFuncFinished=!0}}function executeAttachedAnimations(funcsArray){if(window.AS.flags.attachedFuncsFinished=!1,void 0!==funcsArray&&0!==funcsArray.length){for(var lon=funcsArray.length,i=0;lon>i;i++)doAnimation(funcsArray[i]);window.AS.flags.attachedFuncsFinished=!0}}function doAnimation(animationData){function executeStep(animationData){if(animationData.func(animationData),void 0!=animationData.stepsFuncs){var f=animationData.stepsFuncs[animationData.currentStep-1];"function"==typeof f?f(animationData):null!=f&&(f=animationData.stepsFuncs[animationData.currentStep-1].func)}}if(void 0===animationData.status||0===animationData.status)animationData.stepStartTime=AS.mainAnimation.timestamp,animationData.onStart(),null===animationData.stepsNum&&(animationData.stepsNum=animationData.stepsFuncs.length),void 0===animationData.currentStep?animationData.currentStep=0:null===animationData.currentStep&&(animationData.currentStep=1),animationData.currentStep>animationData.stepsNum&&(animationData.currentStep=1),executeStep(animationData),animationData.status=1,animationData.currentStep++;else{if(1!==animationData.status)return;animationData.stepStartTime+animationData.milisecondsStep<AS.mainAnimation.timestamp&&(animationData.stepStartTime=AS.mainAnimation.timestamp,executeStep(animationData),animationData.status=1,animationData.currentStep!==animationData.stepsNum||animationData.repeatForever!==!0&&void 0!==animationData.repeatForever?animationData.currentStep!==animationData.stepsNum||animationData.repeatForever?animationData.currentStep++:("function"==typeof animationData.whenFinish&&animationData.whenFinish(),animationData.status=3):animationData.currentStep=1)}}function start(){AS.requestId=window.requestAnimationFrame(animate)}var AS={requestId:null,mainAnimation:{id:null,timestamp:Date.now(),name:"Main animation function",description:"Main animation function",defaultFunction:function(){this.timestamp=Date.now()},attachedFuncs:[]},attachedAnimations:[],flags:{executeDefaultFunc:!0,executeAttachedFuncs:!0,mainFuncFinished:!0,attachedFuncsFinished:!0}};window.AS=AS;var requestId=0;AS.attachAnimation=function(jsonData){return void 0!==jsonData&&null!==jsonData?((void 0===jsonData.id||null===jsonData.id)&&(jsonData.id="afs-"+Date.now()),AS.attachedAnimations.push(jsonData),jsonData.id):void 0},AS.init=function(){return start(),this},AS.searchAnimation=function(lbl_or_id){if(null===lbl_or_id)return null;var animationsArr=window.AS.attachedAnimations;if(0===animationsArr.length)return null;for(var lon=animationsArr.length,i=0;lon>i;i++){var obj=animationsArr[i];if(obj.label===lbl_or_id||obj.id===lbl_or_id)return obj}return null},AS.resetAnimationByLabel=function(lbl){var obj=AS.searchAnimation(lbl);null!=obj&&(obj.currentStep=0,obj.status=0)},AS.pauseAnimationByLabel=function(lbl){var obj=AS.searchAnimation(lbl);null!=obj&&(obj.status=2)},AS.stopAnimationByLabel=function(lbl){AS.resetAnimationByLabel(lbl)},AS.continueAnimationByLabel=function(lbl){var obj=AS.searchAnimation(lbl);null!=obj&&(obj.status=1)}}();