Files
luos/gulliver/js/common/core/effects.js
2010-12-02 23:34:41 +00:00

245 lines
6.1 KiB
JavaScript
Executable File

/**
*
* Effects
*
* @Author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
* @Date Feb 11th, 2009
*/
/**
* fade effect
*
* i.e. fade('myDivId')
* or fade('myDivId', true) -> this for fadeIn and fadeOut in the self time
*/
var TimeToFade = 1000.0;
function fade(eid, inOut){
inOut = ( typeof(inOut) != 'undefined' )? true: false;
var element = document.getElementById(eid);
if(element == null)
return;
if(element.FadeState == null)
{
if(element.style.opacity == null
|| element.style.opacity == ''
|| element.style.opacity == '1')
{
element.FadeState = 2;
}
else
{
element.FadeState = -2;
}
}
if(element.FadeState == 1 || element.FadeState == -1)
{
element.FadeState = element.FadeState == 1 ? -1 : 1;
element.FadeTimeLeft = TimeToFade - element.FadeTimeLeft;
}
else
{
element.FadeState = element.FadeState == 2 ? -1 : 1;
element.FadeTimeLeft = TimeToFade;
if(inOut){
setTimeout("animateFadeInOut(" + new Date().getTime() + ",'" + eid + "')", 33);
}
else
setTimeout("animateFade(" + new Date().getTime() + ",'" + eid + "')", 33);
}
}
function animateFade(lastTick, eid)
{
var curTick = new Date().getTime();
var elapsedTicks = curTick - lastTick;
var element = document.getElementById(eid);
if(element.FadeTimeLeft <= elapsedTicks)
{
element.style.opacity = element.FadeState == 1 ? '1' : '0';
element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
element.FadeState = element.FadeState == 1 ? 2 : -2;
return;
}
element.FadeTimeLeft -= elapsedTicks;
var newOpVal = element.FadeTimeLeft/TimeToFade;
if(element.FadeState == 1)
newOpVal = 1 - newOpVal;
element.style.opacity = newOpVal;
element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
setTimeout("animateFade(" + curTick + ",'" + eid + "')", 33);
}
function animateFadeInOut(lastTick, eid)
{
var curTick = new Date().getTime();
var elapsedTicks = curTick - lastTick;
var element = document.getElementById(eid);
if(element.FadeTimeLeft <= elapsedTicks)
{
element.style.opacity = element.FadeState == 1 ? '1' : '0';
element.style.filter = 'alpha(opacity = ' + (element.FadeState == 1 ? '100' : '0') + ')';
element.FadeState = element.FadeState == 1 ? 2 : -2;
fade(eid);
return;
}
element.FadeTimeLeft -= elapsedTicks;
var newOpVal = element.FadeTimeLeft/TimeToFade;
if(element.FadeState == 1)
newOpVal = 1 - newOpVal;
element.style.opacity = newOpVal;
element.style.filter = 'alpha(opacity = ' + (newOpVal*100) + ')';
setTimeout("animateFadeInOut(" + curTick + ",'" + eid + "')", 33);
}
/**
* Effect
*
* To fade backgroud or text
*
* @author Erik A. Ortiz <erik@colosa.com, aortiz.erik@gmail.com>
*
*/
var Effect = function(element){
this.max=255;
this.min=100;
this.incrementor=1;
this.element=(typeof(element) != 'undefined')? element: "text"; //"text" o "background"
//----------------------------------------------
this.r=this.max;
this.g=this.max;
this.b=this.max;
this.target = '';
this.iTarget = '';
switch(this.element){
case "text":
this.target="color";
this.iTarget="this.max-";
break;
case "background":
this.iTarget="";
this.target="backgroundColor";
break;
}
this.setElement = function(e){
this.element = e;
switch(this.element){
case "text":
this.target="color";
this.iTarget="this.max-";
break;
case "background":
this.iTarget="";
this.target="backgroundColor";
break;
}
}
this.setMin = function(e){
this.min = e;
}
this.setMax = function(e){
this.max = e;
}
this.fadeIn = function (obj){
variation = -1;
increment=variation*this.incrementor;
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
this.r+=increment;
this.b+=increment;
this.g+=increment;
eso=obj;
elincrement=variation;
if(this.r>this.min && this.r<this.max){
seguir=window.setTimeout("oEffect.fadeIn(eso,elincrement)",10);
}
else{
this.r-=increment;
this.g-=increment;
this.b-=increment;
}
}
this.fadeOut = function (obj){
variation = 1;
increment=variation*this.incrementor;
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
this.r+=increment;
this.b+=increment;
this.g+=increment;
eso=obj;
elincrement=variation;
if(this.r>this.min && this.r<this.max){
seguir=window.setTimeout("oEffect.fadeOut(eso,elincrement)",10);
}
else{
this.r-=increment;
this.g-=increment;
this.b-=increment;
}
}
/**
* FadeIn and fade Out to the same time
*/
this.fade = function (obj){
variation = -1;
increment=variation*this.incrementor;
eval('obj.style.'+this.target+'="RGB("+('+this.iTarget+'this.r)+","+('+this.iTarget+'this.g)+","+('+this.iTarget+'this.b)+")"');
this.r+=increment;
this.b+=increment;
this.g+=increment;
eso=obj;
elincrement=variation;
if(this.r>this.min && this.r<this.max){
seguir=window.setTimeout("oEffect.fade(eso,elincrement)",10);
}
else{
this.r-=increment;
this.g-=increment;
this.b-=increment;
if( typeof('cb') != 'undefined'){
setTimeout("oEffect.fadeOut(document.getElementById('"+obj.id+"'))",0);
} else {
setTimeout("oEffect.fadeOut(document.getElementById('"+obj.id+"'))",0);
}
}
}
}
//default object, always it should be declared.
var oEffect = new Effect();