2010-10-27 26 views
0

J'ai un texte que je dois tourner, c'est ce que j'ai maintenant:JQuery Rotating Texte

> <div id="facts"> 
>   <blockquote class="fact visible"> 
>   xxx 
>   </blockquote> 
>   <blockquote class="fact"> 
>   yyy 
>   </blockquote> 
>   <blockquote class="fact"> 
>    zzz 
>   </blockquote> 
>   <blockquote class="fact"> 
>   ooo 
>   </blockquote> 
>  </div> 

et mon jquery est comme ceci:

$(document).ready(function() { 

$("div#facts").height(factMaxHeight); 

    setTimeout("rotateSlide()",7000);  
}); 
............. 

$('blockquote.fact').each(function() { 
     if($(this).hasClass('visible')) { 
      $(this).fadeOut(5000,function() { 
       $(this).removeClass('visible'); 
       $(this).next().setVis 
      }); 
     }//if 
     else { 
      $(this).fadeIn(5000,function() { 
       $(this).addClass('visible'); 
      }); 
     } 
    }); 
    setTimeout("rotateSlide()",7000); 

so ... xxx show Je vais bien, mais ensuite, je vois tous les autres 3, yyy, zzz et ooo superposés les uns au-dessus des autres, ça ne se fait pas un par un, aidez-moi à comprendre cela.

Merci!

+0

Il serait utile de voir le code complet, à savoir. la fonction rotateSlide. Mais d'après les apparences, vous devez au moins avoir une variable de compteur pour déterminer quelle citation afficher, et celle à afficher ensuite. –

+0

Garder une variable de compteur séparée serait juste demander des ennuis. La classe '.visible' signifie déjà laquelle est visible, et à partir de là, il n'est pas du tout difficile de deviner laquelle afficher en examinant le DOM. – VoteyDisciple

Répondre

0

Changer votre jQuery chaque:

$('blockquote.fact').each(function() { 
    if($(this).hasClass('visible')) { 
     $(this).fadeOut(5000,function() { 
      $(this).removeClass('visible'); 
      $(this).next().setVis 
     }); 
     if($(this).next().size()) { 
      $(this).next().fadeIn(5000,function() { 
       $(this).addClass('visible'); 
      }); 
     } else { 
      $(this).parent().children().first().fadeIn(5000,function() { 
       $(this).addClass('visible'); 
      }); 
     } 
     return false 
    } 
}); 
+0

Oups: le retour vrai devrait être changé en un retour faux (pour la performance) ou enlevé (pour la réduction de la confusion) –

0

Le problème est que nous parcourons tous les faits à la fois. Que diriez-vous simplement ceci:

$('blockquote.fact.visible').each(function() { 
    $(this).fadeOut(5000, function() { 
     $(this).removeClass('visible'); 

     var next = $(this).next(); 
     if (next.length == 0) 
      next = $('blockquote.fact:first'); // If we're at the end of the list, go back to the first one. 

     next.addClass('visible').fadeIn(5000); 
    }); 
}); 
setTimeout(rotateSlide, 7000); 

En aparté, s'il vous plaît ne pas utiliser la notation hideuse "rotateSlide()" pour setTimeout. Passez simplement la fonction que vous souhaitez appeler, comme indiqué ci-dessus.

+0

Great! ça fonctionne parfaitement maintenant. Merci! –