2017-10-14 3 views
0

Je fais un div qui change son texte toutes les 10 secondes à l'aide de la fonction setInterval. Cela fonctionne très bien mais après 5-6min il commence à changer son texte en milliseconde donc il semble qu'il clignote.Le texte a commencé à clignoter après quelques minutes dans setInterval javascript

mon code est:

var wordArray = ["TEXT1","TEXT2","TEXT3"]; 

function typingEffect() { 
    var rand = Math.floor(Math.random()*3); 
    $("#big-bob h5").text(wordArray[rand]); 
    $("#big-bob h5").addClass("animate"); 
    setInterval(typingEffect,10000); 
} 

typingEffect(); 
+1

Ceci est dû au fait que le nouveau setInterval est ajouté chaque fois que la fonct l'ion est appelé. Utilisez clearInterterval ou remplacez setInterval par setTimeout. Notez les différences: https://developer.mozilla.org/en-US/Add-ons/Code_snippets/Timers – jeff

Répondre

3

Vous créez un nouvel intervalle chaque fois que vous exécutez la fonction typingEffect() ...

var wordArray = ["TEXT1","TEXT2","TEXT3"]; 

function typingEffect() { 
    var rand = Math.floor(Math.random()*3); 
    $("#big-bob h5").text(wordArray[rand]).addClass("animate"); 
} 

setInterval(typingEffect,10000); 
typingEffect(); // This last line is only needed if you want to execute the function 
       // when page loads (otherwise, first execution will be after the 
       // first 10 seconds) 

Pour ce faire sur votre chemin, vous devez utiliser setTimeout(). ..

var wordArray = ["TEXT1","TEXT2","TEXT3"]; 

function typingEffect() { 
    var rand = Math.floor(Math.random()*3); 
    $("#big-bob h5").text(wordArray[rand]).addClass("animate"); 
    setTimeout(typingEffect,10000); 
} 

typingEffect(); 
+0

Salut A. Lglesias Merci beaucoup. Cela fonctionne très bien. Mais j'ai besoin de plus d'informations. le timing dans cette fonction est 10s et sur l'animation (css) c'est aussi 10s mais les deux ne correspondent pas les uns aux autres. – VikashSDNT

+0

Oui, les temporisateurs peuvent subir des retards en fonction de la charge du processeur, etc. (les navigateurs Web, comme toutes les applications, se relaient pour un temps processeur, et le temps d'attente varie en fonction de la charge). Vous devez définir une durée d'intervalle 'setTimeout' supérieure à l'animation css, afin de vous assurer que l'animation css a suffisamment de temps pour terminer avant l'arrivée de l'itération' setInterval' suivante. Probablement 1 seconde de différence devrait suffire, mais essayez différentes valeurs pour l'adapter à vos besoins. –

+0

Salut A. Lglesias, Merci encore. Maintenant, j'ai encore un problème. En fait, je ne veux pas de chaîne aléatoire. Je veux une chaîne étape par étape à travers le tableau wordArray. Aidez-moi s'il vous plaît. – VikashSDNT