8
votes

Boucle constamment d'un tableau JavaScript et d'afficher des résultats à DIV?

J'ai un groupe de témoignages pour mon site qui sont actuellement sur une page et essayons d'obtenir un div pour afficher chaque 1 à un intervalle de 5 secondes, si le tableau atteint la dernière valeur, il devrait recommencer au début de La matrice à nouveau.

Voici ce que j'ai jusqu'ici ... P>

var testimonial = new Array();
testimonial[1] = "Rugby";
testimonial[2] = "Baseball";
testimonial[3] = "Cricket";
var length = testimonial.length
var i = 1;
setInterval(function() {
    while (i <= length) {   
        $('#testimonials p').html(testimonial[i]);
        ++i;
        if (i == length) {
            i == 1;
        }
    }
}, 5000);


5 commentaires

utiliser [] au lieu d'un nouveau tableau (). Il est préférable.


Je ne sais pas où vous avez pris ce code, mais en JavaScript, les index commencent par 0


@qwertymk j'ai écrit et merci


Pourquoi ne pas simplement mettre var i = 1; à l'intérieur de la fonction anonyme dans setInterval ? De cette façon, il se réinitialisera. Et comme Qwertymk a dit, les index commencent à 0.


Il n'est pas tout à fait clair quelle est la question. Qu'est-ce qui ne fonctionne pas?


4 Réponses :


0
votes

Vous pouvez essayer xxx


1 commentaires

En supposant que vous commencez avec un index de 0 et non 1



23
votes

ESSAYEZ

var testimonial = ['Rugby', 'Baseball', 'Cricket'];
var numTestimonials = testimonial.length;
var index = 0;

setInterval(function() {
    $('#testimonials p').text(testimonial[index]);        
    index = (index + 1) % numTestimonials;
}, 5000);


4 commentaires

@ Divad12 Merci pour cela, est l'opérateur que vous avez utilisé identique à celui du module en PHP? Encore une fois merci, acceptera quand je peux :)


Puis-je vous demander pourquoi vous avez changé de HTML () en texte (), y a-t-il une réelle différence d'utiliser l'une ou l'autre?


@Colonel Je pense que cela renvoie le reste du premier opérande divisé par le deuxième opérande. Voir développeur.mozilla.org/fr/javascript/reference / Opérateurs / ...


@Colonel Si vous voulez simplement afficher des chaînes brutes à l'intérieur de votre div, alors .Text échappera à la chaîne pour vous. Voir Stackoverflow.com/q/1910814/392426 et API.JQUERY.com/Text



0
votes

La fonction de seinterval est appelée toutes les 5 secondes. Cela signifie que vous affichez les 5 témoignages l'un après l'autre très rapide toutes les 5 secondes au lieu de les afficher l'un après l'autre.

Vous devriez faire quelque chose comme: p>

var testimonial = new Array();
testimonial[1] = "Rugby";
testimonial[2] = "Baseball";
testimonial[3] = "Cricket";
var length = testimonial.length
var i = 0; // arrays start with 0

setInterval(function() {
    $('#testimonials p').html(testimonial[i]);
    i++;
    if (i == length) i = 0;
}, 5000);


0 commentaires

0
votes

Beaucoup de réponses intéressantes, donc une autre ne va pas mal. : -)

Vous pouvez le faire tout d'abord dans une fonction de fonction immédiatement appelée: xxx


1 commentaires

Le comportement ne sera pas tout à fait le même à cause de l'opérateur de pré-augmentation; Si vous démarrez i au -1 , il affichera "rugby" comme premier élément. En outre, je pensais que l'idiome d'une expression de fonction immédiatement appelée est (fonction () {...}) (); , pendant que vous avez (fonction () {...} ()); (placement proche de la parenthèse).