Les quiz sont amusants! Ils sont un excellent moyen d'apprendre de nouvelles matières, et ils vous permettent d'engager votre public avec quelque chose d'amusant et de joueur. Du point de vue d'un développeur, "Comment faire un quiz JavaScript?" est l'une des questions les plus courantes posées par les personnes qui apprennent le développement Web, et pour une bonne raison.
coder votre propre jeu de quiz javascript est un exercice d'apprentissage fantastique. Il vous apprend à gérer les événements, à manipuler le DOM, à gérer l'entrée des utilisateurs et à utiliser le stockage local pour suivre leur score. Lorsque vous avez un quiz de base opérationnel, il y a tout un tas de possibilités pour ajouter des fonctionnalités plus avancées, comme la pagination.
Dans ce tutoriel, je vais vous expliquer comment faire un quiz en JavaScript que vous pourrez vous adapter à vos besoins et ajouter à votre propre site. Si vous souhaitez voir ce que nous finirons, vous pouvez sauter et voir le code de quiz JavaScript en activité.
Pour plus de connaissances et de défis JavaScript plus approfondis, sortez notre livre gratuit: Apprenez à coder avec javascript.
Voici quelques éléments à savoir avant de commencer:
Idéalement, nous voulons que les questions et réponses du quiz soient dans notre code JavaScript et que notre script génère automatiquement l'application du quiz. De cette façon, nous n'aurons pas besoin d'écrire beaucoup de balisage répétitif, et nous pouvons ajouter et supprimer facilement les questions.
Dans cet exemple, nous structurerons notre projet en utilisant trois fichiers clés:
Cependant, si vous préférez, vous pouvez également inclure le code CSS et JavaScript directement dans le fichier HTML en tant que code en ligne.
Lorsque vous apprenez à faire un quiz dans HTML et JavaScript, il est important de comprendre comment la structure HTML interagit avec la logique JavaScript. Ainsi, en tant que première étape, configurons la structure HTML de notre jeu de quiz JavaScript.
Voici à quoi cela ressemblerait:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Cette structure est un exemple simple de la façon de créer du code HTML quiz qui sert de base à votre modèle de quiz javascript. Si vous exécutez l'application maintenant, vous ne verrez qu'un bouton «soumettre quiz».
Maintenant, nous pouvons utiliser la méthode JavaScript Document.getElementById pour sélectionner les éléments HTML ci-dessus et leur stocker des références dans le code de quiz JavaScript comme ci-dessous:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
La prochaine chose dont notre application Quiz a besoin est quelques questions à afficher. Nous utiliserons des littéraux d'objets JavaScript pour représenter les questions individuelles et un tableau pour contenir toutes les questions qui composent notre application de quiz. L'utilisation d'un tableau rendra les questions faciles à itérer:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
N'hésitez pas à poser autant de questions ou de réponses que vous le souhaitez.
Remarque : Comme il s'agit d'un tableau, les questions apparaîtront dans l'ordre dans lequel ils seront répertoriés. Si vous souhaitez trier les questions de quelque manière que ce soit avant de les présenter à l'utilisateur, consultez notre astuce rapide sur Triant un tableau d'objets en javascript .
Maintenant que nous avons notre liste de questions, nous pouvons les montrer sur la page. Pour cela, nous utiliserons une fonction nommée buildQuix (). Passons à la ligne JavaScript suivante en ligne pour voir comment cela fonctionne:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Tout d'abord, nous créons une variable de sortie pour contenir toutes les sorties HTML, y compris les questions et les choix de réponses.
Ensuite, nous pouvons commencer à construire le HTML pour chaque question. Nous devrons parcourir chaque question comme ceci:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Pour Brevity, nous utilisons une fonction Arrow pour effectuer nos opérations sur chaque question. Parce que c'est dans une boucle FOREACH, nous obtenons la valeur actuelle, l'index (le numéro de position de l'élément actuel dans le tableau) et le tableau lui-même sous forme de paramètres. Nous n'avons besoin que de la valeur actuelle et de l'index, qui pour nos fins, nous nommerons respectivement CurrentQuestion et QuesterNumber.
Regardons maintenant le code à l'intérieur de notre boucle:
<span>// we'll want to store the list of answer choices </span><span>const answers = []; </span> <span>// and for each available answer... </span><span>for(letter in currentQuestion.answers){ </span> <span>// ...add an html radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span><span>} </span> <span>// add this question and its answers to the output </span>output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span><span>); </span>
Pour chaque question, nous voulons générer le HTML correct. Ainsi, notre première étape consiste à créer un tableau pour maintenir la liste des réponses possibles.
Ensuite, nous utiliserons une boucle pour remplir les réponses possibles pour la question actuelle. Pour chaque choix, nous créons un bouton Radio HTML, que nous enfermons dans un élément
Ici, nous utilisons des littéraux de modèle, qui sont des cordes mais plus puissants. Nous utiliserons les fonctionnalités suivantes des littéraux de modèle:
Une fois que nous avons notre liste de boutons de réponse, nous pouvons appuyer sur la question HTML et la réponse HTML sur notre liste globale de sorties.
Notez que nous utilisons un modèle littéral et certaines expressions intégrées pour créer d'abord la question div, puis créer la réponse div. L'expression de jointure prend notre liste de réponses et les rassemble dans une chaîne que nous pouvons publier dans nos réponses div.
Maintenant que nous avons généré le HTML pour chaque question, nous pouvons nous joindre à tout ensemble et le montrer sur la page:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Maintenant, notre fonction Buildquiz est terminée, et vous devriez pouvoir exécuter l'application Quiz et voir les questions affichées.
Cependant, la structure de votre code est importante. En raison de quelque chose appelé la zone morte temporelle, vous ne pouvez pas référencer votre tableau de questions avant qu'il ne soit défini.
Pour récapituler, c'est la bonne structure:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
À ce stade, nous voulons construire notre fonction ShowResults pour enclencher les réponses, les vérifier et montrer les résultats. Il s'agit d'une partie cruciale de toute implémentation JavaScript du jeu de quiz, car elle fournit des commentaires immédiats à l'utilisateur en fonction de ses performances.
Voici la fonction, que nous allons passer en détail ensuite:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Tout d'abord, nous sélectionnons tous les conteneurs de réponse dans le HTML de notre quiz. Ensuite, nous allons créer des variables pour garder une trace de la réponse actuelle de l'utilisateur et du nombre total de réponses correctes.
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Maintenant, nous pouvons parcourir chaque question et vérifier les réponses.
Nous utiliserons 3 étapes pour cela:
Voyons de plus près la façon dont nous trouvons la réponse sélectionnée dans notre HTML:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Tout d'abord, nous nous assurons que nous recherchons à l'intérieur du conteneur de réponse pour la question actuelle.
Dans la ligne suivante, nous définissons un sélecteur CSS qui nous permettrons de trouver le bouton radio.
Ensuite, nous utilisons le requêtes de JavaScript pour rechercher notre sélecteur CSS dans le contraire de réponse précédemment défini. En substance, cela signifie que nous trouverons le bouton radio de la réponse.Enfin, nous pouvons obtenir la valeur de cette réponse en utilisant .Value.
traitant des entrées utilisateur incomplètes
Évaluer les réponses et afficher le résultat
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Une fois la boucle de vérification des réponses terminée, nous pouvons montrer le nombre de questions que l'utilisateur a raison:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Si vous le souhaitez, vous pouvez envelopper le quiz entier dans un iife (expression de fonction immédiatement invoquée), qui est une fonction qui s'exécute dès que vous la définissez. Cela gardera vos variables hors de la portée globale et garantira que votre application de quiz n'interfère pas avec les autres scripts en cours d'exécution sur la page.
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Maintenant, si vous exécutez l'application, vous pouvez sélectionner les réponses et soumettre le quiz pour obtenir les résultats.
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Comme vous pouvez le voir dans les images ci-dessus, les questions du quiz sont commandées les unes après les autres. Nous devons faire défiler vers le bas pour sélectionner nos réponses. Bien que cela ait bien l'air avec trois questions, vous pourriez commencer à avoir du mal à y répondre lorsque le nombre de questions augmente. Nous devons donc trouver un moyen de montrer une seule question à la fois à la pagination.
Pour cela, vous aurez besoin:
Alors, faisons quelques ajustements à notre code, en commençant par HTML:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
La plupart de ce balisage est le même qu'auparavant, mais maintenant nous avons ajouté des boutons de navigation et un conteneur de quiz. Le conteneur de quiz nous aidera à positionner les questions comme des couches que nous pouvons afficher et cacher.
Ensuite, à l'intérieur de la fonction Buildquiz, nous devons ajouter un élément
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Ensuite, nous pouvons utiliser un positionnement CSS pour que les diapositives s'asseyent sous forme de couches les unes sur les autres. Dans cet exemple, vous remarquerez que nous utilisons les indexes z et les transitions d'opacité pour permettre à nos diapositives de s'estomper. Voici à quoi pourrait ressembler CSS:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Maintenant, nous allons ajouter du javascript pour faire fonctionner la pagination. Comme précédemment, l'ordre est important, c'est donc la structure révisée de notre code:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Nous pouvons commencer avec certaines variables pour stocker des références à nos boutons de navigation et garder une trace de la diapositive que nous sommes. Ajoutez-les après l'appel à BuildQuiz (), comme indiqué ci-dessus:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Ensuite, nous allons écrire une fonction pour afficher une diapositive. Ajoutez cela sous les fonctions existantes (buildquiz et showResults):
<span>// we'll want to store the list of answer choices </span><span>const answers = []; </span> <span>// and for each available answer... </span><span>for(letter in currentQuestion.answers){ </span> <span>// ...add an html radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span><span>} </span> <span>// add this question and its answers to the output </span>output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span><span>); </span>
Voici ce que font les trois premières lignes:
Les lignes suivantes introduisent la logique JavaScript suivante:
Après avoir écrit notre fonction, nous pouvons immédiatement appeler ShowerLide (0) pour afficher la première diapositive. Cela devrait arriver après le code de pagination:
quizContainer<span>.innerHTML = output.join('');</span>
Ensuite, nous pouvons écrire des fonctions pour faire fonctionner les boutons de navigation. Ceux-ci vont sous la fonction Showerlide:
<span>// Functions </span><span>function buildQuiz(){ ... } </span><span>function showResults(){ ... } </span> <span>// Variables </span><span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit'); </span><span>const myQuestions = [ ... ]; </span> <span>// Kick things off </span><span>buildQuiz(); </span> <span>// Event listeners </span>submitButton<span>.addEventListener('click', showResults); </span>
Ici, nous utilisons notre fonction Showslide pour permettre à nos boutons de navigation d'afficher la diapositive précédente et la diapositive suivante.
Enfin, nous devrons accrocher les boutons de navigation à ces fonctions. Cela vient à la fin du code:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Maintenant, votre quiz a une navigation de travail!
Maintenant que vous avez une application de quiz JavaScript de base, il est temps de faire preuve de créativité et d'expérimentation.
Voici quelques suggestions que vous pouvez essayer:
Ajouter plus de questions à votre quiz JavaScript est un processus simple. Vous devez ajouter plus d'objets au tableau des questions dans votre code JavaScript. Chaque objet représente une question et a deux propriétés: le texte (la question elle-même) et les réponses (un éventail de réponses possibles). Voici un exemple de la façon d'ajouter une nouvelle question:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Dans cet exemple, nous ajoutons une question sur la capitale de la France, avec quatre réponses possibles. La bonne réponse est marquée de «correct: vrai».
La randomisation de l'ordre des questions peut rendre votre quiz plus difficile et amusant. Vous pouvez y parvenir en utilisant la méthode tri () combinée avec la fonction math.random (). Voici comment vous pouvez le faire:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Ce code trie au hasard le tableau des questions chaque fois que la page est chargée.
Ajouter une minuterie peut rendre votre quiz plus excitant. Vous pouvez facilement ajouter une minuterie au quiz à l'aide de la fonction JavaScript setInterval (). Voici un exemple simple:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Dans cet exemple, le quiz durera 30 secondes. La minuterie mettra à jour chaque seconde, et lorsque l'heure sera écoulée, une alerte sera affichée.
Vous pouvez afficher la bonne réponse en modifiant la fonction CheckansWer (). Vous pouvez ajouter une clause ELSE à l'instruction IF qui vérifie si la réponse est correcte. Voici comment vous pouvez le faire:
<span><span><span><div</span> id<span>="quiz"</span>></span><span><span></div</span>></span> </span><span><span><span><button</span> id<span>="submit"</span>></span>Submit Quiz<span><span></button</span>></span> </span><span><span><span><div</span> id<span>="results"</span>></span><span><span></div</span>></span></span>
Dans cet exemple, si la réponse de l'utilisateur est incorrecte, une alerte sera affichée avec la bonne réponse.
Vous pouvez ajouter des images à vos questions en ajoutant une propriété «image» aux objets de question. Vous pouvez ensuite utiliser cette propriété pour afficher l'image dans votre HTML. Voici un exemple:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Dans votre HTML, vous pouvez afficher l'image comme ceci:
<span>const myQuestions = [ </span> <span>{ </span> <span>question: "Who invented JavaScript?", </span> <span>answers: { </span> <span>a: "Douglas Crockford", </span> <span>b: "Sheryl Sandberg", </span> <span>c: "Brendan Eich" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which one of these is a JavaScript package manager?", </span> <span>answers: { </span> <span>a: "Node.js", </span> <span>b: "TypeScript", </span> <span>c: "npm" </span> <span>}, </span> <span>correctAnswer: "c" </span> <span>}, </span> <span>{ </span> <span>question: "Which tool can you use to ensure code quality?", </span> <span>answers: { </span> <span>a: "Angular", </span> <span>b: "jQuery", </span> <span>c: "RequireJS", </span> <span>d: "ESLint" </span> <span>}, </span> <span>correctAnswer: "d" </span> <span>} </span><span>]; </span>
Et dans votre javascript, vous pouvez mettre à jour l'attribut SRC de l'image lors de l'affichage d'une nouvelle question:
<span>function buildQuiz(){ </span> <span>// variable to store the HTML output </span> <span>const output = []; </span> <span>// for each question... </span> myQuestions<span>.forEach( </span> <span>(currentQuestion<span>, questionNumber</span>) => { </span> <span>// variable to store the list of possible answers </span> <span>const answers = []; </span> <span>// and for each available answer... </span> <span>for(letter in currentQuestion.answers){ </span> <span>// ...add an HTML radio button </span> answers<span>.push( </span> <span><span>`<label> </span></span><span><span> <input type="radio" name="question<span>${questionNumber}</span>" value="<span>${letter}</span>"> </span></span><span><span> <span>${letter}</span> : </span></span><span><span> <span>${currentQuestion.answers[letter]}</span> </span></span><span><span> </label>`</span> </span> <span>); </span> <span>} </span> <span>// add this question and its answers to the output </span> output<span>.push( </span> <span><span>`<div > <span>${currentQuestion.question}</span> </div> </span></span><span><span> <div > <span>${answers.join('')}</span> </div>`</span> </span> <span>); </span> <span>} </span> <span>); </span> <span>// finally combine our output list into one string of HTML and put it on the page </span> quizContainer<span>.innerHTML = output.join(''); </span><span>}</span>
Dans cet exemple, une image d'un éléphant sera affichée lorsque la question sera affichée.
Gestion de plusieurs réponses correctes implique de permettre à l'utilisateur de sélectionner plusieurs réponses et de vérifier si l'une des réponses sélectionnées est correcte. Par exemple, voici comment vous pouvez mettre à jour la fonction ShowResults () ci-dessus pour gérer plusieurs réponses correctes.
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
La maintenance des fichiers JavaScript et CSS séparés n'est pas indispensable. Cependant, il est généralement considéré comme une meilleure pratique car il améliore la lisibilité et la maintenabilité de votre code.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!