JS об'єкт MouseEvent


Загальний опис

MouseEvent – це набір подій JavaScript, пов'язаних із взаємодією користувача з мишею. До них належать події натискання, наведення, переміщення миші та інші дії. Основні події миші: click (клік), dblclick (подвійний клік), mousedown (натискання кнопки миші), mouseup (відпускання кнопки миші), mousemove (переміщення курсора), mouseover (наведення на елемент), mouseout (вихід курсора за межі елемента) тощо.

Щоб працювати з подіями миші, зазвичай використовують метод addEventListener, який дозволяє додати обробник до конкретної події на елементі. Наприклад:

document.getElementById('myElement').addEventListener('click', function(event) {
  console.log('Елемент було клікнуто!');
});

У цьому прикладі обробник події виконує функцію при кліку на елемент з ідентифікатором myElement, виводячи повідомлення в консоль.

Для MouseEvent часто використовують об'єкт event, що передається до обробника події. Він містить корисну інформацію про подію, зокрема координати курсора миші (event.clientX та event.clientY), яка кнопка миші була натиснута (event.button), та інші деталі.

Ще один корисний приклад – mousemove, який активується щоразу, коли користувач переміщує мишу. Це часто використовується для створення інтерактивних ефектів:

document.addEventListener('mousemove', function(event) {
  console.log('Курсор на позиції:', event.clientX, event.clientY);
});

Подія mousemove активується кожного разу при переміщенні курсора миші, дозволяючи отримати координати його поточного положення.

Події миші також можуть підтримувати взаємодії з іншими подіями, як-от keydown чи touchstart, для забезпечення більшої доступності інтерфейсу. Щоб видалити обробник події, можна використовувати метод removeEventListener, який приймає назву події і функцію, яку необхідно видалити.

автор: Bond

Порада

Якщо потрібен багаторазовий облік кліків, можна використати подію dblclick замість реалізації подвійного кліку вручну.

автор: Bond
Порада

Використовуйте mouseover та mouseout з обережністю – ці події можуть активуватися щоразу, коли курсор минає вкладені елементи. Щоб уникнути цього, можна використовувати mouseenter і mouseleave, які спрацьовують лише при вході або виході з конкретного елемента.

автор: Bond
Порада

Для уникнення випадкових кліків під час навігації через інтерфейс, можна перевіряти тип кнопки, використовуючи event.button. Це допоможе розрізняти лівий, правий і середній клік.

Подія contextmenu дозволяє налаштувати користувацьке контекстне меню, заблокувавши стандартне меню:

element.addEventListener('contextmenu', function(event) {
  event.preventDefault();
  // ваше меню
});
автор: Bond

Синтаксис

element.addEventListener('eventName', function(event) {
  // код обробника події
});

методи

Метод Опис
initMouseEvent Ініціалізує об'єкт події миші з вказаними властивостями. Використовується для створення налаштованої події миші, але застарілий і не рекомендується для використання в сучасних додатках.
getModifierState Перевіряє стан клавіш-модифікаторів (таких як `Alt`, `Shift`, `Control`, `Meta`) під час події миші. Повертає `true`, якщо зазначена клавіша активна, інакше `false`.

властивості

Властивість Опис
altKey Повертає `true`, якщо під час події миші була натиснута клавіша `Alt`, інакше `false`.
button Вказує на натиснуту кнопку миші під час події (0 – ліва, 1 – середня, 2 – права).
buttons Повертає число, яке представляє всі активні кнопки миші під час події (ліві, праві, середні або комбінації).
clientX Позиція курсора по осі `X` відносно області перегляду браузера.
clientY Позиція курсора по осі `Y` відносно області перегляду браузера.
ctrlKey Повертає `true`, якщо під час події була натиснута клавіша `Control`.
layerX Відстань курсора по осі `X` відносно батьківського контейнера, якщо є.
layerY Відстань курсора по осі `Y` відносно батьківського контейнера, якщо є.
metaKey Повертає `true`, якщо під час події була натиснута клавіша `Meta` (Command на Mac).
movementX Вказує на зміну позиції курсора по осі `X` з моменту попередньої події.
movementY Вказує на зміну позиції курсора по осі `Y` з моменту попередньої події.
offsetX Відстань курсора по осі `X` відносно елемента, на якому виникла подія.
offsetY Відстань курсора по осі `Y` відносно елемента, на якому виникла подія.
pageX Позиція курсора по осі `X` відносно всього документа, враховуючи прокрутку.
pageY Позиція курсора по осі `Y` відносно всього документа, враховуючи прокрутку.
relatedTarget Елемент, пов'язаний з подією миші, наприклад, елемент, з якого курсор був наведений чи видалений.
screenX Позиція курсора по осі `X` відносно екрана пристрою.
screenY Позиція курсора по осі `Y` відносно екрана пристрою.
shiftKey Повертає `true`, якщо під час події була натиснута клавіша `Shift`.
mozInputSource Унікальна властивість для Firefox, яка вказує на джерело події (наприклад, миша або стилус).
webkitForce Унікальна властивість для Safari, що повертає силу натискання при взаємодії з сенсорним екраном (підтримується лише в Safari).
x Позиція курсора по осі `X`, аналогічна до `clientX`, але доступна як альтернатива для сумісності.
y Позиція курсора по осі `Y`, аналогічна до `clientY`, але доступна як альтернатива для сумісності.

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE
1 1 1 10.6 12
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 4 1
Підтримка: серверні переглядачі
Переглядач Node.js Deno
- -

Приклади

+ запропонувати свій приклад у пісочниці

Цей приклад показує базову реалізацію "перетягування" для елемента. mousemove оновлює позицію елемента в міру переміщення миші. Це особливо корисно для створення інтерфейсів, де користувач може змінювати положення об'єктів на екрані.

HTML

<div id="draggable">Демонстраційний елемент</div>

JS

const element = document.getElementById('draggable');
element.addEventListener('mousedown', function(event) {
  const startX = event.clientX - element.offsetLeft;
  const startY = event.clientY - element.offsetTop;
  function onMouseMove(event) {
    element.style.left = `${event.clientX - startX}px`;
    element.style.top = `${event.clientY - startY}px`;
  }
  document.addEventListener('mousemove', onMouseMove);
  document.addEventListener('mouseup', function() {
    document.removeEventListener('mousemove', onMouseMove);
  }, { once: true });
});
автор: Bond

У цьому прикладі відстежується область, яку користувач виділяє, натискаючи та перетягуючи мишу. Обробник mousemove зберігає розміри виділеної області, а після відпускання кнопки видаляється для оптимізації продуктивності.

document.addEventListener('mousedown', function(event) {
  const startX = event.clientX;
  const startY = event.clientY;
  function onMouseMove(event) {
    const width = event.clientX - startX;
    const height = event.clientY - startY;
    console.log('Розмір виділення:', width, height);
  }
  document.addEventListener('mousemove', onMouseMove);
  document.addEventListener('mouseup', function() {
    document.removeEventListener('mousemove', onMouseMove);
  }, { once: true });
});
автор: Bond

Цей приклад демонструє, як користувач може легко перемикатися між режимом перетягування та зміни розміру. Перемикач дозволяє активувати та деактивувати режим зміни розміру, забезпечуючи зручність користування елементом.

автор: Bond

Коментарі

Коментарів ще немає — будьте першим!

Відповідь для

Увійдіть — коментар з'явиться одразу, без капчі й очікування перевірки.

Пропозиція правки

Ваша версія — : після перевірки замінить чинну. Нова порада чи нотатка — з'явиться на сторінці після перевірки.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія секції «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Ваша версія опису «»: після перевірки замінить чинну.

Ви гість — діють добові ліміти. Увійдіть, щоб пропонувати без капчі.

Зворотний зв'язок
Вхід