Never been to DZone Snippets before?

Snippets is a public source code repository. Easily build up your personal collection of code snippets, categorize them with tags / keywords, and share them with the world

« Newer Snippets
Older Snippets »
Showing 1-3 of 3 total  RSS 

TimeLine //JavaScript Class




Simulates the Adobe Flash timeline. You define the amount of frames, the speed in fps (frames per second) and, at each frame passage an event is called, useful for animations.

[UPDATED CODE AND HELP CAN BE FOUND HERE]



//+ Jonas Raoni Soares Silva
//@ http://jsfromhell.com/classes/timeline [v1.0]

TimeLine = function(fps, f){
	this.fps = fps, this.frames = f;
};
with({o: TimeLine, $: TimeLine.prototype}){
	o.timers = [];
	$.running = !!($.current = +(o.timer = $.time = null));
	o.run = function(){
		var o = this;
		o.timer || (o.timer = setInterval(function(){
			for(var h, d = +(new Date), t = o.timers, i = t.length; i--;){
				(!t[i].running || ((d - t[i].time) / (1e3 / t[i].fps) > t[i].current + 1 &&
				t[i].onframe(++t[i].current), t[i].current >= t[i].frames)) &&
				(h = t.splice(i, 1)[0], h.stop(1));
			}
		}, 1));
	};
	$.start = function(c){
		var o = this, t = TimeLine;
		if(o.running) return;
		o.running = true, o.current = c || 0;
		o.time = new Date, o.onstart && o.onstart();
		if(!o.onframe || o.frames <= 0 || o.fps <= 0)
			return o.stop(1);
		t.timers.push(this), t.run();
	};
	$.stop = function(){
		var o = this;
		o.running = false;
		if(!TimeLine.timers.length)
			TimeLine.timer = clearInterval(TimeLine.timer), null;
		arguments.length && o.onstop && o.onstop();
	};
}


Example


<div id="box" style="position: absolute; top: 100px; background: #efe; width: 100px; height: 100px">25 fps</div>
<div id="box2" style="position: absolute; top: 300px; background: #ff9; width: 100px; height: 100px">12 fps</div>

<strong>TimeLine working together with the ease in quad function.</strong><br />

<script type="text/javascript">
Math.ease = function (t, b, c, d) {
	if ((t /= d / 2) < 1)
		return c / 2 * t * t + b;
	return -c / 2 * (--t * (t - 2) - 1) + b;
};

var o = new TimeLine(25, 50), d = document, b = d.getElementById("box");
o.onframe = function(){
	b.style.left = Math.ease(this.current, 0, 400, 30) + "px";
};
o.onstart = function(){
	d.body.appendChild(d.createTextNode("Started"));
};
o.onstop = function(){
	d.body.appendChild(d.createTextNode(" - Finished (" + (((new Date) - this.time)) + " msec)"))
	d.body.appendChild(d.createElement("br"));
	this.start();
};
o.start();


var o2 = new TimeLine(12, 50), b2 = d.getElementById("box2");
o2.onframe = function(){
	b2.style.left = Math.ease(this.current, 0, 400, 30) + "px";
};
o2.onstop = function(){
	this.start();
};
o2.start();
</script>

Display FPS in Flash Movie

_root.createEmptyMovieClip("movFrameRate",100); 

_root.movFrameRate.onEnterFrame = function() { 
this.t = getTimer(); 
this.frameRate = Math.round(1000 / (this.t - this.o)); 
//trace(this.frameRate); 
this.o = this.t; 
}

Adjust FPS with Actionscript

// Usage 

// sets _root.yourMC fps to 100 playing forward, but none of the child mcs, that will stop on the last frame 
// _root.yourMC.engineTune(100) 

// sets _root.yourMC fps to 20 playing forward, including the child mcs 
// _root.yourMC.engineTune(20, true) 

// sets _root.yourMC fps to 50 playing backward if the currentframe is greater than 20, without altering the child mcs 
// _root.yourMC.engineTune(50, false, "down", 20)

MovieClip.prototype.engineTune = function(fps, inherit, dir, endF) { 
   var intv, mc, d, end; 
   intv = 1000/fps; 
   d = (dir == "down") ? -1 : 1; 
   if (!endF) end = (dir == "down") ? 1 : this._totalframes;    
   clearInterval(this.tuneUpID); 
   this.tuneUpID = setInterval(fineTune, intv, this, d, this._currentframe, end); 
   if (inherit) { 
      for (var i in this) { 
         if (typeof (this[i]) == "movieclip") { 
            clearInterval(this[i].tuneUpID); 
            this[i].tuneUpID = setInterval(fineTune, intv, this[i], d, this[i]._currentframe, end); 
         } 
      } 
   } 
   function fineTune(mc, d, sf, end) { 
      _if = (sf<end) ? mc._currentframe < end : mc._currentframe > end 
      if (_if) { 
         mc.gotoAndStop(mc._currentframe+d); 
      } else { 
         clearInterval(mc.tuneUpID); 
      } 
   } 
}; 


« Newer Snippets
Older Snippets »
Showing 1-3 of 3 total  RSS