« # »

“elementoHTML.onEnterFrame” y se hizo la animación DHTML fácil!

Os presento mi última sacada de manga, el pequeño objeto OEF (OnEnterFrame).

Con este objeto tenemos el evento onEnterFrame para nuestros elementos HTML!!

JavaScript:
  1. <HEAD>
  2. <script type="text/javascript">
  3. //este es el objeto principal
  4. oef={
  5.     fps:24,
  6.     init:function(){
  7.         oef.intervalo=Math.round(1000/oef.fps);
  8.         oef.all=document.body.getElementsByTagName("*");
  9.         setInterval("oef.onenterframe()",oef.intervalo);
  10.         oef.onload;
  11.     },
  12.     onenterframe:function(){
  13.         for(var i=0;i<oef.all.length;i++){
  14.             if(oef.all[i].onEnterFrame){
  15.                 oef.all[i].onEnterFrame();
  16.             }
  17.         }
  18.     }
  19. }
  20. //estas dos líneas son necesarias :)
  21. //imprescindible que no se añada ningún onload por debajo de ellas.
  22. oef.onload=window.onload||new Function();
  23. window.onload=oef.init;
  24.  
  25. </script>
  26. <script type="text/javascript">
  27. //estas funciones son de ejemplo
  28. function getHex(){
  29.     h = Math.round(Math.random()*0xFF).toString(16);
  30.     if(h.length==1){h = "0"+h;}
  31.     return h;
  32. }
  33. function coloreame(elemento){
  34.     elemento.onEnterFrame = function(){
  35.         var rgb = "#" + getHex() + getHex() + getHex();
  36.         this.style.backgroundColor = rgb;
  37.     }
  38. }
  39. </script>
  40. </HEAD>
  41. <!-- Llamamos a la función coloreame, la cual inicia el evento onEnterFrame -->
  42. <body>
  43.     <input type="button" value="DAME DAME!!" onClick="coloreame(this);" />
  44. </body>

Ver el correspondiente ejemplo visual

Soy consciente que esto no es más que un apaño, pero para montar hasta 25 eventos onEnterFrame a la vez tira bien (luego según se le vaya añadiendo "chicha" a la página/funciones que ejecutan el máximo disminuye). A más compleja sea la función que se ejecuta, menos posibilidades hay que funcione fluídamente, pero he trastado con 100 elementos cambiando el fondo y no ha bajado de los 24FPS.

He intentado crearlo como atributo html (como un onClick), pero se pierde el scope, ya que el sistema este es "pauperrimo" y solo es útil para ejecutar acciones desde javascript, aunque, otra solución es poner eso en un onLoad="this.onEnterFrame=funcionaaaa;" donde se ejecute el onEnterFrame, ya que al cargarse se iniciará el evento.

Espero vuestro linchamiento popular :P

Ai si!, es case sensitive (vamos, que se pone con mayusculas) y para quitarlo es con:

JavaScript:
  1. delete elemento.onEnterFrame;

Comentarios

  1. teresa | agosto 24th, 2006 | 8:52 am

    oye tio, muyyy guapa la page, están muy currados los contenidos, si si.

Deja un comentario

(*: Datos necesarios para dejar un comentario)

Get Adobe Flash playerPlugin by wpburn.com wordpress themes