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


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

drag — це подія, яка виникає при перетягуванні елемента користувачем. Вона є частиною API перетягування (Drag and Drop API) і спрацьовує, коли користувач починає переміщати елемент, утримуючи його мишею. Подія drag дозволяє відстежувати позицію миші під час перетягування і застосовувати різні ефекти або дії до елемента або інтерфейсу. Вона є важливою для створення інтерактивних веб-додатків, де користувачі можуть перетягувати елементи, наприклад, для організації списків, створення діаграм, завантаження файлів або управління інтерфейсами.

Щоб використовувати подію drag, необхідно додати атрибут draggable="true" до HTML-елемента, який повинен бути перетягуваним, і додати обробник подій до цього елемента. Наприклад:

const draggableElement = document.getElementById('draggable');

draggableElement.addEventListener('drag', function(event) {
  console.log(`Елемент перетягується: координати (${event.clientX}, ${event.clientY})`);
});

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

Подія drag працює разом з іншими подіями API перетягування, такими як dragstart, dragover, dragleave, drop і dragend. Наприклад, dragstart спрацьовує на початку перетягування, dragover — коли елемент переміщується над допустимою областю для скидання, а drop — коли елемент скидається на цільовий елемент. Разом ці події дозволяють створювати повнофункціональні механізми перетягування та скидання в веб-додатках.

Подія drag часто використовується для реалізації складних інтерфейсів користувача, таких як редактори вмісту, системи управління завданнями, інтерактивні інструменти для проектування, або в іграх, де об'єкти можуть бути перетягнуті та розміщені в різних місцях.

автор: Bond

Порада

Для роботи з подією drag завжди додавайте атрибут draggable="true" до елементів, які повинні бути перетягуваними. Це дозволяє браузеру розуміти, що елемент підтримує перетягування, і активує відповідні події.

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

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

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

Переконайтеся, що ви правильно налаштували обробники подій для подій dragover і drop, щоб уникнути непередбачених поведінок, наприклад, коли елемент не може бути скинутий в потрібну область. Ви можете використовувати методи event.preventDefault() і event.stopPropagation(), щоб керувати поведінкою перетягування.

автор: Bond

Синтаксис

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

Переглядачі

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

Приклади

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

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

HTML

<img id="draggableImage" src="/img/logo.svg" width="100" alt="Демонстраційне зображення">
<div id="dropArea">Демонстраційний елемент</div>

JS

const draggableImage = document.getElementById('draggableImage');
const dropArea = document.getElementById('dropArea');

draggableImage.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('text/plain', event.target.id);
  console.log('Почалося перетягування зображення.');
});

dropArea.addEventListener('dragover', function(event) {
  event.preventDefault();
  dropArea.style.backgroundColor = '#e0e0e0'; // Підсвічуємо область
  console.log('Зображення перетягується над областю.');
});

dropArea.addEventListener('dragleave', function() {
  dropArea.style.backgroundColor = ''; // Прибираємо підсвічування
});

dropArea.addEventListener('drop', function(event) {
  event.preventDefault();
  const imageId = event.dataTransfer.getData('text/plain');
  const imageElement = document.getElementById(imageId);
  dropArea.appendChild(imageElement);
  dropArea.style.backgroundColor = ''; // Відновлюємо фон
  console.log('Зображення успішно скинуто в область.');
});
автор: Bond

Цей приклад дозволяє користувачеві перетягувати текст із одного елемента та створювати новий елемент у цільовій області при скиданні. Події dragstart, dragover, dragleave, і drop дозволяють користувачу інтуїтивно взаємодіяти з елементами, створюючи новий контент на сторінці, що робить інтерфейс динамічним і інтерактивним.

HTML

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

JS

const draggableText = document.getElementById('draggableText');
const dropZone = document.getElementById('dropZone');

draggableText.addEventListener('dragstart', function(event) {
  event.dataTransfer.setData('text/plain', event.target.textContent);
  console.log('Почалося перетягування тексту.');
});

dropZone.addEventListener('dragover', function(event) {
  event.preventDefault();
  dropZone.style.border = '2px dashed #007bff';
});

dropZone.addEventListener('dragleave', function() {
  dropZone.style.border = '2px solid #ccc';
});

dropZone.addEventListener('drop', function(event) {
  event.preventDefault();
  const droppedText = event.dataTransfer.getData('text/plain');
  const newParagraph = document.createElement('p');
  newParagraph.textContent = droppedText;
  dropZone.appendChild(newParagraph);
  dropZone.style.border = '2px solid #ccc';
  console.log('Текст успішно додано до нової області.');
});
автор: Bond

У цьому прикладі користувач може перетягувати завдання між різними секціями ("Завдання", "В процесі", "Виконано"), що дозволяє динамічно керувати списком задач. При перетягуванні завдань змінюється колір фону, що полегшує візуальне сприйняття процесу перетягування. Кнопка "Очистити" видаляє всі завдання з розділу "Виконано", що дозволяє легко керувати завданнями, які вже завершено. Це забезпечує інтуїтивно зрозумілий і інтерактивний досвід для користувача.

автор: 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`.
||
Ховає цілі абзаци. На сторінці видно лише підпис із першого рядка («Показати рішення»), решта розгортається клацанням по ньому. Закривні риски — окремим рядком.
Порожній рядок Новий абзац. Щоб перенести рядок усередині абзацу, поставте \ в його кінці.

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

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