จับเหตุการณ์ keydown บน document หรือ window ตรวจสอบ event.key (แนะนำ) หรือ event.keyCode (legacy) เพื่อเพิ่ม/ลดค่าตัวแปรเมื่อกดลูกศรขึ้น/ลง
ตัวอย่างโค้ด
<!DOCTYPE html>
<html lang="th">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Keyboard Counter</title>
<style>
body { font-family: "Segoe UI", Tahoma, Geneva, Verdana, sans-serif; }
.result { font-size: 20px; font-weight: 500; }
</style>
</head>
<body>
<h1>เพิ่ม/ลดค่าตัวแปรด้วยปุ่มลูกศรบนคีย์บอร์ด</h1>
<div style="color: green;" class="result">0</div>
<h3>กดลูกศรขึ้น (↑) เพื่อเพิ่ม, ลูกศรลง (↓) เพื่อลด</h3>
<script>
const resEle = document.querySelector(".result");
let count = 0;
resEle.textContent = count;
// ใช้ event.key (Modern) แทน keyCode (Deprecated)
document.body.addEventListener("keydown", (event) => {
if (event.key === "ArrowUp") {
resEle.textContent = ++count;
} else if (event.key === "ArrowDown") {
resEle.textContent = --count;
}
// ป้องกันการ scroll หน้าจอ
if (["ArrowUp", "ArrowDown"].includes(event.key)) {
event.preventDefault();
}
});
</script>
</body>
</html>
ผลลัพธ์

กดลูกศรขึ้นหลายครั้ง:

กดลูกศรลงหลายครั้ง:

Key Codes vs event.key
| Key | event.key (Modern) | event.keyCode (Legacy) |
|---|---|---|
| ลูกศรขึ้น | "ArrowUp" | 38 |
| ลูกศรลง | "ArrowDown" | 40 |
| ลูกศรซ้าย | "ArrowLeft" | 37 |
| ลูกศรขวา | "ArrowRight" | 39 |
| Enter | "Enter" | 13 |
| Escape | "Escape" | 27 |
| Space | " " | 32 |
ใช้ event.key เสมอ — keyCode, which, charCode ถูก Deprecated แล้ว
การใช้งานจริง
- Game controls (เคลื่อนย้ายตัวละคร)
- Carousel/Slider navigation
- ปรับค่า Input number (step up/down)
- Keyboard shortcuts (Accessibility)
Accessibility (a11y) Considerations
- เพิ่ม
tabindex="0"ให้อีเลเมนต์ที่ต้องการรับ keyboard focus - แสดงคำแนะนำ (Tooltip/ARIA) ว่าสามารถใช้ลูกศรควบคุมได้
- รองรับการนำทางด้วย Tab/Shift+Tab
event.preventDefault()เฉพาะเมื่อจัดการเอง (ป้องกัน scroll ไม่ต้องการ)
โครงสร้างแนะนำสำหรับ Game/Canvas
const keys = {
ArrowUp: false,
ArrowDown: false,
ArrowLeft: false,
ArrowRight: false,
};
window.addEventListener("keydown", (e) => {
if (e.key in keys) {
keys[e.key] = true;
e.preventDefault();
}
});
window.addEventListener("keyup", (e) => {
if (e.key in keys) keys[e.key] = false;
});
// Game loop
function update() {
if (keys.ArrowUp) player.y -= speed;
if (keys.ArrowDown) player.y += speed;
// ...
requestAnimationFrame(update);
}