Події клавіатури 1/2
Налаштовуємо HTML-файл
Javascript здатна моніторити клавіатуру за допомогою подій клавіатури. Щоразу, коли користувач натискає клавішу на клавіатурі, генерується подія клавіатури, яка досить подібна до подій руху мишки, що ми розглядали в попередніх темах. Працюючи з подіями мишки, ми використовували jQuery, щоб визначати, де знаходився курсор мишки у момент натискання клавіші на ній. При роботі із подіями клавіатури ви також можете використовувати jQuery, аби встановлювати, яку клавішу було натиснуто, і згодом використати цю інформацію у вашому коді. Наприклад, у цьому розділі ми рухатимемо квадрат вліво, вправо, вверх чи вниз, коли користувач натискатиме відповідну клавішу-стрілочку. Ми скористаємося подією keydown, яка запускатиметься щоразу, коли користувач буде тиснути на клавішу, а також застосуємо JQuery, щоб додати обробник подій до події keydown. Таким чином, кожного разу, коли розпочинатиметься подія keydown, функція нашого обробника подій зможе встановити, яку клавішу було натиснуто, і відповідно відреагувати на це.
Давайте створимо свій keyboard.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Події клавіатури 1_2</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
</style>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script>
const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
</script>
</body>
</html>Додавання обробника подій
Тепер додамо трохи JavaScript-коду, що реагуватиме на події keydown. Введіть такий код поміж тегів
$("body").keydown(function(event){
console.log(event.keyCode);
});
У першому рядку коду ми застосовуємо JQuery-функцію $, щоб вибрати елемент body у HTML-коді, далі викликаємо метод keydown, аргументом для якого слугуватиме функція, яка викликатиметься при кожному натисканні клавіші. Інформація про подію keydown передається до функції крізь об‘єкт event. Для цієї програми нам необхідно знати, яку саме клавішу натиснули, і ця інформація зберігається в об’єкт event як event.keyCode.
У межах функції ми застосовуємо console.log, щоб виводити keyCode об’єкта event — число, що представлятиме натиснуту клавішу. Наприклад, код для клавіші пробілу — 32, ліва стрілка — 37. Як тільки ви відредагуєте ваш файл keyboard.html:, збережіть його та відкрийте у веб-оглядачі. Тепер відкрийте консоль, аби ви могли побачити виведене в неї, та клацніть в основному вікні веб-оглядача, щоб JavaScript-код реєстрував натиски клавіш клавіатури. Тепер, якщо почнете натискати клавіші, відповідний код клавіші повинен видруковуватись у консолі. Наприклад, якщо ви введете фразу “webuniverse”,то мали б побачити у консолі таке:

Кожна клавіша, яку ви натискаєте, має унікальний код.
У клавіші W він - 87, у клавіші E — 69, і так далі. Спробуйте і ви.
Використання об’єкту для конвертації кодів клавіш у назви
Аби спростити роботу із клавішами, ми скористаємося об‘єктом, що конвертуватиме код клавіші у назви так, що натиснуті клавіші буде легше розпізнавати. У цьому прикладі ми створюємо об‘єкт, що зветься keyNames, у якому ключ об’єкта — це код клавіші, а значення — це назва відповідної клавіші. Видаліть JavaScript-код у файлі keyboard.html: та замініть його таким кодом:
var keyNames = {
32: "space",
37: "left",
38: "up",
39: "right",
40: "down"
};
$("body").keydown(function(event){
console.log(keyNames[event.keyCode]);
});Спершу ми створюємо об'єкт keyNames та заповнюємо його кодами клавіш 32, 37, 38, 39 та 40. Об'єкт keyNames використовує пари ключ-значення, аби створити відповідність ключ-кодів (32, 37 і так далі) із позначками клавіш (такими як "space" для клавіші пробілу чи "left" для стрілки, що вказує вліво).
Себто ми зможемо використовувати цей об'єкт, аби дізнаватися назву клавіші з ії ключа-коду клавіші. Наприклад. щоб дізнатися назву клавіші із кодом 32, введіть keyNames[32]. Вам буде повернуто рядок "space".
Розглянемо строку з console.log. Ми використовуємо об'єкт keyNames у обробнику подій keydown-події, щоб отримати назву клавіші, яку щойно натиснули. Якщо код клавіші події, на який посилається обробник подій event.keyCode, збігається із одним із ключів у об'єкті keyNames, ця функція внесе у реєстр назву цього ключа. Якщо ж жоден із ключів не збігається, код буде зареєстровано як undefined.
Завантажте файл keyboard.html: y вашому веб-оглядачі. Відкрийте консоль, клікніть по основному вікні веб-оглядача та спробуйте понатискати декілька клавіш. Якщо натиснете одну з клавіш із об’єкта keyNames (клавіші-стрілочки чи то пробіл), програма повинна видрукувати назву відповідної клавіші. В іншому випадку вона видасть undefined.
Переміщаємо квадрат за допомогою клавіатури
Давайте ознайомимось із кодом Square.html, де ми переміщаємо наш червоний квадрат за допомогою клавіатури:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Square</title>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<style>
</style>
</head>
<body>
<canvas id="canvas" width="500" height="500"></canvas>
<script>
var canvas, ctx;
var width, height;
var object = [];
var go = 5;
function drawCanvas() {
clear();
ctx.fillStyle = object.color;
ctx.beginPath();
ctx.fillRect(object.x, object.y, object.w, object.h);
ctx.closePath();
ctx.fill();
}
function clear() {
ctx.clearRect(0, 0, canvas.width, canvas.height);
}
function startLoad() {
object.x = 310;
object.y = 230;
object.w = 50;
object.h = 50;
object.color = "rgba(255, 35, 35, 1)";
}
$(function() {
canvas = document.getElementById('canvas');
ctx = canvas.getContext('2d');
width = canvas.width;
height = canvas.height;
startLoad();
drawCanvas();
var minX = 0;
var maxX = width - object.w;
var minY = 0;
var maxY = height - object.h;
$(window).keydown(function(e) {
switch (e.keyCode) {
case 38:
if ((object.y - go) > minY) {
object.y = object.y - go;
} else {
object.y = minY;
}
break;
case 40:
if ((object.y + go) < maxY) {
object.y = object.y + go;
} else {
object.y = maxY;
}
break;
case 37:
if ((object.x - go) > minX) {
object.x = object.x - go;
} else {
object.x = minX;
}
break;
case 39:
if ((object.x + go) < maxX) {
object.x = object.x + go;
} else {
object.x = maxX;
}
break;
}
});
setInterval(drawCanvas, 30);
});
</script>
</body>
</html>У цьому коді ми використовуємо jQuery для того, щоб визначити, коли користувач натискає одну з клавіш на клавіатурі, і переміщувати об'єкт (квадрат) по canvas.
Як працює переміщення квадрата?
- object.x і object.y — це координати квадрата на canvas.
- go — це кількість пікселів, на яку квадрат переміщається, коли натискається клавіша.
- minX, maxX, minY, maxY — це межі, за які квадрат не може вийти (мінімальні та максимальні значення координат).
Логіка переміщення:
- Коли натискається одна з клавіш (вгору, вниз, вліво, вправо), код перевіряє, чи не виходить нове положення квадрата за межі canvas.
- Якщо можна перемістити квадрат, він змінює свою позицію.
- Якщо рух за межі canvas, квадрат залишається на максимальній чи мінімальній позиції.
- Таким чином, квадрат плавно рухається в межах canvas в залежності від того, яку клавішу натискає користувач.
Код малювання кольорів по canvas
І на кінець, давайте ознайомимось із цікавим кодом new_drawing.html, де ми можемо малювати на полотні:
<!DOCTYPE html>
<html lang="en">
<head>
<!-- Визначаємо мета-дані для кодування та налаштування вигляду сторінки -->
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- Встановлюємо заголовок сторінки -->
<title>Mouse Drawing</title>
<style>
/* Стилі для канваса, щоб додати межу і визначити його вигляд */
#canvas {
border: 1px solid black;
display: block;
margin-bottom: 10px;
}
/* Стилі для кнопок, щоб зробити їх квадратними і зручними для натискання */
button {
width: 50px;
height: 50px;
border: none;
margin: 5px;
cursor: pointer; /* Змінюємо курсор на руку при наведенні */
}
/* Стилі для кольорових кнопок */
.red {
background-color: red;
}
.blue {
background-color: blue;
}
.green {
background-color: green;
}
</style>
</head>
<body>
<!-- Канвас, на якому можна малювати за допомогою миші. Визначені події для малювання -->
<canvas id="canvas" width="800" height="600"
onmousedown="startDrawing(event)"
onmousemove="draw(event)"
onmouseup="stopDrawing()">
</canvas>
<!-- onmousedown - Подія, коли кнопка миші натиснута -->
<!-- onmousemove - Подія, коли миша рухається з натиснутою кнопкою -->
<!-- onmouseup - Подія, коли кнопка миші відпускається -->
<!-- Кнопки для вибору кольору малювання -->
<button class="red" onclick="changeColor('red')"></button> <!-- Кнопка для червоного кольору -->
<button class="blue" onclick="changeColor('blue')"></button> <!-- Кнопка для синього кольору -->
<button class="green" onclick="changeColor('green')"></button> <!-- Кнопка для зеленого кольору -->
<script>
// Отримуємо доступ до елементів канваса і контексту для малювання
let canvas = document.getElementById('canvas');
let ctx = canvas.getContext('2d');
let isDrawing = false; // Статус малювання: чи активне малювання
let currentColor = 'black'; // Початковий колір малювання
// Функція для початку малювання
function startDrawing(event) {
isDrawing = true; // Включаємо малювання
let x = event.offsetX; // Отримуємо координати миші по осі X
let y = event.offsetY; // Отримуємо координати миші по осі Y
// Налаштовуємо стиль малювання
ctx.lineWidth = 5; // Ширина лінії
ctx.lineJoin = 'round'; // Закруглення ліній
ctx.lineCap = 'round'; // Закруглення кінців лінії
ctx.strokeStyle = currentColor; // Колір лінії
ctx.fillStyle = currentColor; // Колір заливки (якщо потрібно)
ctx.beginPath(); // Починаємо малювати
ctx.moveTo(x, y); // Переміщаємо точку початку лінії до позиції миші
}
// Функція для малювання
function draw(event) {
if (!isDrawing) return; // Якщо малювання не активне, не малюємо
let x = event.offsetX; // Отримуємо координати миші по осі X
let y = event.offsetY; // Отримуємо координати миші по осі Y
ctx.lineTo(x, y); // Малюємо лінію до нових координат
ctx.stroke(); // Застосовуємо лінію на канвас
}
// Функція для завершення малювання
function stopDrawing() {
isDrawing = false; // Вимикаємо малювання
}
// Функція для зміни кольору малювання
function changeColor(color) {
currentColor = color; // Оновлюємо поточний колір
}
</script>
</body>
</html>Зауважте, що ми добавили нові команди такі як:
- ctx.lineJoin = 'round'; що відповідають за закруглення ліній.
- ctx.lineCap = 'round'; що відповідають за закруглення кінців лінії.
А також нові методи, які спрощують наш код:
- onmousedown - Подія, коли кнопка миші натиснута
- onmousemove - Подія, коли миша рухається з натиснутою кнопкою
- onmouseup - Подія, коли кнопка миші відпускається
build info
- compiler
- 2.0.5.1 · 4054EF9BF6C4510A
- built
- 2026-11-08 14:31:25 UTC
WebUniverse