🧱 Суть
effectAllowed и dropEffect – это часть HTML5 Drag & Drop API, которые определяют, что можно делать при перетаскивании и что реально произойдёт.
effectAllowed→ ограничения со стороны источникаdropEffect→ действие в зоне дропа
📦 Проблема
1. Путают роли свойств
Оба свойства выглядят похоже, но делают разное:
- одно задаёт разрешение
- второе – фактическое действие
Из-за этого часто возникает ощущение, что одно из них “не работает”.
2. Drop может не сработать
Если забыть:
e.preventDefault();в dragover, браузер просто запретит drop.
3. Несовпадение значений
Если:
effectAllowed = 'move'
dropEffect = 'copy'браузер может:
- показать 🚫 курсор
- не дать выполнить drop
| Разница | ||
|---|---|---|
| Свойство | Где задаётся | Что означает |
effectAllowed | dragstart | Какие операции вообще разрешены |
dropEffect | dragover | Что произойдёт именно здесь |
✅ Решение
Использовать оба свойства согласованно:
- источник → разрешает действие
- зона дропа → подтверждает его
💻 Код
Источник (dragstart)
event.dataTransfer!.effectAllowed = 'move';Зона дропа (dragover)
e.preventDefault(); // обязательно
e.dataTransfer!.dropEffect = 'move';🎯 Вывод
effectAllowed– задаёт “правила игры”dropEffect– говорит, что произойдёт в конкретной точке- они должны совпадать
- без
preventDefaultdrop не работает - чаще всего используется
moveдля реального переноса