Для работы с библиотекой Shopify Draggable требуется корректная настройка окружения JavaScript. Библиотека распространяется в виде ES-модулей и UMD-бандлов, что позволяет использовать её как в современных сборщиках (Webpack, Rollup, Vite), так и через подключение скрипта в HTML.
Пример подключения через npm:
npm install @shopify/draggable
После установки доступно импортирование модулей:
import { Draggable, Sortable, Swappable } from '@shopify/draggable';
Для UMD-бандла подключение через тег <script>:
<script src="https://cdn.jsdelivr.net/npm/@shopify/draggable@1.0.0-beta.8/lib/draggable.bundle.js"></script>
Библиотека экспортирует глобальный объект Draggable при
использовании через <script>.
Shopify Draggable рассчитан на работу в современных браузерах с поддержкой ES6 и CSS-трансформаций. Ключевые возможности, необходимые для корректной работы:
class,
let/const, стрелочные функции.pointerdown, pointermove,
pointerup, с полифиллами для старых браузеров.transform,
translate3d для анимаций перетаскивания.drag:start,
sortable:stop и т.д.).Поддержка Internet Explorer 11 ограничена и требует дополнительных полифиллов.
Draggable совместим с популярными фронтенд-фреймворками, однако требуется корректная настройка модулей:
В любом случае необходимо, чтобы сборщик поддерживал tree-shaking, иначе весь бандл Draggable попадет в итоговый файл.
Для стабильной работы рекомендуется соблюсти следующую структуру:
project/
│
├─ src/
│ ├─ js/
│ │ └─ draggable-init.js
│ ├─ scss/
│ │ └─ draggable-styles.scss
│ └─ index.html
│
├─ dist/
│
├─ package.json
└─ webpack.config.js
Рекомендации:
dragging,
mirror, over) лучше хранить отдельно и
импортировать в основной CSS/SCSS.Для корректного визуального отображения элементов при перетаскивании необходимо предусмотреть:
position: relative
или position: absolute для элементов, которые будут
перемещаться..draggable-mirror, для
которой нужно задать position: fixed,
pointer-events: none, z-index: 9999..draggable-dragging для активного перетаскиваемого объекта,
.draggable-over для элементов, над которыми находится
курсор.Пример базового CSS:
.draggable-dragging {
opacity: 0.8;
transform: scale(1.05);
transition: transform 0.2s ease;
}
.draggable-over {
border: 2px dashed #007aff;
}
Хотя библиотека ориентирована на современные браузеры, для расширенной поддержки рекомендуется подключать:
core-js для ES6/ES7 функций.@webcomponents/custom-elements при использовании
веб-компонентов.pointer-events-polyfill для корректной работы на старых
устройствах с touch.Эти зависимости обеспечивают стабильную работу событий Drag & Drop и пользовательских событий библиотеки в старых окружениях.
Для сборки с использованием Webpack или Vite:
mode: 'development' или
production.babel-loader для транспиляции ES6.import { Draggable } from '@shopify/draggable';
Импорт отдельных модулей (Sortable,
Swappable) помогает снизить нагрузку на финальный
бандл.
Для проверки готовности окружения достаточно убедиться, что:
pointerdown,
pointermove, pointerup.Если все условия выполнены, окружение готово для создания сложных интерфейсов с перетаскиваемыми элементами.