Skip to content

Instantly share code, notes, and snippets.

@nenjiru
Created October 14, 2012 13:08
Show Gist options
  • Select an option

  • Save nenjiru/3888516 to your computer and use it in GitHub Desktop.

Select an option

Save nenjiru/3888516 to your computer and use it in GitHub Desktop.
Frame animation object
////////////////////////////////////////////////////////////////////////////////
// Frame animation object
////////////////////////////////////////////////////////////////////////////////
;namespace.display.FrameAnimation = (function(win, doc, ns)
{
"use strict";
//--------------------------------------------------------------------------
// Import
//--------------------------------------------------------------------------
var AnimationEvent = ns.event.AnimationEvent,
EventDispatcher = ns.event.EventDispatcher;
//--------------------------------------------------------------------------
// Variables
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// Public methods
//--------------------------------------------------------------------------
/**
* Keep FPS animation object
*
* @param {Object|String} target HTML element or ID name.
* @param {String} className Draw class name.
* @param {Number} targetTime One time length
* @param {Number} frameNumber Total frame number
* @param {Number} endFrame Not to loop
* @constructor
*/
var FrameAnimation = function(target, className, targetTime, frameNumber, endFrame)
{
EventDispatcher.apply(this);
var element = (typeof target === 'string') ? doc.getElementById(target) : target,
start = 0,
state = 0,
frame = 0,
currentFrame = 0,
fnumber = frameNumber + 1,
finishFrame = endFrame || false,
dispatchEvent = this.dispatchEvent;
/**
* Current frame number
*
* @type {Number}
*/
this.currentFrame = 0;
/**
* Draw
*
* @param {Number} now time
*/
this.draw = function(now)
{
now = (now || Date.now());
switch (state)
{
case 0:
state = 1;
start = Date.now();
dispatchEvent(AnimationEvent.START);
break;
case 1:
frame = ~~((now - start) / targetTime * fnumber);
state = (finishFrame && frame >= finishFrame) ? 2 : 1 ;
currentFrame = this.currentFrame = frame % fnumber;
element.className = className + currentFrame;
dispatchEvent(AnimationEvent.UPADATE);
break;
case 2:
state = 4;
dispatchEvent(AnimationEvent.END);
break;
}
}
};
//--------------------------------------------------------------------------
// Private methods
//--------------------------------------------------------------------------
//--------------------------------------------------------------------------
// Export
//--------------------------------------------------------------------------
return FrameAnimation;
})(window, document, window.namespace);
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment