Области применения

SortableJS — это легковесная и гибкая библиотека для реализации перетаскивания элементов в списках и сетках. Основной функционал строится вокруг создания интерактивных списков, где элементы можно менять местами с помощью мыши или касания на мобильных устройствах. Библиотека поддерживает работу с обычными HTML-элементами и полностью совместима с современными фреймворками, такими как React, Vue и Angular.

Инициализация и базовое использование

Для создания sortable-списка используется конструктор Sortable:

import Sortable from 'sortablejs';

const list = document.getElementById('items');
Sortable.create(list, {
    animation: 150,
    ghostClass: 'sortable-ghost'
});

Ключевые параметры:

  • animation — скорость анимации при перетаскивании (в миллисекундах).
  • ghostClass — CSS-класс для отображения «призрачного» элемента во время перемещения.
  • handle — позволяет указать область, за которую можно захватывать элемент для перетаскивания.
  • draggable — селектор элементов, которые будут перетаскиваться.

Работа с событиями

SortableJS предоставляет множество событий, которые позволяют реагировать на действия пользователя:

  • onStart — срабатывает в момент начала перетаскивания.
  • onEnd — вызывается после завершения перемещения элемента.
  • onAdd — элемент добавлен в список из другого sortable-списка.
  • onUpdate — элемент изменил позицию внутри текущего списка.
  • onRemove — элемент удален из текущего списка.

Пример использования события onEnd:

Sortable.create(list, {
    animation: 150,
    onEnd: (evt) => {
        console.log(`Элемент перемещен с позиции ${evt.oldIndex} на ${evt.newIndex}`);
    }
});

Области применения SortableJS

Управление списками задач и элементов интерфейса

SortableJS активно используется для реализации интерактивных интерфейсов, где требуется менять порядок элементов. Например, в менеджерах задач можно динамически сортировать задачи, перемещать их между колонками или списками при помощи drag-and-drop.

Особенности применения:

  • Возможность сохранять порядок на сервере после каждого изменения.
  • Интеграция с локальным хранилищем или базой данных для сохранения состояния.
  • Поддержка множественных списков, связанных друг с другом.

Создание дашбордов и панелей управления

Для административных интерфейсов и дашбордов часто требуется настраиваемая сетка виджетов. SortableJS позволяет:

  • Перетаскивать виджеты между зонами панели.
  • Менять порядок блоков внутри одной зоны.
  • Ограничивать перемещение элементов только в определённых контейнерах.
Sortable.create(dashboard, {
    group: 'widgets',
    animation: 200,
    handle: '.widget-header',
    onAdd: (evt) => {
        console.log(`Виджет перемещен в новую область`);
    }
});

Списки с возможностью сортировки изображений

Интерфейсы работы с медиа-контентом часто требуют удобного перетаскивания изображений. SortableJS позволяет:

  • Менять порядок изображений в галереях.
  • Поддерживать визуальные эффекты перемещения, такие как тень или прозрачность.
  • Ограничивать сортировку только для определённых категорий изображений.

Работа с формами и динамическим контентом

SortableJS применяется для форм, где пользователи могут добавлять или менять порядок полей:

  • Перетаскивание блоков с полями формы.
  • Возможность динамического создания и удаления элементов.
  • Синхронизация порядка элементов с данными формы для последующей отправки на сервер.

Интеграция с современными фреймворками

SortableJS легко интегрируется с React, Vue и Angular:

  • Для React используются обёртки вроде react-sortablejs, позволяющие управлять состоянием через props и state.
  • Vue поддерживает директиву v-sortable, позволяющую гибко связывать список с моделью данных.
  • Angular-интеграция реализуется через директивы, обеспечивая реактивное обновление порядка элементов.

Настройка поведения и визуализации

SortableJS поддерживает широкие возможности кастомизации:

  • Классы и стили: можно задавать классы для активного элемента (chosenClass), для элементов при перетаскивании (ghostClass) или для placeholder’а.
  • Фильтры: возможность исключать определённые элементы из сортировки с помощью опции filter.
  • События группы: через group элементы могут перемещаться между несколькими списками.

Пример исключения элементов из сортировки:

Sortable.create(list, {
    filter: '.no-drag',
    onFilter: (evt) => {
        console.log('Попытка перетаскивания заблокированного элемента');
    }
});

Оптимизация производительности

Для больших списков важно учитывать производительность:

  • Ограничение количества одновременно анимируемых элементов.
  • Использование forceFallback: true для снижения нагрузки на мобильных устройствах.
  • Минимизация сложных стилей и теней при перемещении большого количества элементов.

SortableJS сочетает в себе простоту и гибкость, обеспечивая широкую область применения: от простых списков задач до сложных дашбордов и динамических форм. Правильная настройка параметров и обработчиков событий позволяет создавать плавный и удобный интерфейс для пользователей любых платформ.