setTimeout не работает в делегированном событии
const items = document.querySelectorAll('.item');
items.forEach(item => {
item.addEventListener('dragstart', () => {
// Добавление класса перетаскивания к элементу после задержки
setTimeout(() => item.classList.add('dragging'), 0);
});
// Удаление класса перетаскивания из элемента в событии dragend
item.addEventListener('dragend', () => item.classList.remove('dragging'));
});
<ul class="sortable-list">
<li class="item" data-item="217" draggable="true">Text-1</li>
<li class="item" data-item="216" draggable="true">Text-2</li>
<li class="item" data-item="215" draggable="true">Text-3</li>
</ul>
Данные получаю через json, и уже в JS скрипте вывожу их. Это у меня сортировка списка задач, при перетаскивания списка, должен вешаться класс ".dragging", а когда переместили, то должен удаляться. Читал я про делегирования события, навешал обработчик на предка, но класс почти что не ставиться, он за долю секунда появился и исчезает..... Не могу понять как это побороть, сам код работает, потому что, когда выводил данные через PHP, то я отлавливал, но там не было делегированности!
// работаю через предка
const sortableList = document.querySelector('.sortable-list');
sortableList.addEventListener('click', function () {
const items = document.querySelectorAll('.item');
items.forEach(item => {
item.addEventListener('dragstart', () => {
setTimeout(() => item.classList.add('dragging'), 0);
});
//item.addEventListener('dragend', () => item.classList.remove('dragging'));
});
});
// также пробывал без предка
const items = document.querySelectorAll('.item');
items.forEach(item => {
item.addEventListener('dragstart', () => {
// Добавление класса перетаскивания к элементу после задержки
setTimeout(() => item.classList.add('dragging'), 0);
});
// Удаление класса перетаскивания из элемента в событии dragend
item.addEventListener('dragend', () => item.classList.remove('dragging'));
});
// это в обычном простое
<ul class="sortable-list">
<li class="item" data-item="217">Text-1</li>
<li class="item" data-item="216">Text-2</li>
<li class="item" data-item="215">Text-3</li>
</ul>
// это когда я перемещаю, то класс dragging появляется
<ul class="sortable-list">
<li class="item" data-item="217">Text-1</li>
<li class="item" data-item="216">Text-2</li>
<li class="item dragging" data-item="215">Text-3</li>
</ul>
// это уже когда я переместил, то класс dragging удаляется задача перемещена
<ul class="sortable-list">
<li class="item" data-item="217">Text-1</li>
<li class="item" data-item="215">Text-3</li>
<li class="item" data-item="216">Text-2</li>
</ul>