Comunidad de diseño web y desarrollo en internet online

ayuda con setInterval, pierde el control

Citar            
MensajeEscrito el 19 Feb 2013 09:23 pm
Hola tengo un codigo un setInterval que funciona muy bien pero cuando se deja corrirendo la pagina web.
empiesa a correr todo loco y se auto acelera, ya cheque todo el codigo y cada vez que inicio un setinterval procuro detenerlo para supuestamente evitar esto pero parece no funcionar, siempre que coloco setIntervals hago esto:

clearInterval(tiempo); tiempo=setInterval(mifuncion,30);
el problema aqui es que se me hacelera la pagina, les dejo el link para que vean lo que pasa, despues de ejecutarla, dejen la pestaña abierta un rato y veran como el texto comienza a parpadear muy rapido, tambien les adjunto el codigo para que me ayuden a mejorarlo y ubicar la falla, y si les sirve pues aprovechenlo:

enlace: http://skyalert.com.mx/infosite/skyalert_sismos/sky/
codigo js:

Código :

function textoss(){
      $('.testos').html(tex[texi])
      $('.testos').fadeTo(600,1)
      
      setTimeout(function(){
         $('.testos').fadeTo(400,0,function(){
            texi++;
            if(texi>5){texi=0}
         })
      },3000)
      fotos();
}
function fotos(){
   foto++;
   if(foto>4){foto=1;}
   
   $('.op:eq(3) img').attr('src','./images/'+foto+'ha1.jpg')
   $('.op:eq(4) img').attr('src','./images/'+foto+'ha2.jpg')
   $('.op:eq(5) img').attr('src','./images/'+foto+'ha3.jpg')
   
   $('.taphom').css('display','block');
   $('.taphom').fadeTo(400,1,function(){
      $('.op:eq(0) img').attr('src','./images/'+foto+'h1.jpg')
      $('.op:eq(1) img').attr('src','./images/'+foto+'h2.jpg')
      $('.op:eq(2) img').attr('src','./images/'+foto+'h3.jpg')
      
      $('.opo:eq(0) img').attr('src','./images/'+foto+'ha1.jpg')
      $('.opo:eq(1) img').attr('src','./images/'+foto+'ha2.jpg')
      $('.opo:eq(2) img').attr('src','./images/'+foto+'ha3.jpg')
      $('.taphom').css({'opacity':'0','display':'none'})
   });
   
}
$(document).ready(function(){
        clearInterval(tiempo2);
   tiempo2=setInterval(textoss,4000);
})//ready

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 27 Feb 2013 01:41 am
Usa timeOuts para no tener que limpiarlos.

De todas maneras lo que tienes mal, es que sólo ejecutas las cosas una vez, pues el document ready sólo se ejecuta una vez, así que la única vez que estás llamando a clearInterval no estás limpiando nada, y cada 4 segundos ejecutas el intervalo que no limpias nunca.

Código Javascript :

$(document).ready(function(){
    clearInterval(tiempo2);
    tiempo2=setInterval(textoss,4000);
})

/* A mi manera de ver, esto deberías hacerlo así, o parecido: */
$(document).ready(crearTimeOut);

function crearTimeOut () {
    textoss();
    setTimeout(crearTimeOut, 4000);
}

Y si tus animaciones no han de estar en cola (que no sé si es el caso), usa dequeue().

Código Javascript :

$('.testos').fadeTo(600,1).dequeue();

//......

$('.testos').fadeTo(400,0,function(){
    texi++;
     if (texi>5) {texi=0}
}).dequeue();

Así creo que no tendrás problemas,
Un saludo!.

Por Abducted

Claber

489 de clabLevel

3 tutoriales

Genero:Masculino  

Mentalidad Renovada

chrome
Citar            
MensajeEscrito el 03 Mar 2013 11:41 pm
Muchas gracias por tu respuesta,lo checare y te aviso como me fue.

Por rod00x3

Claber

595 de clabLevel



Genero:Masculino  

chrome

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.