Hice hace mucho este animador. Envase a un tutorial http://www.disegnocentell.com.ar/notas2.php?id=239. Pero este animador manega mas cosas como los colores y medidas.
Código javascript:
Modo de uso:Ver original
<!-- /*********************************** * ::: EASY ANIMATE ::: ************************************ * ESTE SCRIPT FUE CREADO POR * pato12 DE FOROSDELWEB.COM * Licencia: GNU General Public License * http://creativecommons.org/licenses/GPL/2.0/deed.es_AR * CODIGO LIBRE DE USO, SIEMPRE * CUANDO RESPETEN LA LICENCIA * -------------------------------- * halfmusic.com.ar - halfwars.com * -------------------------------- * TODOS LOS DERECHOS RESERVADOS **/ var EasyAnimate=function(dom){ this.elemento=typeof dom=='string'?document.getElementById(dom):dom; this.cssColor=['backgroundColor','borderBottomColor','borderLeftColor','borderRightColor','borderTopColor','color','outlineColor']; this.colors={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]}; this.colorChange=function(dom,pos,end,start,estilo){ var start=this.getRGB(start),end=this.getRGB(end); this.css(dom,estilo,"rgb("+[Math.max(Math.min(parseInt((pos*(end[0]-start[0]))+start[0]),255),0),Math.max(Math.min(parseInt((pos*(end[1]-start[1]))+start[1]),255),0),Math.max(Math.min(parseInt((pos*(end[2]-start[2]))+start[2]),255),0)].join(",")+")"); }; this.getRGB=function(color) { var result; if(color&&color.constructor==Array&&color.length==3)return color; if(result=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(color)) return [parseInt(result[1]),parseInt(result[2]),parseInt(result[3])]; if(result=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(color)) return [parseFloat(result[1])*2.55,parseFloat(result[2])*2.55,parseFloat(result[3])*2.55]; if(result=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(color)) return [parseInt(result[1],16),parseInt(result[2],16),parseInt(result[3],16)]; if(result=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(color)) return [parseInt(result[1]+result[1],16),parseInt(result[2]+result[2],16),parseInt(result[3]+result[3],16)]; if(result=/rgba\(0, 0, 0, 0\)/.exec(color)) return this.colors['transparent']; return this.colors[color.toLowerCase()]; }; this.position=function(el){ var offsetTop=0,offsetLeft=0,elm=el; do{ offsetLeft+=parseInt(elm.offsetLeft); offsetTop+=parseInt(elm.offsetTop); if(elm.scrollTop>0)offsetTop -= elm.scrollTop; if(elm.scrollLeft>0)offsetLeft -= elm.scrollLeft; elm=elm.offsetParent; }while(elm); return {left:offsetLeft,top:offsetTop}; }; this.stop=function(){ if(this.elemento.setIntervalTime)clearInterval(this.elemento.setIntervalTime); }; this.animar=function(animar,tiempo,funcion,onEnd){ var pot=0.01,inicia=new Date().getTime(),el=this; if(this.elemento.setIntervalTime)this.stop(); this.elemento.setIntervalTime=setInterval(function(){ var now=new Date().getTime(),fotograma=(now-inicia)>tiempo?false:(pot=animar((now-inicia+.001)/tiempo,pot)); if(!fotograma){funcion(1);el.stop();(onEnd||function(){})();return;} funcion(fotograma); },10); }; this.inArray=function(array,palabra){ for(var i=0,total=array.length;i<total;i++)if(array[i]==palabra)return true; return false; }; this.css=function(dom,css,csss){ if(csss){var estilo={};estilo[css]=csss;} else{if(typeof css!='object')return dom.style[css]; else var estilo=css;} for(cs in estilo){ if(cs=='opacity'){ dom.style.opacity=estilo[cs]>1?estilo[cs]/100:estilo[cs]; dom.style.MozOpacity=estilo[cs]>1?estilo[cs]/100:estilo[cs]; dom.style.KhtmlOpacity=estilo[cs]>1?estilo[cs]/100:estilo[cs]; dom.style.filter='alpha(opacity='+(estilo[cs]>1?estilo[cs]:estilo[cs]*100)+')'; dom.style.zoom=1; }else dom.style[cs]=estilo[cs]; } }; this.animate=function(fin,time,onEnd,animacion){ var el=this,inicio={},extencion={},time=!time?300:(isNaN(time)?300:time); if(typeof fin!='object')return false; for(css in fin){ if(css=='opacity'){ fin[css]=fin[css]>1?fin[css]:fin[css]*100; extencion[css]=''; inicio[css]=isNaN(parseInt(this.css(this.elemento,css)))?100:parseInt(this.css(this.elemento,css))*100;inicio[css]=isNaN(inicio[css])?100:inicio[css]; }else if(css=='left'||css=='top'){ extencion[css]=isNaN(fin[css])?fin[css].substr(fin[css].length-2,fin[css].length):'px'; extencion[css]=isNaN(parseInt(extencion[css]))?extencion[css]:extencion[css].substr(extencion[css].length-1,extencion[css].length); inicio[css]=this.position(this.elemento)[css],extencion[css]; fin[css]=parseInt(fin[css]); }else if(this.inArray(this.cssColor,css)){ extencion[css]=''; inicio[css]=this.css(this.elemento,css); }else{ extencion[css]=isNaN(fin[css])?fin[css].substr(fin[css].length-2,fin[css].length):'px'; extencion[css]=isNaN(parseInt(extencion[css]))?extencion[css]:extencion[css].substr(extencion[css].length-1,extencion[css].length); inicio[css]=parseInt(this.css(this.elemento,css)),extencion[css]; fin[css]=parseInt(fin[css]); } }; this.animar((animacion||function(p,k){return p}),time,function(p){ for(css in fin){ var start=inicio[css],finish=fin[css],ext=extencion[css]; if(el.inArray(el.cssColor,css)){ el.colorChange(el.elemento,p,finish,start,css); }else if(start>finish){ el.css(el.elemento,css,(start-(start-finish)*p)+ext); }else if(start<finish){ el.css(el.elemento,css,(start+(finish-start)*p)+ext); } } },onEnd); }; };
Código javascript:
En el ultimo se pone la funcion del efecto, pueden crear las suyas, pero esta saque del tutorial:Ver original
new EasyAnimate(DOM O ID DEL OBETO A ANIMAR).animate(OBJETO CON LOS CSS(EJ:{color:'#999',height:'10em'})[,TIEMPO DE DURACION, FUNCION A EJECUTAR CUANDO SE TERMINE LA ANIMACION, EFECTO]);
Código javascript:
Ver original
function linear(p,ant){ var maxValue=1, minValue=.001, totalP=1, k=1; var delta = maxValue - minValue; var stepp = minValue+(Math.pow(((1 / totalP) * p), k) * delta); return stepp; } function senoidal(p,ant){ return (1 - Math.cos(p * Math.PI)) / 2; } function desacelerado(p,ant){ var maxValue=1, minValue=.001, totalP=1, k=.25; var delta = maxValue - minValue; var stepp = minValue+(Math.pow(((1 / totalP) * p), k) * delta); return stepp; } function acelerado(p,ant){ var maxValue=1, minValue=.001, totalP=1, k=7; var delta = maxValue - minValue; var stepp = minValue+(Math.pow(((1 / totalP) * p), k) * delta); return stepp; } function elasticoFuerte(p,ant){ if(p<=0.6){ return Math.pow(p*5/3,2);} else{ return Math.pow((p-0.8)*5,2)*0.6+0.6; } } function elasticoSuave(p,ant){ if(p<=0.6){ return Math.pow(p*5/3,2); }else{ return Math.pow((p-0.8)*5,2)*0.4+0.6; } }
Bueno, por ejemplo:
Código html:
Ver original
<script type="text/javascript"> <!-- function elasticoFuerte(p,ant){ if(p<=0.6){ return Math.pow(p*5/3,2);} else{ return Math.pow((p-0.8)*5,2)*0.6+0.6; } } function darForma(){ new EasyAnimate(document.getElementById('div_texto')).animate({height:'300px',color:'#999',backgroundColor:'#EEE'},700,function(){alert('Fin!');},elasticoFuerte); // elasticoFuerte por la funcion de arriba. } --> </script>
[EDITO]
Aqui hay una demostracion: http://halfmusic.com/easyanimate/
Gracias
Salu2