Contact For Support
+8801718007683 (Whatsapp/Telegram/Viber/WeChat)
.next-btn:active transform: scale(0.97);
// 結果画面を表示 function showResultScreen() const totalQuestions = currentQuestions.length; const percentage = Math.round((userScore / totalQuestions) * 100); let message = ""; if (percentage >= 80) message = "素晴らしい! N3レベル高いです! 🌟"; else if (percentage >= 60) message = "あと少し! 復習しましょう! 📖"; else message = "もう一度チャレンジして弱点を克服しよう! 💪";
// DOM elements const dynamicContainer = document.getElementById('dynamicContent'); const scoreSpan = document.getElementById('scoreValue'); const currentQNumberSpan = document.getElementById('currentQNumber'); const totalQNumberSpan = document.getElementById('totalQNumber'); nihongo challenge n3
.question-text background: #fef3da; padding: 1.2rem; border-radius: 2rem; font-size: 1.6rem; font-weight: 600; text-align: center; margin-bottom: 2rem; box-shadow: inset 0 1px 4px #ede0c2, 0 4px 8px rgba(0,0,0,0.05); word-break: break-word; color: #2c221b; line-height: 1.4;
// すべてのオプションボタンを再レンダリング (状態反映) renderQuestionWithFeedback(selectedIdx, correctIdx, explanationText, isCorrect); .next-btn:active transform: scale(0.97)
// ------------------- App State ------------------- let currentQuestions = []; // 実際に使用する問題リスト (シャッフル済み) let currentIndex = 0; // 現在の問題番号 (0から) let userScore = 0; // 正解数 let answerLocked = false; // 回答済みで選択不可か let selectedOptionIndex = null; // 現在の問題で選んだ選択肢インデックス let currentQuestionObj = null;
// オプションイベントのバインド (回答ロックされていなければ) if (!answerLocked) const optionDivs = document.querySelectorAll('.option-btn'); optionDivs.forEach(btn => btn.addEventListener('click', (e) => if (answerLocked) return; const idxAttr = btn.getAttribute('data-opt-index'); if (idxAttr !== null) const idxNum = parseInt(idxAttr, 10); if (!isNaN(idxNum)) evaluateAndLock(idxNum, q.correct, q.explanation); ); ); let message = ""
.sub font-size: 0.9rem; opacity: 0.9; margin-top: 8px; font-weight: 400;
.next-btn:active transform: scale(0.97);
// 結果画面を表示 function showResultScreen() const totalQuestions = currentQuestions.length; const percentage = Math.round((userScore / totalQuestions) * 100); let message = ""; if (percentage >= 80) message = "素晴らしい! N3レベル高いです! 🌟"; else if (percentage >= 60) message = "あと少し! 復習しましょう! 📖"; else message = "もう一度チャレンジして弱点を克服しよう! 💪";
// DOM elements const dynamicContainer = document.getElementById('dynamicContent'); const scoreSpan = document.getElementById('scoreValue'); const currentQNumberSpan = document.getElementById('currentQNumber'); const totalQNumberSpan = document.getElementById('totalQNumber');
.question-text background: #fef3da; padding: 1.2rem; border-radius: 2rem; font-size: 1.6rem; font-weight: 600; text-align: center; margin-bottom: 2rem; box-shadow: inset 0 1px 4px #ede0c2, 0 4px 8px rgba(0,0,0,0.05); word-break: break-word; color: #2c221b; line-height: 1.4;
// すべてのオプションボタンを再レンダリング (状態反映) renderQuestionWithFeedback(selectedIdx, correctIdx, explanationText, isCorrect);
// ------------------- App State ------------------- let currentQuestions = []; // 実際に使用する問題リスト (シャッフル済み) let currentIndex = 0; // 現在の問題番号 (0から) let userScore = 0; // 正解数 let answerLocked = false; // 回答済みで選択不可か let selectedOptionIndex = null; // 現在の問題で選んだ選択肢インデックス let currentQuestionObj = null;
// オプションイベントのバインド (回答ロックされていなければ) if (!answerLocked) const optionDivs = document.querySelectorAll('.option-btn'); optionDivs.forEach(btn => btn.addEventListener('click', (e) => if (answerLocked) return; const idxAttr = btn.getAttribute('data-opt-index'); if (idxAttr !== null) const idxNum = parseInt(idxAttr, 10); if (!isNaN(idxNum)) evaluateAndLock(idxNum, q.correct, q.explanation); ); );
.sub font-size: 0.9rem; opacity: 0.9; margin-top: 8px; font-weight: 400;