La función no se detiene al llamar a otra

Estoy teniendo un problema con una cosa simple.

Tengo un div, cuando se hace clic, se inicia una aminación (un bucle infinito de imágenes que cambian, simulando un gif animado).

Pero, cuando hago clic en el otro div, el primero debe detenerse y comenzar solo la otra animación, y esto continúa con cada animación (serán 8 en total).

Aquí está el código para un solo bucle de imagen:

var t1;
var t2;
var anim1 = new Array ('img/testes2/anim1_1.png','img/testes2/anim1_2.png');
var anim2 = new Array ('img/testes2/anim2_1.png','img/testes2/anim2_2.png');

var index = 1;

var verifica1 = 0;
var verifica2 = 0;


function rotateImage1(){
$('#imagemPrinc').fadeOut(0, function(){
    $(this).attr('src', anim1[index]);
    $(this).fadeIn(0, function(){
        if (index == anim1.length-1){
            index = 0;
        }
        else{
            index++;
        }
    });
});
return false;
}

function stopTimer1(){
if(verifica1 = 1){
    clearInterval(t2);
}
}

function muda1(){
if (verifica1 = 1){
    //stopTimer2();
    //$('#bgImagem').css({'background-image':'url(img/testes2/anim1_1.png)'});
    t1 = setInterval(rotateImage1,500);
}
}

La misma función para la segunda animación. El verifica var y la función stopTimer, intenté hacer una parada, y solo la otra se reproduce, pero parece que no funciona. Es por eso que está comentado en el código.

Será más fácil ver el código en ejecución, así que eso es todo. ---AQUÍ--- Los divs en los que se puede hacer clic son esos dos cuadrados rojos.

¿¡Alguien puede ayudarme por favor!?

¡Gracias!

preguntado el 03 de mayo de 12 a las 18:05

1 Respuestas

clearTimeout toma como argumento la identificación del temporizador devuelta por la función setInterval (aquí es t1).

En lugar de usar fadeOut y fadeIn con una duración de 0, simplemente debe usar ocultar y mostrar.

Aparte, puedes simplificar este bloque:

   if (index == anim1.length-1){
        index = 0;
    }
    else{
        index++;
    }

in

  index = [(index+1)%anim1.length];

Y esto está muy mal:

if(verifica1 = 1){

Esto no es una prueba: siempre cambia verifica1 y siempre es cierto. Probablemente quieras ==.

¿Hay algún punto en su código donde (voluntariamente) establece verifica1?

contestado el 03 de mayo de 12 a las 18:05

lea su código nuevamente: está tratando de proporcionar una función a la función clearTimeout ( clearTimeout(rotateImage2); ) en lugar de la identificación del temporizador. Deberías reemplazar esto por clearTimeout(t2); (asumiendo que el resto del código es similar al que puedo leer). - Denys Séguret

pongo así ahora: clearTimeout(t1)... clearTimeout(t2)... pero nada funciona... - efdutra

Acabo de poner el verifica para intentar que detenga el bucle... en un momento desesperado... rsrs - efdutra

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.