Pengekodan permainan kuiz JavaScript anda sendiri adalah latihan pembelajaran yang hebat. Ia mengajar anda bagaimana menangani acara, memanipulasi DOM, mengendalikan input pengguna, dan menggunakan storan tempatan untuk mengesan skor mereka. Apabila anda mempunyai kuiz asas dan berjalan, terdapat banyak kemungkinan untuk menambah fungsi yang lebih maju, seperti penomboran.
Dalam tutorial ini, saya akan membimbing anda melalui cara membuat kuiz di JavaScript bahawa anda akan dapat menyesuaikan diri dengan keperluan anda dan menambah ke laman web anda sendiri. Jika anda ingin melihat apa yang akan kami tamat, anda boleh melangkaui dan melihat kod kuiz JavaScript yang berfungsi.
Untuk pengetahuan dan cabaran JavaScript yang lebih mendalam, dapatkan buku percuma kami: belajar kod dengan JavaScript.
perkara yang perlu diperhatikan sebelum memulakan
Berikut adalah beberapa perkara yang perlu diketahui sebelum memulakan:
- Ini adalah tutorial front-end, yang bermaksud sesiapa yang tahu bagaimana untuk melihat melalui kod sumber halaman dapat mencari jawapannya. Untuk kuiz yang serius, data perlu dikendalikan melalui hujung belakang, yang berada di luar skop tutorial ini.
- Kod dalam artikel ini menggunakan sintaks JavaScript moden (ES6), yang bermaksud ia tidak akan serasi dengan mana -mana versi Internet Explorer. Walau bagaimanapun, ia akan berfungsi dengan baik pada pelayar moden, termasuk Microsoft Edge.
- Jika anda perlu menyokong penyemak imbas yang lebih tua, saya telah menulis tutorial kuiz JavaScript yang serasi dengan IE8. Atau, jika anda ingin penyegaran pada ES6, periksa kursus ini oleh Darin Haener di SitePoint Premium.
- Anda memerlukan kebiasaan dengan HTML, CSS, dan JavaScript, tetapi setiap baris kod akan dijelaskan secara individu.
Sebaik -baiknya, kami mahu soalan dan jawapan kuiz berada dalam kod JavaScript kami dan mempunyai skrip kami secara automatik menjana aplikasi kuiz. Dengan cara itu, kita tidak perlu menulis banyak markup berulang, dan kita boleh menambah dan mengeluarkan soalan dengan mudah.
Dalam contoh ini, kami akan menstrukturkan projek kami menggunakan tiga fail utama:
- fail HTML untuk antara muka pengguna asas (UI).
- fail CSS untuk gaya.
- fail JavaScript untuk mengendalikan semua fungsi interaktif.
Apabila belajar bagaimana membuat kuiz di HTML dan JavaScript, penting untuk memahami bagaimana struktur HTML berinteraksi dengan logik JavaScript. Jadi, sebagai langkah pertama, mari kita buat struktur HTML permainan kuiz JavaScript kami.
- A untuk memegang kuiz.
- a
untuk menghantar jawapan. - A
untuk memaparkan hasilnya.inilah cara yang akan kelihatan:
<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
Struktur ini adalah contoh mudah bagaimana membuat kod HTML kuiz yang berfungsi sebagai asas untuk templat kuiz JavaScript anda. Jika anda menjalankan permohonan sekarang, anda hanya akan melihat butang "Kirim Kuiz".
Langkah 2 - Inisialisasi pembolehubah JavaScript
Sekarang, kita boleh menggunakan javascript document.getElementById kaedah untuk memilih unsur -unsur HTML di atas dan menyimpan rujukan kepada mereka dalam kod kuiz JavaScript seperti di bawah:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Perkara seterusnya keperluan aplikasi kuiz kami adalah beberapa soalan untuk dipaparkan. Kami akan menggunakan literasi objek JavaScript untuk mewakili soalan individu dan array untuk memegang semua soalan yang membentuk aplikasi kuiz kami. Menggunakan array akan membuat soalan mudah untuk berulang:
<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>
Jangan ragu untuk memasukkan banyak soalan atau jawapan yang anda mahukan.
NOTA : Kerana ini adalah array, soalan -soalan akan muncul mengikut urutan yang disenaraikan. Sekiranya anda ingin menyusun soalan -soalan dalam apa jua cara sebelum menyampaikannya kepada pengguna, lihat hujung cepat kami pada menyusun pelbagai objek dalam JavaScript . Langkah 3 - Bina fungsi kuiz
Sekarang kita mempunyai senarai soalan kami, kami dapat menunjukkannya pada halaman. Untuk itu, kami akan menggunakan fungsi bernama BuildQuix (). Mari kita melalui baris JavaScript berikut mengikut baris untuk melihat bagaimana ia berfungsi:
<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> </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> `</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>
Seterusnya, kita boleh mula membina HTML untuk setiap soalan. Kita perlu gelung melalui setiap soalan seperti ini:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Sekarang mari kita lihat kod di dalam gelung kami:
<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> </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> `</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>
Seterusnya, kami akan menggunakan gelung untuk mengisi jawapan yang mungkin untuk soalan semasa. Untuk setiap pilihan, kami membuat butang radio HTML, yang kami masukkan dalam elemen
di sini, kami menggunakan literals templat, yang merupakan rentetan tetapi lebih kuat. Kami akan menggunakan ciri -ciri berikut literals template:
- keupayaan multi-line.
- tidak perlu menggunakan petikan melarikan diri dalam petikan kerana literasi templat menggunakan backticks.
- interpolasi rentetan membolehkan ekspresi JavaScript menyemai ke dalam rentetan anda seperti ini: $ {code_goes_here}.
Sebaik sahaja kami mempunyai senarai butang jawapan kami, kami boleh menolak soalan HTML dan jawapan HTML ke senarai keseluruhan output kami.
Perhatikan bahawa kami menggunakan templat literal dan beberapa ungkapan tertanam untuk terlebih dahulu membuat soalan Div dan kemudian buat div jawapan. Ekspresi gabungan mengambil senarai jawapan kami dan meletakkannya bersama dalam satu rentetan yang dapat kita hasilkan ke dalam jawapan kami div.
Sekarang bahawa kami telah menjana HTML untuk setiap soalan, kami boleh menyertainya bersama -sama dan menunjukkannya pada halaman:
<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
Sekarang, fungsi BuildQuiz kami selesai, dan anda harus dapat menjalankan aplikasi kuiz dan melihat soalan yang dipaparkan.
Walau bagaimanapun, struktur kod anda adalah penting. Oleh kerana sesuatu yang dipanggil Zon Mati Temporal, anda tidak boleh merujuk pelbagai soalan anda sebelum ia ditakrifkan. untuk rekap, ini adalah struktur yang betul:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Pada ketika ini, kami ingin membina fungsi pameran kami untuk gelung atas jawapan, periksa mereka, dan tunjukkan hasilnya. Ini adalah bahagian penting dari mana -mana pelaksanaan JavaScript permainan kuiz, kerana ia memberikan maklum balas segera kepada pengguna berdasarkan prestasi mereka.
inilah fungsi, yang akan kita lalui secara terperinci seterusnya:
<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>
<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> </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> `</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>
kami akan menggunakan 3 langkah untuk itu:
- mengendalikan apa yang berlaku jika jawapannya betul.
- mengendalikan apa yang berlaku jika jawapannya salah.
- mari kita lihat lebih dekat bagaimana kita mencari jawapan yang dipilih dalam html kami:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Dalam baris seterusnya, kami menentukan pemilih CSS yang akan membolehkan kami mencari butang radio yang diperiksa.
Kemudian kami menggunakan QuerySelector JavaScript untuk mencari pemilih CSS kami dalam jawapan yang telah ditetapkan sebelumnya. Pada dasarnya, ini bermakna kita akan mencari butang radio jawapan yang diperiksa.
Akhirnya, kita boleh mendapatkan nilai jawapan itu dengan menggunakan. Nilai.
berurusan dengan input pengguna yang tidak lengkap
Bagaimana jika pengguna telah meninggalkan jawapan kosong? Dalam kes ini, menggunakan. Nilai akan menyebabkan kesilapan kerana anda tidak boleh mendapatkan nilai sesuatu yang tidak ada di sana. Untuk menyelesaikannya, kami telah menambah ||, yang bermaksud "atau", dan {}, yang merupakan objek kosong. Sekarang, pernyataan keseluruhan mengatakan:
- Dapatkan rujukan kepada elemen jawapan yang dipilih atau, jika itu tidak wujud, gunakan objek kosong.
- Dapatkan nilai apa sahaja yang ada dalam pernyataan pertama.
Akibatnya, nilai itu akan menjadi jawapan pengguna atau tidak ditentukan, yang bermaksud pengguna boleh melangkaui soalan tanpa merosakkan aplikasi kuiz kami.
Menilai jawapan dan memaparkan hasil
Kenyataan seterusnya dalam gelung pemeriksaan jawapan kami akan membolehkan kami mengendalikan jawapan yang betul dan tidak betul.
<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
Jika jawapan pengguna sepadan dengan pilihan yang betul, tingkatkan bilangan jawapan yang betul dengan satu dan (pilihan) warna set pilihan hijau. Sekiranya jawapannya salah atau kosong, warna pilihan jawapan merah (sekali lagi, pilihan).
Sebaik sahaja gelung pemeriksa jawapan selesai, kita dapat menunjukkan berapa banyak soalan pengguna mendapat hak:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Dan sekarang kami mempunyai kuiz JavaScript yang bekerja!
Jika anda mahu, anda boleh membungkus seluruh kuiz dalam IIFE (dengan segera menggunakan ekspresi fungsi), yang merupakan fungsi yang berjalan sebaik sahaja anda menentukannya. Ini akan memastikan pembolehubah anda keluar dari skop global dan memastikan aplikasi kuiz anda tidak mengganggu skrip lain yang berjalan di halaman.
<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>
Sekarang anda sudah siap! Jangan ragu untuk menambah atau membuang soalan dan jawapan dan gaya kuiz tetapi anda suka.
Sekarang, jika anda menjalankan aplikasi, anda boleh memilih jawapan dan menyerahkan kuiz untuk mendapatkan hasilnya.
Langkah 5 - Menambah Gaya
Sejak sekarang kita mempunyai kuiz kerja, mari kita menjadikannya lebih mesra pengguna dengan menambahkan beberapa gaya. Walau bagaimanapun, saya tidak akan pergi ke butiran setiap gaya. Anda boleh menyalin kod di bawah secara langsung ke dalam fail Styles.css.
<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> </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> `</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>
Langkah 6 - Melaksanakan Pagination
Seperti yang anda lihat dalam imej di atas, soalan dalam kuiz diperintahkan satu demi satu. Kami perlu tatal ke bawah untuk memilih jawapan kami. Walaupun ini kelihatan baik dengan tiga soalan, anda mungkin mula bergelut untuk menjawabnya apabila bilangan soalan meningkat. Oleh itu, kita perlu mencari cara untuk menunjukkan hanya satu soalan pada satu masa melalui penomboran.
Untuk itu, anda perlu:
- cara untuk menunjukkan dan menyembunyikan soalan.
- Butang untuk menavigasi kuiz.
Jadi, mari buat beberapa penyesuaian pada kod kami, bermula dengan HTML:
<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
Kebanyakan markup itu sama seperti sebelumnya, tetapi sekarang kami telah menambah butang navigasi dan bekas kuiz. Bekas kuiz akan membantu kita meletakkan soalan sebagai lapisan yang dapat kita tunjukkan dan menyembunyikan.
Seterusnya, di dalam fungsi BuildQuiz, kita perlu menambah elemen
dengan slaid kelas untuk memegang soalan dan jawapan yang baru kita buat:<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Seterusnya, kita boleh menggunakan beberapa kedudukan CSS untuk membuat slaid duduk sebagai lapisan di atas satu sama lain. Dalam contoh ini, anda akan melihat kami menggunakan z-indeks dan peralihan kelegapan untuk membolehkan slaid kami memudar masuk dan keluar. Inilah yang kelihatan seperti 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>
Sekarang kita akan menambah beberapa JavaScript untuk membuat kerja penomboran. Seperti dahulu, perintah itu penting, jadi ini adalah struktur yang disemak semula kod kami:
<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> </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> `</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>
kita boleh mulakan dengan beberapa pembolehubah untuk menyimpan rujukan ke butang navigasi kami dan menjejaki slaid yang kami lakukan. Tambahkan ini selepas panggilan ke BuildQuiz (), seperti yang ditunjukkan di atas:
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Seterusnya kami akan menulis fungsi untuk menunjukkan slaid. Tambahkan ini di bawah fungsi yang sedia ada (BuildQuiz dan 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> </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> `</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>
inilah yang dilakukan oleh tiga baris pertama:
- Sembunyikan slaid semasa dengan mengeluarkan kelas slaid aktif.
- Tunjukkan slaid baru dengan menambahkan kelas slaid aktif.
- Kemas kini nombor slaid semasa.
baris seterusnya memperkenalkan logik JavaScript berikut:
- Jika kita berada di slaid pertama, sembunyikan butang slaid sebelumnya . Jika tidak, tunjukkan butang.
- Jika kita berada di slaid terakhir, sembunyikan butang slaid seterusnya dan tunjukkan butang hantar . Jika tidak, tunjukkan butang slaid seterusnya dan sembunyikan hantar butang.
Selepas kami menulis fungsi kami, kami boleh segera memanggil Showlide (0) untuk menunjukkan slaid pertama. Ini akan datang selepas kod penomboran:
quizContainer<span>.innerHTML = output.join('');</span>
Seterusnya kita boleh menulis fungsi untuk membuat butang navigasi berfungsi. Ini pergi di bawah fungsi showlide:
<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>
di sini, kami menggunakan fungsi pameran kami untuk membolehkan butang navigasi kami menunjukkan slaid sebelumnya dan slaid seterusnya.
Akhirnya, kita perlu mengaitkan butang navigasi sehingga fungsi ini. Ini datang pada akhir kod:
<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
sekarang kuiz anda telah bekerja navigasi!
Apa yang akan datang?
Sekarang anda mempunyai aplikasi kuiz JavaScript asas, sudah tiba masanya untuk mendapatkan kreatif dan eksperimen.
Berikut adalah beberapa cadangan yang boleh anda cuba:
- Cuba cara yang berbeza untuk menjawab jawapan yang betul atau jawapan yang salah.
- gaya kuiz dengan baik.
- tambah bar kemajuan.
- biarkan pengguna menyemak jawapan sebelum mengemukakan.
- Beri pengguna ringkasan jawapan mereka selepas mereka menyerahkannya.
- Kemas kini navigasi untuk membiarkan pengguna melangkau ke mana -mana nombor soalan.
- Buat mesej tersuai untuk setiap peringkat hasil. Sebagai contoh, jika seseorang mencatatkan 8/10 atau lebih tinggi, panggil mereka kuiz ninja.
- Tambahkan butang untuk berkongsi hasil di media sosial.
- Simpan skor tinggi anda menggunakan LocalStorage.
- Tambahkan pemasa undur untuk melihat sama ada orang boleh mengalahkan jam.
- Gunakan konsep dari artikel ini ke kegunaan lain, seperti penganggar harga projek, atau kuiz "yang mana-karakter-anda".
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Dalam contoh ini, kami menambah soalan mengenai modal Perancis, dengan empat jawapan yang mungkin. Jawapan yang betul ditandakan dengan 'betul: benar'.<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>
Kod ini secara rawak akan menyusun pelbagai soalan setiap kali halaman dimuatkan.<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> </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> `</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>
Dalam contoh ini, kuiz akan berlangsung selama 30 saat. Pemasa akan mengemas kini setiap saat, dan apabila waktunya sudah selesai, amaran akan ditunjukkan.<span><span><span><div> id<span>="quiz"</span>><span><span></span></span> </div></span>></span> </span><span><span><span><button> id<span>="submit"</span>></button></span>Submit Quiz<span><span></span>></span> </span><span><span><span><div> id<span>="results"</span>><span><span></span></span> </div></span>></span></span></span>
Dalam contoh ini, jika jawapan pengguna tidak betul, amaran akan ditunjukkan dengan jawapan yang betul.
bagaimana saya boleh menambahkan imej kepada soalan?
Anda boleh menambah imej ke soalan anda dengan menambahkan harta 'imej' ke objek soalan. Anda kemudian boleh menggunakan harta ini untuk memaparkan imej dalam HTML anda. Berikut adalah contoh:
<span>const quizContainer = document.getElementById('quiz'); </span><span>const resultsContainer = document.getElementById('results'); </span><span>const submitButton = document.getElementById('submit');</span>
Di HTML anda, anda boleh memaparkan imej seperti ini:
<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>
Dan dalam javascript anda, anda boleh mengemas kini atribut SRC imej semasa memaparkan soalan baru:
<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> </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> `</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>
Dalam contoh ini, imej gajah akan dipaparkan apabila soalan ditunjukkan.
bagaimana saya mengendalikan pelbagai jawapan yang betul dalam kuiz javascript?
Mengendalikan pelbagai jawapan yang betul melibatkan membolehkan pengguna memilih lebih daripada satu jawapan dan menyemak jika mana -mana jawapan yang dipilih adalah betul. Sebagai contoh, inilah cara anda boleh mengemas kini fungsi showResults di atas () untuk mengendalikan pelbagai jawapan yang betul.
myQuestions<span>.forEach( (currentQuestion<span>, questionNumber</span>) => { </span> <span>// the code we want to run for each question goes here </span><span>});</span>
Adakah perlu untuk mengekalkan fail JavaScript yang berasingan dan fail CSS?
Mengekalkan fail JavaScript dan CSS yang berasingan bukanlah suatu keharusan. Walau bagaimanapun, ia secara amnya dianggap sebagai amalan terbaik kerana ia meningkatkan kebolehbacaan dan pemeliharaan kod anda.
- a
Atas ialah kandungan terperinci Cara Membuat Kuiz JavaScript Mudah: Tutorial Kod. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kuasa rangka kerja JavaScript terletak pada pembangunan yang memudahkan, meningkatkan pengalaman pengguna dan prestasi aplikasi. Apabila memilih rangka kerja, pertimbangkan: 1.

Pengenalan Saya tahu anda mungkin merasa pelik, apa sebenarnya yang perlu dilakukan oleh JavaScript, C dan penyemak imbas? Mereka seolah -olah tidak berkaitan, tetapi sebenarnya, mereka memainkan peranan yang sangat penting dalam pembangunan web moden. Hari ini kita akan membincangkan hubungan rapat antara ketiga -tiga ini. Melalui artikel ini, anda akan mempelajari bagaimana JavaScript berjalan dalam penyemak imbas, peranan C dalam enjin pelayar, dan bagaimana mereka bekerjasama untuk memacu rendering dan interaksi laman web. Kita semua tahu hubungan antara JavaScript dan penyemak imbas. JavaScript adalah bahasa utama pembangunan front-end. Ia berjalan secara langsung di penyemak imbas, menjadikan laman web jelas dan menarik. Adakah anda pernah tertanya -tanya mengapa Javascr

Node.js cemerlang pada I/O yang cekap, sebahagian besarnya terima kasih kepada aliran. Aliran memproses data secara berperingkat, mengelakkan beban memori-ideal untuk fail besar, tugas rangkaian, dan aplikasi masa nyata. Menggabungkan sungai dengan keselamatan jenis typescript mencipta powe

Perbezaan prestasi dan kecekapan antara Python dan JavaScript terutamanya dicerminkan dalam: 1) sebagai bahasa yang ditafsirkan, Python berjalan perlahan tetapi mempunyai kecekapan pembangunan yang tinggi dan sesuai untuk pembangunan prototaip pesat; 2) JavaScript adalah terhad kepada benang tunggal dalam penyemak imbas, tetapi I/O multi-threading dan asynchronous boleh digunakan untuk meningkatkan prestasi dalam node.js, dan kedua-duanya mempunyai kelebihan dalam projek sebenar.

JavaScript berasal pada tahun 1995 dan dicipta oleh Brandon Ike, dan menyedari bahasa itu menjadi C. 1.C Language menyediakan keupayaan pengaturcaraan prestasi tinggi dan sistem untuk JavaScript. 2. Pengurusan memori JavaScript dan pengoptimuman prestasi bergantung pada bahasa C. 3. Ciri lintas platform bahasa C membantu JavaScript berjalan dengan cekap pada sistem operasi yang berbeza.

JavaScript berjalan dalam penyemak imbas dan persekitaran Node.js dan bergantung pada enjin JavaScript untuk menghuraikan dan melaksanakan kod. 1) menjana pokok sintaks abstrak (AST) di peringkat parsing; 2) menukar AST ke bytecode atau kod mesin dalam peringkat penyusunan; 3) Laksanakan kod yang disusun dalam peringkat pelaksanaan.

Trend masa depan Python dan JavaScript termasuk: 1. Kedua -duanya akan terus mengembangkan senario aplikasi dalam bidang masing -masing dan membuat lebih banyak penemuan dalam prestasi.

Kedua -dua pilihan Python dan JavaScript dalam persekitaran pembangunan adalah penting. 1) Persekitaran pembangunan Python termasuk Pycharm, Jupyternotebook dan Anaconda, yang sesuai untuk sains data dan prototaip cepat. 2) Persekitaran pembangunan JavaScript termasuk node.js, vscode dan webpack, yang sesuai untuk pembangunan front-end dan back-end. Memilih alat yang betul mengikut keperluan projek dapat meningkatkan kecekapan pembangunan dan kadar kejayaan projek.


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

MinGW - GNU Minimalis untuk Windows
Projek ini dalam proses untuk dipindahkan ke osdn.net/projects/mingw, anda boleh terus mengikuti kami di sana. MinGW: Port Windows asli bagi GNU Compiler Collection (GCC), perpustakaan import yang boleh diedarkan secara bebas dan fail pengepala untuk membina aplikasi Windows asli termasuk sambungan kepada masa jalan MSVC untuk menyokong fungsi C99. Semua perisian MinGW boleh dijalankan pada platform Windows 64-bit.

EditPlus versi Cina retak
Saiz kecil, penyerlahan sintaks, tidak menyokong fungsi gesaan kod

Muat turun versi mac editor Atom
Editor sumber terbuka yang paling popular

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Inggeris
Disyorkan: Versi Win, menyokong gesaan kod!
