2017-06-13 1 views
1

Sur le bouton suivant cliquez sur (contexte du jeu), je veux faire une pause pour afficher la bonne réponse avant d'afficher la question suivante. Comment puis-je le faire? J'essaie ceci:jquery pause avant d'afficher l'étape suivante

showCorrectAnswer(); 
questionCounter++; 
setTimeout(displayNext(), 6000); 
/* Or */ 
showCorrectAnswer(); 
questionCounter++; 
wait(6000); 
displayNext(); 

/*with wait*/ 
function wait(ms){ 
    var start = new Date().getTime(); 
    var end = start; 
    while(end < start + ms) { 
     end = new Date().getTime(); 
    } 
} 

Mais ne fonctionne pas. Merci

+0

Aucune erreur. Lorsque l'utilisateur sélectionne sa réponse et clique sur "suivant", le suivant s'affiche automatiquement. pas le temps pour l'utilisateur de voir la bonne réponse. Je veux lui montrer, sa réponse en jaune et la bonne réponse en rouge avec des explications de 6 secondes avant de montrer la question suivante. – Cutis

+0

JavaScript peut être déroutant à la fois, Si vous êtes intéressé par la façon de le faire dans jQuery, la réponse de @ Panos est ce que vous cherchez, comme 'delay()' est le wrapper jQuery pour 'setTimeout()' et. .. fonctionne juste. Si vous voulez comprendre pourquoi cela n'a pas fonctionné, j'espère que ma réponse est assez claire. –

+1

Merci, votre réponse est claire et m'aide. – Cutis

Répondre

1

Vous êtes censé passer soit un anonyme fonction à setTimeout() (dans lequel vous placez ce que vous voulez exécuter lorsque le délai expire) ou le nom d'une fonction définie. Si vous placez () après le nom, comme vous l'avez fait, la fonction est exécutée lorsque le setTimeout() est analysé, pas quand il expire, en attendant le résultat de l'exécution de votre fonction pour retourner une autre fonction qui sera exécutée lorsque le setTimeout() expire - un peu comme le fonction anonyme fait.

L'un des éléments suivants fonctionnera comme prévu. Nom de la fonction:

showCorrectAnswer(); 
questionCounter++; 
setTimeout(displayNext, 6000); 

... ou un emballage anonyme:

showCorrectAnswer(); 
questionCounter++; 
setTimeout(function(){ 
    displayNext(); 
}, 6000); 

Dans la plupart des scénarios de la vie réelle, il est conseillé de changer questionCounter valeur dans la fonction displaynNext(), pas avant.

1

Avec jquery, vous pouvez utiliser:

$('.container').hide().delay(6000).fadeIn(displayNext());

+0

Votre solution présente trois problèmes. ** 1. ** Vous n'expliquez rien, comme si vous ne saviez pas comment ou pourquoi cela fonctionne. Bien que parfois utiles, ces réponses sont généralement considérées comme de faible qualité sur [donc]. Voir [réponse] pour plus de détails. ** 2. ** Vous supposez qu'il existe un '.container' qui contient les questions. Et si ce n'est pas? Et si cela contient aussi des choses qui ne devraient pas être effacées? ** 3. ** Votre solution affiche la question suivante après '6400ms', car la durée par défaut de' fadeIn' est '400ms'. Donc, vous devriez changer '6000'' '5600'. –

+0

Andrei je suis sur la route, la version mobile de la pile;) –

0

consulter cette

vous avez fait une petite erreur setTimeout(displayNext(),6000) qui appelle immédiatement à la place que vous ne devez passer le nom de la fonction. setTimeout(displayNext,6000)

Si vous voulez faire appel avec des paramètres assurez-vous que vous écrivez en fonction, puis mettez tout votre code à l'intérieur setTimeout(function(){displayNext(parameter1,parameter2);},6000)

function displayNext(){ 
 
alert("display"); 
 
}
<input type="number" step="1000" id="num_milisecond" value=1000> milliseconds 
 
<input type="button" onclick="setTimeout(displayNext, document.getElementById('num_milisecond').value);" value="click to allert">

+0

J'ai fait cela. ça ne marche pas comme je le veux. – Cutis