Ver Mensaje Individual
  #12 (permalink)  
Antiguo 12/05/2013, 11:16
alexg88
 
Fecha de Ingreso: abril-2011
Mensajes: 1.342
Antigüedad: 13 años
Puntos: 344
Respuesta: ¿cómo hacer que se pare una función mediante un evento?

No es que para que una función sea reutilizable sea necesario usar funciones anónimas, sino que para el caso que nos ocupa sí.

Te explico:

Código Javascript:
Ver original
  1. window.onload = function()
  2. {    
  3.     blink(document.getElementById("textoParpadeante"));
  4.     blink(document.getElementById("textoParpadeante2"));
  5. }
  6.  
  7. function blink_aux(element)
  8.     {      
  9.             element.style.visibility = (element.style.visibility == "visible") ? "hidden" : "visible";
  10.     }
  11.  
  12. //A la función le pasas el elemento que quieres que parpadee
  13. function blink(element)
  14. {
  15.     var id;
  16.    
  17.     /*
  18. Para poder referenciar el elemento en la llamada a la función auxiliar blink_aux, es necesario utilizar una función anónima que englobe la llamada a la función blink_aux. Esto es así, porque a la función setInterval se le pasa una referencia a una función (y al pasar una referencia -sólo la función en si- no puedes pasarle los parámetros). Para ello se usa una función anónima.
  19. */
  20.     id = setInterval(function(){blink_aux(element);}, 500);
  21.    
  22.     element.onmouseover = function()
  23.     {
  24.         clearInterval(id);      
  25.     }
  26.    
  27.     element.onmouseout = function()
  28.     {
  29.         id = setInterval(function(){blink_aux(element);}, 500);
  30.     }    
  31. }

EDITO:

No puedes pasarle id = setInterval( "blink_aux(element)", 500 ); porque la referencia a la variable element se pierde al salir de la función blink.
No ocurre esto mismo en la función anónima gracias a las closures (la referencia a element sigue viva a pesar de haber salido del ámbito de la función blink.