Created
October 14, 2012 13:08
-
-
Save nenjiru/3888516 to your computer and use it in GitHub Desktop.
Frame animation object
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| //////////////////////////////////////////////////////////////////////////////// | |
| // 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