Ver Mensaje Individual
  #5 (permalink)  
Antiguo 27/05/2014, 19:57
Avatar de Italico76
Italico76
 
Fecha de Ingreso: abril-2007
Mensajes: 3.303
Antigüedad: 17 años, 7 meses
Puntos: 292
Respuesta: Problema para evitar apilamientos de registro de eventos

Gracias @ocp001a y @Alexis88 por su sugerencia, no se si soy irremediablemente torpe en JS pero no logro me funcione, de hecho... ahora tengo un nuevo problema y es que se pierde el valor de la variable i entre invocacion e invocacion y entonces el contar no avanza... y creo me falta crear un closure para mantenerlo

Sera que me iluminan con su conocimiento del lenguaje ?

Código Javascript:
Ver original
  1. <html>
  2. <head>
  3. <title>No molestar!</title>
  4. <style>
  5.     body {background-color: #000;} 
  6.    
  7.     h1 {color: white;}
  8.  
  9.    #moverDiv
  10.    {
  11.         width:350px;
  12.         height:350px;
  13.         background-image: url("images/caminante.jpg");
  14.         border: red 2px;
  15.         position:relative;
  16.    }
  17. </style>
  18. </head>
  19. <body>
  20. <h1> No me molestes </h1>
  21.  
  22. <div id = "moverDiv"></div>
  23.  
  24. <script>
  25.     // @author: Pablo Bozzolo
  26.    
  27.     function moveMeHor(elem,cant,smooth)
  28.     {
  29.         smooth = smooth || false;
  30.        
  31.         console.log('In');
  32.        
  33.         //elem.removeEventListener('mouseover',miHandler,false);
  34.        
  35.         if (!smooth){
  36.             elem.style.left = cant;
  37.             return;
  38.         }  
  39.    
  40.         (function(){                       
  41.             i = 0;
  42.             inter = setTimeout(function()
  43.             {  
  44.                 console.log(i);
  45.                 if (i>cant)
  46.                 {                  
  47.                     i=0;
  48.                 }          
  49.            
  50.                 if (i==cant)
  51.                 {
  52.                     //clearTimeout(inter);
  53.                     //div.addEventListener ('mouseover',miHandler,false);                  
  54.                 }              
  55.                 elem.style.left = i;
  56.                 i++;
  57.                
  58.             },1);
  59.         })();  
  60.        
  61.        
  62.     }
  63.    
  64.     window.onload = function()
  65.     {  
  66.         div = document.getElementById('moverDiv'); 
  67.  
  68.         miHandler = function(){moveMeHor(div,500,true);};  
  69.         miHandler2 = function(){console.log('removiendo handler1'); div.removeEventListener('mouseover',miHandler,false);};
  70.            
  71.         // espero un tiempito segundo antes de registrar el mouseover  
  72.         setTimeout(function(){
  73.             div.addEventListener ('mouseover',miHandler,false);
  74.             //div.addEventListener ('mouseout',miHandler2,false);
  75.         },500);
  76.     }
  77.        
  78. </script>
  79. </body>
  80. </html>
__________________
Salu2!