Foros del Web » Programando para Internet » Javascript »

[SOLUCIONADO] set intervals infinitos

Estas en el tema de set intervals infinitos en el foro de Javascript en Foros del Web. no comprendo porqué da se generan varios intervalos que se solapan el codigo es este Código: destinos=new Array(0,0,0,0,0); timers=new Array(null,null,null,null,null); function muestra(tgt){ destinos[tgt.id]=-337; timers[tgt.id]=setInterval(function(){ tgt.style.left=(tgt.offsetLeft+destinos[tgt.id])/2+'px'; ...
  #1 (permalink)  
Antiguo 30/05/2013, 00:13
Avatar de juanito1712  
Fecha de Ingreso: mayo-2010
Ubicación: Valencia
Mensajes: 1.124
Antigüedad: 14 años, 7 meses
Puntos: 66
set intervals infinitos

no comprendo porqué da se generan varios intervalos que se solapan el codigo es este

Código:
destinos=new Array(0,0,0,0,0);
timers=new Array(null,null,null,null,null);
function muestra(tgt){
	destinos[tgt.id]=-337;
	timers[tgt.id]=setInterval(function(){
				tgt.style.left=(tgt.offsetLeft+destinos[tgt.id])/2+'px';
				if(tgt.offsetLeft<0 && tgt.offsetLeft>-10){clearInterval(timers[tgt.id]);}
	},500);
}
function oculta(tgt){
	destinos[tgt.id]=0;
}

es un easing y cada vez que vuelvo a poner el raton encima del div, la animación se va acelerando mas y mas.
  #2 (permalink)  
Antiguo 30/05/2013, 03:25
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: set intervals infinitos

Buenas,

porque antes de lanzar un nuevo setInterval tendrías que comprobar si existe alguno y cancelar. Según tu ejemplo podría ser algo así:

Código Javascript:
Ver original
  1. function comprobar(fun, time, i)
  2. {
  3.     if(timers[i])
  4.         clearTimeout(timers[i]);
  5.     timers[i] = setInterval(fun, time);
  6. }
  7.  
  8. function muestra(tgt)
  9. {
  10.     destino[tgt.id] = -337;
  11.     comprobar( function( ){ acciones(tgt); },  500, tgt.id );
  12. }
  13.  
  14. function acciones(tgt)
  15. {
  16.   tgt.style.left=(tgt.offsetLeft+destinos[tgt.id])/2+'px';
  17.   if(tgt.offsetLeft<0 && tgt.offsetLeft>-10)
  18.         timers[tgt.id] = null;
  19. }

Me da la sensación de que estás usando un id numérico y eso no es correcto.
__________________
tecnawebs.es Diseño web y programación - Modelado 3D.

google plus

Etiquetas: set
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:28.