จัดทำเป็นสื่อทบทวนโดย Tamutami Nihongo
ข้อมูลลำดับเส้นของคันจิมาจากโครงการ KanjiVG โดย Ulrich Apel เผยแพร่ภายใต้สัญญาอนุญาต Creative Commons Attribution-ShareAlike 3.0 (CC BY-SA 3.0)
พอเริ่มทำคำถาม เนื้อหาด้านบนจะถูกปิดไว้ จะได้วัดว่าจำได้จริง '+ 'ระหว่างทำจะเปิดดูได้ครั้งเดียว นาน 30 วินาที ใช้แล้วใช้อีกไม่ได้ '+ 'ดูให้เข้าใจก่อนกดเริ่มจะดีที่สุดนะคะ
ตัวเลขคือลำดับเส้น คำญี่ปุ่นมุมภาพบอกวิธีจบปลายเส้น — '+ 'とめる หยุดนิ่ง · はねる สะบัดขึ้น · はらう ลากแล้วปล่อยให้เรียวหาย
กด ▶ ดูลำดับเส้น เพื่อดูแอนิเมชันเขียนทีละเส้น '+ 'แถบเล็กใต้ปุ่มคือลำดับเส้นทีละขั้น จุดสีแดงคือจุดเริ่มต้น ลองเขียนตามลงสมุดดูนะคะ
'+ ''; var grid = learn.querySelector(".na-grid"); row.k.forEach(function(c){ var cell = document.createElement("div"); cell.className = "na-cell"; var box = document.createElement("div"); box.className = "na-stroke"; if(hasStrokes(c[0])) box.appendChild(renderStrokeBox(c[0])); else box.innerHTML = ''+msg+'
'+ 'ไปที่แผนที่เส้นทาง →ฮิระงะนะ・คะตะคะนะ — Tamutami Nihongo
'+ 'ตัวอักษรฮิระงะนะและคะตะคะนะ ครบทั้งตาราง 46 ตัว เสียงขุ่น เสียงยาว เสียงกัก เสียงควบ '+ 'พร้อมลำดับเส้นและแบบทดสอบเก็บด่าน
'; return; } mastheadEl.innerHTML = ''+(lesson.kana ? lesson.th : 'บทที่ '+lesson.no+' '+lesson.th)+'
'+ ''+lesson.lede+'
'; } function paintPills(lesson, currentId){ pillnav.innerHTML = ""; function pill(href, label, active){ var a = document.createElement("a"); a.className = "pill"; a.href = href; a.innerHTML = label; if(active){ a.setAttribute("aria-current","page"); } pillnav.appendChild(a); return a; } if(!lesson){ pill("#home","ทุกบทเรียน", currentId !== "history"); LESSONS.forEach(function(x){ pill("#"+x.id, x.kana ? x.th : "บทที่ "+x.no+" "+x.th, false); }); pill("#history","📋 ประวัติการทบทวน", currentId === "history"); return; } pill("#home","← ทุกบทเรียน", false); if(lesson.kana){ LESSONS.forEach(function(x){ if(x.kana) pill("#"+x.id, x.th, x.id === lesson.id); }); pill("#history", "📋 ประวัติ", false); return; } pill("#"+lesson.id, "บทที่ "+lesson.no, !currentId); if(lesson.path && !isFreeMode()) pill("#"+lesson.id+"/path", "🗺️ เส้นทาง", false); pill("#history", "📋 ประวัติ", false); lesson.topics.forEach(function(t,i){ var a = pill("#"+lesson.id+"/"+t.id, (i+1)+" "+t.short, currentId === t.id); if(currentId === t.id && a.scrollIntoView) a.scrollIntoView({block:"nearest", inline:"nearest"}); }); } /* ================= หน้าเลือกบทเรียน ================= */ var viewLessons = document.getElementById("view-lessons"); var viewHome = document.getElementById("view-home"); var viewTopic = document.getElementById("view-topic"); function paintLessonPicker(){ var html = ''; viewLessons.innerHTML = html; viewLessons.insertBefore(renderProgressCard(), viewLessons.firstChild); Array.prototype.forEach.call(viewLessons.querySelectorAll(".lcard"), function(card){ card.addEventListener("click", function(e){ if(e.target.closest("a")) return; location.hash = card.getAttribute("data-lesson"); }); }); } /* ================= หน้าแรกของบท ================= */ function paintLessonHome(){ if(L.kana){ if(kanaOneEl && kanaOneLid === L.id && viewHome.contains(kanaOneEl)){ kanaOneEl._show(KANA_TAB, KANA_MOD); return; } viewHome.innerHTML = ""; kanaOneEl = renderKanaOnePage(); kanaOneLid = L.id; viewHome.appendChild(kanaOneEl); return; } if(L.path && !isFreeMode()){ viewHome.innerHTML = ""; viewHome.appendChild(renderPathMap()); return; } var html = ''+(L.path ? modeToggleHtml() : "")+''; viewHome.innerHTML = html; if(L.path) wireModeToggle(viewHome); var menuList = viewHome.querySelector("#menu-list"); L.topics.forEach(function(t,i){ var card = document.createElement("div"); card.className = "lcard"; var subItems = null; if(t.kind === "grammar"){ subItems = L.grammar.map(function(g){ return {label:g.short, href:"#"+L.id+"/grammar/"+g.id}; }); } else if(t.sub){ subItems = t.sub; } var sub = ""; if(subItems){ sub = '