Interact.js — это мощная библиотека для работы с интерактивными
элементами на странице, поддерживающая drag-and-drop, масштабирование,
поворот и другие взаимодействия. Для современного фронтенд-разработчика
рекомендуется подключать библиотеку через пакетный менеджер, а не через
<script> в HTML, чтобы использовать возможности
сборщиков вроде Webpack или Vite.
Установка через npm:
npm install interactjs
или через Yarn:
yarn add interactjs
После установки библиотеку можно импортировать в проект:
import interact from 'interactjs';
Для проектов с CommonJS:
const interact = require('interactjs');
Interact.js написан с поддержкой модулей ES6, поэтому при
использовании Webpack важно убедиться, что сборщик корректно
обрабатывает модули node_modules.
Если проект использует Babel, необходимо добавить правило для трансформации ES6 в ES5:
module.exports = {
module: {
rules: [
{
test: /\.m?js$/,
exclude: /node_modules\/(?!(interactjs)\/).*/,
use: {
loader: 'babel-loader',
options: {
presets: ['@babel/preset-env'],
},
},
},
],
},
};
Объяснение ключевых моментов:
exclude обычно исключает node_modules для
ускорения сборки. Добавление interactjs в исключение с
отрицанием (?!(interactjs)/) гарантирует, что библиотека
будет транспилироваться, если она содержит ES6 код.babel-loader обеспечивает совместимость с устаревшими
браузерами.Interact.js весит относительно немного, но при больших проектах имеет смысл использовать tree-shaking и минимизацию:
optimization: {
usedExports: true,
minimize: true,
},
Tree-shaking автоматически удаляет неиспользуемый код, что снижает размер итогового бандла.
Для Vite достаточно стандартного импорта, поскольку Vite поддерживает
ES-модули и автоматически оптимизирует node_modules.
import interact from 'interactjs';
При использовании Rollup также можно включить плагин
@rollup/plugin-node-resolve для корректного разрешения
модулей:
import resolve from '@rollup/plugin-node-resolve';
export default {
input: 'src/main.js',
output: {
file: 'dist/bundle.js',
format: 'esm',
},
plugins: [resolve()],
};
Для проектов на TypeScript необходимо установить типы:
npm install --save-dev @types/interactjs
и убедиться, что tsconfig настроен на поддержку ES6 модулей:
{
"compilerOptions": {
"module": "esnext",
"target": "es6",
"moduleResolution": "node",
"esModuleInterop": true
}
}
Импорт в TypeScript будет идентичен Jav * aScript:
import interact from 'interactjs';
Interact.js не требует собственных CSS, но при масштабировании и
drag-and-drop часто используется динамическое управление стилями через
JavaScript. Для Webpack можно настроить style-loader и
css-loader, если проект применяет SCSS или CSS модули.
module.exports = {
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader'],
},
],
},
};
import(), чтобы уменьшить
время первой загрузки.interact(selector).on(...) вместо
индивидуальной инициализации каждого элемента.// Инициализация drag-and-drop
interact('.draggable')
.draggable({
inertia: true,
modifiers: [
interact.modifiers.restrictRect({
restriction: 'parent',
endOnly: true
})
],
listeners: {
move(event) {
const target = event.target;
const x = (parseFloat(target.getAttribute('data-x')) || 0) + event.dx;
const y = (parseFloat(target.getAttribute('data-y')) || 0) + event.dy;
target.style.transform = `translate(${x}px, ${y}px)`;
target.setAttribute('data-x', x);
target.setAttribute('data-y', y);
}
}
});
Этот пример демонстрирует, как Webpack или любой сборщик корректно обрабатывает Interact.js, а также позволяет применять модификаторы и слушатели событий, что является базой для всех интерактивных функций библиотеки.