Приведи пример выполнения сложной задачи
Для выполнения сложной задачи важно разбить её на подзадачи. Например, реализация drag-and-drop с сохранением состояния в localStorage:
// 1. Подготовка
const draggableItems = document.querySelectorAll('.draggable');
const container = document.querySelector('.container');
let draggedItem = null;
// 2. Обработчики событий
draggableItems.forEach(item => {
item.addEventListener('dragstart', () => {
draggedItem = item;
setTimeout(() => item.classList.add('hidden'), 0);
});
item.addEventListener('dragend', () => {
item.classList.remove('hidden');
});
});
// 3. Логика перетаскивания
container.addEventListener('dragover', e => {
e.preventDefault();
const afterElement = getDragAfterElement(container, e.clientY);
if (afterElement) {
container.insertBefore(draggedItem, afterElement);
} else {
container.appendChild(draggedItem);
}
});
// 4. Сохранение состояния
container.addEventListener('drop', () => {
const items = [...container.querySelectorAll('.draggable')];
const ids = items.map(item => item.id);
localStorage.setItem('itemsOrder', JSON.stringify(ids));
});
// 5. Восстановление при загрузке
window.addEventListener('load', () => {
const savedOrder = JSON.parse(localStorage.getItem('itemsOrder'));
if (savedOrder) {
savedOrder.forEach(id => {
const item = document.getElementById(id);
container.appendChild(item);
});
}
});
Ключевые моменты:
- Разделение на логические блоки
- Обработка всех этапов drag-and-drop
- Сохранение и восстановление состояния
- Оптимизация (setTimeout для hidden)
офферы быстрее!
Следующий вопрос
Это единственный вопрос по вашему фильтру