Ver Mensaje Individual
  #2 (permalink)  
Antiguo 28/10/2011, 15:29
Avatar de Raziel_Ravenheart
Raziel_Ravenheart
 
Fecha de Ingreso: agosto-2011
Ubicación: Ibagué, Tolima
Mensajes: 192
Antigüedad: 12 años, 8 meses
Puntos: 37
Exclamación Respuesta: esto es payta gente que le gusta programar en javascript un reto personal

Hola jor_0203, como estás?

Mira el código que desarrollé para ayudarte con este tema:
Código Javascript:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4. <script language="Javascript">
  5. var temporizadorplegar;
  6. var temporizadordesplegar;
  7.  
  8. function detectar (evt) {
  9.     //evt, es una variable que se recibe implícitamente cuando se utiliza el modo
  10.     // no invasivo de manejar eventos, pero en este caso se llama la
  11.     // función detectar desde los botones, pasándole, el evento como tal
  12.    
  13.     var btnId = evt.target.id;
  14.     //Por medio del evento, y haciendo referencia a la fuente que lo generó (botón)
  15.     //utilizando la palabra reservada target, podemos saber el id
  16.    
  17.     switch (btnId) {
  18.         case "r1":      recoger("contenido");
  19.                     break;
  20.         case "d1":  desplegar("contenido");
  21.                     break;
  22.                    
  23.         case "r2":      recoger("contenido2");
  24.                     break;
  25.         case "d2":  desplegar("contenido2");
  26.                     break;
  27.     }
  28.     //Dependiendo del id, utilizamos un switch para llamar la función  específica
  29.     //pasándole el nombre del div que queremos animar
  30. }
  31.  
  32. function recoger(div){ 
  33.     clearTimeout(temporizadordesplegar);
  34.     var altura=parseInt(document.getElementById(div).style.height);
  35.    
  36.     if (altura>0) {
  37.         altura--;
  38.         document.getElementById(div).style.height= altura+"px";
  39.         temporizadorplegar=setTimeout(recoger,10, div);
  40.         //Esta es la sintaxis que reconocen firefox y google chrome, para pasar
  41.         //parámetros a una función llamada con setTimeOut.  No es obligatorio
  42.         //poner el nombre de la función entre paréntesis.  La variable div, es
  43.         //la que recibe el id del div que vamos a animar.
  44.     } else {
  45.         clearTimeout(temporizadorplegar);
  46.     }
  47. }
  48.  
  49. function desplegar(div){
  50.     clearTimeout(temporizadorplegar);
  51.     var altura=parseInt(document.getElementById(div).style.height);
  52.    
  53.     if (altura < 305){
  54.         altura++;
  55.         document.getElementById(div).style.height= altura+"px";
  56.         temporizadordesplegar=setTimeout(desplegar,10,div) ;
  57.     } else {
  58.         clearTimeout(temporizadordesplegar);
  59.     }
  60. }
  61.  
  62. </script>
  63. </head>
  64. <body>
  65. <input type="button" id="r1" value="Recoger" onclick="detectar(event)" />
  66. <input type="button" id="d1" value="Desplegar" onclick="detectar(event)" />
  67. <!-- Una regla de html es que los id no se pueden repetir, cada id es único como nuestro número de identificación.  Por eso le puse un id diferente a cada botón. Por otro lado, se llama la función detectar, pasándole como parámetro, el evento, explicado en el código javascript anterior.-->
  68.  
  69. <div id="contenido" style="width:720px; height:305px; background-color:#006699;"></div>
  70. quiero que estos botones tambien puedan reutilizar la primera funcion pero no he podido, para hecer una funcion global
  71. alguien sabe como
  72. <br>
  73. <input type="button" id="r2" value="Recoger" onclick="detectar(event)" />
  74. <input type="button" id="d2" value="Desplegar" onclick="detectar(event)" />
  75. <div id="contenido2" style="width:720px; height:305px; background-color: #CC0000;"></div>
  76.  
  77. </body>
  78. </html>

Debe haber un modo diferente de hacer esto, ya que el atributo style, es decir aplicar estilo inline, ya no es permitido, o por lo menos no es recomendable, por eso es necesario buscar el modo de no hacer esto.

Lo mismo con el evento onclick, es preferible asignar las funciones a los eventos por medio de manejadores semánticos, es decir, se quita el onclick de la etiqueta, si deja asi´:

Código HTML:
Ver original
  1. <input type="button" id="r1" value="Recoger" />

y desde javascript se le asignan los eventos así:

Código Javascript:
Ver original
  1. window.onload = function () {
  2.     document.getElementById("r1").onclick = detectar;
  3. }

De este modo queda más límpio el código html y se vé más profesional.

Espero entiendas cuales son las ventajas de esto y la de utilizar funciones como attachEvent o addEventListener.

Saludos