Tạo mini game Quiz nhiều câu hỏi bằng JavaScript thuần

Muốn tạo một trò chơi nhỏ ngay trên bài viết WordPress để kiểm tra kiến thức hoặc tăng tương tác? Bài viết này sẽ hướng dẫn bạn cách tạo một hệ thống quiz nhiều câu hỏi, chấm điểm và hiện kết quả – hoàn toàn bằng JavaScript thuần và HTML.

Tạo mini game Quiz nhiều câu hỏi bằng JavaScript thuần

1. Khối HTML Quiz

<div id="multi-quiz" class="uk-card uk-card-default uk-card-body uk-margin">
  <h3 id="quiz-question"></h3>
  <ul id="quiz-options" class="uk-list"></ul>
  <p id="quiz-feedback" class="uk-text-bold uk-margin-top"></p>
  <button id="next-question" class="uk-button uk-button-primary uk-margin-top" style="display:none;" onclick="nextQuestion()">Câu tiếp theo</button>
  <p id="quiz-result" class="uk-text-center uk-margin-top uk-text-lead"></p>
</div>

2. JavaScript điều khiển logic

// Danh sách câu hỏi
const questions = [
  {
    question: "WordPress được viết bằng ngôn ngữ gì?",
    options: ["Python", "PHP", "Ruby", "Java"],
    answer: 1
  },
  {
    question: "Cơ sở dữ liệu mặc định của WordPress là?",
    options: ["PostgreSQL", "MongoDB", "MySQL", "SQLite"],
    answer: 2
  },
  {
    question: "Hàm nào dùng để truy vấn bài viết trong WordPress?",
    options: ["get_post()", "WP_Query", "fetch_post()", "query_post()"],
    answer: 1
  }
];

let currentQuestion = 0;
let score = 0;

function renderQuestion() {
  const q = questions[currentQuestion];
  document.getElementById("quiz-question").innerText = q.question;

  const optionsEl = document.getElementById("quiz-options");
  optionsEl.innerHTML = "";

  q.options.forEach((opt, index) => {
    const li = document.createElement("li");
    const btn = document.createElement("button");
    btn.className = "uk-button uk-button-default uk-margin-small-bottom";
    btn.innerText = opt;
    btn.onclick = () => checkAnswer(index);
    li.appendChild(btn);
    optionsEl.appendChild(li);
  });

  document.getElementById("quiz-feedback").innerText = "";
  document.getElementById("next-question").style.display = "none";
}

function checkAnswer(selected) {
  const correct = questions[currentQuestion].answer;
  const feedback = document.getElementById("quiz-feedback");

  const buttons = document.querySelectorAll("#quiz-options button");
  buttons.forEach((btn, i) => {
    btn.disabled = true;
    if (i === correct) btn.classList.add("uk-button-success");
    if (i === selected && i !== correct) btn.classList.add("uk-button-danger");
  });

  if (selected === correct) {
    feedback.innerText = "Chính xác!";
    feedback.className = "uk-text-success uk-text-bold";
    score++;
  } else {
    feedback.innerText = "Sai rồi!";
    feedback.className = "uk-text-danger uk-text-bold";
  }

  document.getElementById("next-question").style.display = "inline-block";
}

function nextQuestion() {
  currentQuestion++;
  if (currentQuestion < questions.length) {
    renderQuestion();
  } else {
    showResult();
  }
}

function showResult() {
  document.getElementById("multi-quiz").innerHTML = `
    <h3 class="uk-text-center">Hoàn thành Quiz</h3>
    <p class="uk-text-center uk-text-lead">Bạn trả lời đúng <strong>${score} / ${questions.length}</strong> câu hỏi.</p>
    <p class="uk-text-center"><a class="uk-button uk-button-default" href="#" onclick="restartQuiz(); return false;">Làm lại</a></p>
  `;
}

function restartQuiz() {
  currentQuestion = 0;
  score = 0;
  const container = document.getElementById("multi-quiz");
  container.innerHTML = `
    <h3 id="quiz-question"></h3>
    <ul id="quiz-options" class="uk-list"></ul>
    <p id="quiz-feedback" class="uk-text-bold uk-margin-top"></p>
    <button id="next-question" class="uk-button uk-button-primary uk-margin-top" style="display:none;" onclick="nextQuestion()">Câu tiếp theo</button>
    <p id="quiz-result" class="uk-text-center uk-margin-top uk-text-lead"></p>
  `;
  renderQuestion();
}

// Bắt đầu quiz
renderQuestion();

3. Kết luận

Với một đoạn JavaScript đơn giản và vài dòng HTML, bạn đã có một hệ thống mini quiz nhiều câu hỏi tích hợp ngay trong bài viết hoặc trang WordPress. Cách này không cần plugin, có thể tùy biến để chấm điểm, lưu tiến độ, hay thậm chí là chia sẻ kết quả lên mạng xã hội.

Gợi ý: Bạn có thể lưu quiz dưới dạng <script type="application/json"> để nạp dữ liệu động, hoặc dùng shortcode để dễ quản lý nhiều quiz.

Bình Luận


  • Không có bình luận.