JS властивість Event.contextmenu


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

contextmenu — це подія, яка виникає, коли користувач викликає контекстне меню, зазвичай за допомогою правої кнопки миші або спеціальної клавіші на клавіатурі. Ця подія дозволяє розробникам перехоплювати стандартне контекстне меню браузера та створювати власні контекстні меню з додатковими функціями або налаштуваннями, специфічними для їхнього додатка. Наприклад, у веб-додатках контекстне меню може містити опції для копіювання, вставки або виконання інших дій, що стосуються вибраного елемента.

Щоб використовувати подію contextmenu, розробнику потрібно додати обробник подій до елемента, який повинен реагувати на цю подію. Обробник подій може виконувати будь-яку необхідну логіку, таку як відміна стандартного контекстного меню або відображення власного меню. Наприклад:

document.addEventListener('contextmenu', function(event) {
  event.preventDefault(); // Відміняє стандартне контекстне меню
  alert('Власне контекстне меню.');
});

У цьому прикладі стандартне контекстне меню браузера відміняється, і замість нього з'являється спливаюче вікно з повідомленням "Власне контекстне меню."

Подія contextmenu часто використовується для створення більш інтуїтивних та інтерактивних користувацьких інтерфейсів. Наприклад, у графічних редакторах, іграх або CRM-системах розробники можуть створювати контекстні меню, що забезпечують користувачів додатковими опціями, які відповідають контексту вибраного елемента. Це може покращити досвід користувача, дозволяючи йому виконувати дії швидше та ефективніше.

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

автор: Bond

Порада

Для створення кастомного контекстного меню, яке з'являється під час кліку правою кнопкою миші, розгляньте можливість використання CSS для стилізації вашого меню. Ви можете використовувати position: absolute і встановлювати координати меню відповідно до позиції курсору миші за допомогою властивостей event.clientX і event.clientY.

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

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

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

Завжди тестуйте своє кастомне контекстне меню на різних пристроях, включаючи сенсорні екрани. Деякі пристрої не мають правої кнопки миші, і виклик контекстного меню може працювати інакше (наприклад, довге натискання).

автор: Bond

Синтаксис

element.addEventListener('contextmenu', function(event) {
  // Ваш код тут
});

Переглядачі

Підтримка: стаціонарні переглядачі
Переглядач Google Chrome Mozilla Firefox Apple Safari Opera Microsoft EDGE Microsoft Internet Explorer
1 6 3 10.5 12 9
Підтримка: мобільні переглядачі
Переглядач Mobile Google Android Mobile Google Chrome Mobile Mozilla Firefox Mobile Apple Safari
4.4 18 6

Приклади

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

У цьому прикладі текстовий блок має кастомне контекстне меню, яке з'являється поруч із курсором миші при кліку правою кнопкою. Меню закривається при натисканні будь-де на сторінці. Це забезпечує більш інтерактивний досвід для користувачів, надаючи додаткові опції, які не доступні в стандартному меню.

HTML

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

JS

const textBlock = document.getElementById('textBlock');
const customMenu = document.getElementById('customMenu');

textBlock.addEventListener('contextmenu', function(event) {
  event.preventDefault();
  customMenu.style.display = 'block';
  customMenu.style.top = `${event.clientY}px`;
  customMenu.style.left = `${event.clientX}px`;
});

document.addEventListener('click', function() {
  customMenu.style.display = 'none';
});
автор: Bond

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

HTML

<div id="dynamicMenu">Демонстраційний елемент</div>
<div class="item">перший елемент item</div>
<div class="item">другий елемент item</div>

JS

const items = document.querySelectorAll('.item');
const dynamicMenu = document.getElementById('dynamicMenu');

items.forEach(item => {
  item.addEventListener('contextmenu', function(event) {
    event.preventDefault();
    const itemType = event.target.dataset.type;
    dynamicMenu.innerHTML = ''; // Очищуємо попереднє меню

    if (itemType === 'image') {
      dynamicMenu.innerHTML = '<li>Скачати зображення</li><li>Переглянути інформацію</li>';
    } else if (itemType === 'text') {
      dynamicMenu.innerHTML = '<li>Копіювати текст</li><li>Виділити все</li>';
    }

    dynamicMenu.style.display = 'block';
    dynamicMenu.style.top = `${event.clientY}px`;
    dynamicMenu.style.left = `${event.clientX}px`;
  });
});

document.addEventListener('click', function() {
  dynamicMenu.style.display = 'none';
});
автор: Bond

У цьому прикладі користувач може взаємодіяти з текстовим блоком, клацаючи правою кнопкою миші, щоб відкрити власне контекстне меню. Меню надає три опції: копіювання тексту в буфер обміну, зміну кольору фону блоку та видалення тексту. Кожна дія виконується за допомогою JavaScript, що демонструє, як можна створювати інтерактивні веб-сторінки з кастомними функціями, які перевершують стандартний набір інструментів браузера.

автор: Bond

Коментарі

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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

Як форматувати текст?
Пишемо Виходить
**важливо**
*акцент*
~~застаріле~~
Виділення в тексті. Те саме роблять кнопки панелі, що спливає над виділеним.
## Як працює каскад
### Порядок оголошень
Заголовки всередині тексту. Найбільший не потрібен — він у сторінки вже є.
[[css/property/color]] Посилання на сторінку довідника. Наберіть [[ — поле саме підкаже шляхи, а хибний підкреслить хвилею.
[MDN](https://developer.mozilla.org) Посилання на чужий сайт.
![Схема каскаду](https://site.com/схема.png) Картинка. Опис обов'язковий: його читають пошуковик і незрячі.
Задайте `display: grid` контейнеру Код усередині речення.
```css
.card { display: grid }
```
Код блоком. Мова після трьох лапок вмикає підсвітку.
- Походження
1. Походження
Перелік: маркований і нумерований.
- [ ] дописати приклади
- [x] перевірити в Firefox
Перелік завдань із галочками. Пробіл у порожніх дужках обов'язковий.
> Порядок важить лише за рівної ваги. Цитата на всю ширину абзацу.
Специфічність
: вага селектора; більша перемагає
Список означень: термін, а під ним пояснення з відступом. Пробіл після двокрапки обов'язковий.
Каскад має три критерії[^1]
[^1]: Походження, специфічність, порядок.
Виноска: номер у тексті, примітка внизу сторінки. Без згадки [^1] у тексті примітка не з'явиться.
Відповідь: ||сорок два|| Ховає те, що між рисками: читач бачить на цьому місці розмиту пляму, а решта речення лишається звичайною. Клац — і текст відкрито.
|| Показати рішення
Задайте контейнеру `display: grid`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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