02-04 Let's Practice Vocab
TOPIC: setNextQuestion()関数の定義
CHECK
setNextQuestion()
の中にあるshowQuestion()
- ループしている Answer の correct プロパティが true なら-- ex.
{text: "considered", correct: true}
- div Element の中にある最初の child つまり
<div class="answer-box">
に data-correct="true"
を追加する。dataset
は HTML の新しい概念だからじっくり理解をしよう!
- それぞれの 4 択選択肢 Answer Element に EventListener をつけよう -- クリックをされたら
selectAnswer()
を呼び出す
selectAnswer()
console.log
でクリックされた Element を表示し、確認をしよう
console.log
でクリックされた Element にdataset.correct
が追加されているかを確認しよう
const startBtnEl = document.getElementById("start-btn")
const questionAnswersContainerEl = document.getElementById(
"question-answers-container"
)
const headerContainerEl = document.getElementById("header-container")
const headerSmallEl = document.getElementById("header-small")
const nextBtnEl = document.getElementById("next-btn")
const answersEl = document.getElementById("answers")
const jpTextEl = document.getElementById("jp-text")
const enTextEl = document.getElementById("en-text")
let shuffledQuestions
let currentQuestionIndex
startBtnEl.addEventListener("click", startGame)
function startGame() {
startBtnEl.classList.add("hide")
shuffledQuestions = questions.sort(() => Math.random() - 0.5)
currentQuestionIndex = 0
questionAnswersContainerEl.classList.remove("hide")
headerContainerEl.style["display"] = "none"
headerSmallEl.classList.remove("hide")
setNextQuestion()
}
function setNextQuestion() {
resetState()
showQuestion(shuffledQuestions[currentQuestionIndex])
}
function resetState() {
nextBtnEl.classList.add("hide")
while (answersEl.children[0]) {
answersEl.removeChild(answersEl.children[0])
}
}
function showQuestion(question) {
jpTextEl.innerText = question.jp
enTextEl.innerText = question.en
question.answers.forEach((answer, idx) => {
const el = `
<div class="answer-box">
<div class="answer-number">
<span>${idx + 1}</span>
</div>
<h3 id="answer1" class="answer" data-number="1">${answer.text}</h3>
</div>
`
const div = document.createElement("div")
div.classList.add("answer-container")
div.innerHTML = el
if (answer.correct) {
div.children[0].dataset.correct = answer.correct
}
div.addEventListener("click", selectAnswer)
answersEl.appendChild(div)
})
}
function selectAnswer(e) {
console.log("selected", e.currentTarget.children[0])
console.log("correct", e.currentTarget.children[0].dataset.correct)
}
const questions = [
{
target_num: 1,
jp: "現代の科学技術は私たちの生活を大いに[向上させた]。",
en: "Modern technology has greatly ( ) our lives.",
answers: [
{
text: "considered",
correct: false,
},
{
text: "improved",
correct: true,
},
{
text: "concerned",
correct: false,
},
{
text: "included",
correct: false,
},
],
},
{
target_num: 2,
jp: "生活の質はエネルギー使用に直接[関連し]てはいない。",
en: "The quality of life is not directly ( ) to energy use.",
answers: [
{
text: "produced",
correct: false,
},
{
text: "related",
correct: true,
},
{
text: "provided",
correct: false,
},
{
text: "improved",
correct: false,
},
],
},
{
target_num: 3,
jp: "言語はすべて私たちに社会に関する貴重な情報を[与える]ことができる。",
en: "All languages can ( ) us with valuable information about society.",
answers: [
{
text: "provide",
correct: true,
},
{
text: "include",
correct: false,
},
{
text: "relate",
correct: false,
},
{
text: "concern",
correct: false,
},
],
},
]