Kabar Terkini

coba

// Data kuis sudah didefinisikan dalam HTML // Inisialisasi variabel let currentQuestion = 0; let userAnswers = []; let score = 0; // Ambil referensi elemen DOM const startButton = document.getElementById('startButton'); const quizContainer = document.getElementById('quizContainer'); const quizInfo = document.querySelector('.quiz-info'); const questionContainer = document.getElementById('questionContainer'); const questionCounter = document.getElementById('questionCounter'); const progressBar = document.getElementById('progressBar'); const prevButton = document.getElementById('prevButton'); const nextButton = document.getElementById('nextButton'); const submitButton = document.getElementById('submitButton'); const resultsContainer = document.getElementById('resultsContainer'); const scoreDisplay = document.getElementById('scoreDisplay'); const resultInfo = document.getElementById('resultInfo'); const reviewContainer = document.getElementById('reviewContainer'); const sendButton = document.getElementById('sendButton'); const toastMessage = document.getElementById('toastMessage'); // Inisialisasi userAnswers dengan nilai default for (let i = 0; i < quizData.length; i++) { if (quizData[i].type === "multiple-choice" || quizData[i].type === "complex-mcq") { userAnswers[i] = []; } else if (quizData[i].type === "matching") { userAnswers[i] = Array(quizData[i].items.length).fill(""); } else if (quizData[i].type === "true-false") { userAnswers[i] = Array(quizData[i].statements.length).fill(""); } } // Event listener untuk tombol mulai kuis startButton.addEventListener('click', startQuiz); // Event listener untuk tombol navigasi prevButton.addEventListener('click', goToPreviousQuestion); nextButton.addEventListener('click', goToNextQuestion); submitButton.addEventListener('click', submitQuiz); sendButton.addEventListener('click', sendResults); // Fungsi untuk memulai kuis function startQuiz() { quizInfo.style.display = 'none'; quizContainer.style.display = 'block'; loadQuestion(currentQuestion); updateProgressBar(); } // Fungsi untuk memuat pertanyaan function loadQuestion(index) { const question = quizData[index]; questionCounter.textContent = `Soal ${index + 1} dari ${quizData.length}`; let html = `
${index + 1}. ${question.question}
`; if (question.type === "multiple-choice") { html += `
`; question.options.forEach((option, i) => { const checked = userAnswers[index] === i ? "checked" : ""; html += `
`; }); html += `
`; } else if (question.type === "complex-mcq") { html += `
`; html += `
Pilih 2 jawaban yang benar
`; html += `
`; question.options.forEach((option, i) => { const checked = userAnswers[index].includes(i) ? "checked" : ""; html += `
`; }); html += `
`; } else if (question.type === "matching") { html += `
`; question.items.forEach((item, i) => { const selectedValue = userAnswers[index][i]; html += `
${item}
`; }); html += `
`; } else if (question.type === "true-false") { html += ``; question.statements.forEach((statement, i) => { const trueChecked = userAnswers[index][i] === "true" ? "checked" : ""; const falseChecked = userAnswers[index][i] === "false" ? "checked" : ""; html += ` `; }); html += `
Pernyataan Benar/Salah
${statement}  
`; } questionContainer.innerHTML = html; // Tambahkan event listener untuk pilihan-pilihan jawaban if (question.type === "multiple-choice") { document.querySelectorAll(`input[name="q${index}"]`).forEach(option => { option.addEventListener('change', (e) => { userAnswers[index] = parseInt(e.target.value); }); }); } else if (question.type === "complex-mcq") { document.querySelectorAll(`input[name="q${index}"]`).forEach(option => { option.addEventListener('change', (e) => { const optionIndex = parseInt(e.target.value); if (e.target.checked) { // Jika checkbox dicentang, tambahkan ke jawaban if (!userAnswers[index].includes(optionIndex)) { userAnswers[index].push(optionIndex); } // Batasi hanya 2 pilihan if (userAnswers[index].length > 2) { const firstChecked = document.getElementById(`q${index}o${userAnswers[index][0]}`); firstChecked.checked = false; userAnswers[index].shift(); } } else { // Jika checkbox tidak dicentang, hapus dari jawaban userAnswers[index] = userAnswers[index].filter(item => item !== optionIndex); } }); }); } else if (question.type === "matching") { question.items.forEach((_, i) => { const select = document.getElementById(`match${index}_${i}`); select.addEventListener('change', (e) => { userAnswers[index][i] = e.target.value; }); }); } else if (question.type === "true-false") { question.statements.forEach((_, i) => { document.querySelectorAll(`input[name="tf${index}_${i}"]`).forEach(option => { option.addEventListener('change', (e) => { userAnswers[index][i] = e.target.value; }); }); }); } // Update tombol navigasi updateNavigationButtons(); } // Fungsi untuk memperbarui tombol navigasi function updateNavigationButtons() { if (currentQuestion === 0) { prevButton.classList.add('btn-disabled'); prevButton.disabled = true; } else { prevButton.classList.remove('btn-disabled'); prevButton.disabled = false; } if (currentQuestion === quizData.length - 1) { nextButton.style.display = 'none'; submitButton.style.display = 'inline-block'; } else { nextButton.style.display = 'inline-block'; submitButton.style.display = 'none'; } } // Fungsi untuk memperbarui progress bar function updateProgressBar() { const progress = ((currentQuestion + 1) / quizData.length) * 100; progressBar.style.width = `${progress}%`; } // Fungsi untuk pergi ke pertanyaan sebelumnya function goToPreviousQuestion() { if (currentQuestion > 0) { currentQuestion--; loadQuestion(currentQuestion); updateProgressBar(); } } // Fungsi untuk pergi ke pertanyaan berikutnya function goToNextQuestion() { if (currentQuestion < quizData.length - 1) { currentQuestion++; loadQuestion(currentQuestion); updateProgressBar(); } } // Fungsi untuk menghitung skor function calculateScore() { score = 0; quizData.forEach((question, index) => { if (question.type === "multiple-choice") { if (userAnswers[index] === question.correctAnswer) { score++; } } else if (question.type === "complex-mcq") { // Untuk soal kompleks, jawaban harus persis sama (2 jawaban benar) const correctAnswers = question.correctAnswers; const userAnswer = userAnswers[index].sort(); if (userAnswer.length === correctAnswers.length && userAnswer.every((value, i) => value === correctAnswers[i])) { score++; } } else if (question.type === "matching") { // Untuk soal menjodohkan, setiap pasangan benar mendapat poin let correctMatches = 0; question.correctAnswers.forEach((correctAnswer, i) => { if (userAnswers[index][i] == correctAnswer) { correctMatches++; } }); // Jika semua pasangan benar, beri nilai penuh if (correctMatches === question.items.length) { score++; } } else if (question.type === "true-false") { // Untuk soal benar/salah, setiap pernyataan benar mendapat poin let correctStatements = 0; question.correctAnswers.forEach((correctAnswer, i) => { if (userAnswers[index][i] === correctAnswer.toString()) { correctStatements++; } }); // Jika semua pernyataan benar, beri nilai penuh if (correctStatements === question.statements.length) { score++; } } }); return score; } // Fungsi untuk menampilkan toast message function showToast(message) { toastMessage.textContent = message; toastMessage.className = "show"; // Setelah 3 detik, hilangkan toast setTimeout(() => { toastMessage.className = toastMessage.className.replace("show", ""); }, 3000); } // Fungsi untuk submit kuis function submitQuiz() { // Hitung skor score = calculateScore(); // Tampilkan skor scoreDisplay.textContent = `${score}/${quizData.length}`; resultInfo.textContent = `Jawaban benar: ${score} dari ${quizData.length} soal`; // Tampilkan review jawaban generateReview(); // Tampilkan halaman hasil quizContainer.style.display = 'none'; resultsContainer.style.display = 'block'; } // Fungsi untuk membuat review jawaban function generateReview() { let reviewHTML = ''; quizData.forEach((question, index) => { reviewHTML += `
`; reviewHTML += `
${index + 1}. ${question.question}
`; if (question.type === "multiple-choice") { const userAnswerIndex = userAnswers[index]; const isCorrect = userAnswerIndex === question.correctAnswer; reviewHTML += `
`; reviewHTML += `Jawaban Anda: ${userAnswerIndex !== undefined && userAnswerIndex !== null ? question.options[userAnswerIndex] : 'Tidak dijawab'}`; if (!isCorrect) { reviewHTML += `
Jawaban Benar: ${question.options[question.correctAnswer]}`; } reviewHTML += `
`; } else if (question.type === "complex-mcq") { const userAnswer = userAnswers[index]; const correctAnswers = question.correctAnswers; const isCorrect = userAnswer.length === correctAnswers.length && userAnswer.sort().every((value, i) => value === correctAnswers.sort()[i]); reviewHTML += `
`; reviewHTML += `Jawaban Anda: ${userAnswer.map(index => question.options[index]).join(', ') || 'Tidak dijawab'}`; if (!isCorrect) { reviewHTML += `
Jawaban Benar: ${correctAnswers.map(index => question.options[index]).join(', ')}`; } reviewHTML += `
`; } else if (question.type === "matching") { const userAnswer = userAnswers[index]; let allCorrect = true; reviewHTML += `
`; question.items.forEach((item, i) => { const userOption = userAnswer[i] !== "" ? question.options[userAnswer[i]] : "Tidak dijawab"; const correctOption = question.options[question.correctAnswers[i]]; const isItemCorrect = userAnswer[i] == question.correctAnswers[i]; if (!isItemCorrect) allCorrect = false; reviewHTML += `
`; reviewHTML += `"${item}" → ${userOption}`; if (!isItemCorrect) { reviewHTML += ` (Benar: ${correctOption})`; } reviewHTML += `
`; }); reviewHTML += `
`; } else if (question.type === "true-false") { const userAnswer = userAnswers[index]; let allCorrect = true; reviewHTML += `
`; question.statements.forEach((statement, i) => { const userChoice = userAnswer[i] === "" ? "Tidak dijawab" : (userAnswer[i] === "true" ? "Benar" : "Salah"); const correctChoice = question.correctAnswers[i] ? "Benar" : "Salah"; const isItemCorrect = userAnswer[i] === question.correctAnswers[i].toString(); if (!isItemCorrect) allCorrect = false; reviewHTML += `
`; reviewHTML += `"${statement}" → ${userChoice}`; if (!isItemCorrect) { reviewHTML += ` (Benar: ${correctChoice})`; } reviewHTML += `
`; }); reviewHTML += `
`; } // Tambahkan penjelasan if (question.explanation) { reviewHTML += `
`; reviewHTML += `
Penjelasan:
`; reviewHTML += `${question.explanation}`; reviewHTML += `
`; } reviewHTML += `
`; }); reviewContainer.innerHTML = reviewHTML; } // Fungsi untuk mengirim hasil function sendResults() { const studentName = document.getElementById('studentName').value.trim(); const className = document.getElementById('className').value.trim(); const schoolName = document.getElementById('schoolName').value.trim(); const studentPhone = document.getElementById('studentPhone').value.trim(); // Validasi input if (!studentName || !className || !schoolName || !studentPhone) { showToast('Harap isi semua data terlebih dahulu!'); return; } // Validasi nomor WhatsApp (harus diawali dengan 62) if (!studentPhone.startsWith('62') || !/^\d+$/.test(studentPhone)) { showToast('Format nomor WhatsApp tidak valid. Harus diawali dengan 62!'); return; } // Format pesan WhatsApp const scorePercentage = Math.round((score / quizData.length) * 100); let message = `Hasil Kuis Bab 5 - Pengembangan Ide dan Cerita Sederhana%0A%0A`; message += `Nama: ${studentName}%0A`; message += `Kelas: ${className}%0A`; message += `Sekolah: ${schoolName}%0A%0A`; message += `Skor: ${score}/${quizData.length} (${scorePercentage}%)%0A%0A`; // Buka WhatsApp dengan pesan yang sudah disiapkan window.open(`https://wa.me/${studentPhone}?text=${message}`, '_blank'); } // Inisialisasi aplikasi dengan menonaktifkan tombol prevButton pada awal kuis window.onload = function() { prevButton.classList.add('btn-disabled'); prevButton.disabled = true; };

No comments

Featured Post

Materi Pembelajaran Mendalam - Acuan untuk Membuat RPP - Modul Ajar (MA) Kurmer versi 2025 (TERBARU)

  Materi Pembelajaran Mendalam  Pendidikan Bermutu untuk Semua Acuan untuk Membuat RPP - Modul Ajar (MA) Kurmer versi 2025 (TERBARU) Pendeka...