Для начала требуется подключить библиотеку mo.js к проекту. Чаще всего используется CDN:
<script src="https://cdn.jsdelivr.net/npm/@mojs/core"></script>
После подключения глобальный объект mojs становится
доступен в коде.
В основе библиотеки лежит идея создания объектов-анимаций, которые описываются через параметры:
Каждая анимация — это экземпляр класса, чаще всего
mojs.Shape.
Простейшая анимация создаётся следующим образом:
const circle = new mojs.Shape({
shape: 'circle',
radius: 50,
fill: 'red',
duration: 1000
});
circle.play();
Разбор параметров:
shape: 'circle' — тип фигуры (круг)radius: 50 — радиус в пикселяхfill: 'red' — цвет заливкиduration: 1000 — длительность анимации в
миллисекундахМетод .play() запускает анимацию.
Анимация становится заметной, если задать изменение параметров:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000
});
circle.play();
Здесь используется объект { 0: 50 }, означающий анимацию
от 0 до 50.
По умолчанию объект появляется в центре экрана. Положение можно изменить:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
left: 100,
top: 100,
duration: 1000
});
circle.play();
Параметры:
left — смещение по горизонталиtop — смещение по вертикалиДобавление fade-эффекта:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
opacity: { 0: 1 },
duration: 1000
});
circle.play();
Это создаёт плавное появление круга.
Для управления динамикой движения применяется параметр
easing:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000,
easing: 'elastic.out'
});
circle.play();
Популярные варианты easing:
linear.nonequad.inquad.outelastic.outbounce.outЦвет может изменяться во времени:
const circle = new mojs.Shape({
shape: 'circle',
radius: 50,
fill: { 'red': 'blue' },
duration: 1000
});
circle.play();
В данном случае происходит переход от красного к синему.
Несколько анимаций можно объединять:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: { 'red': 'blue' },
opacity: { 0: 1 },
scale: { 0: 1.5 },
duration: 1000,
easing: 'quad.out'
});
circle.play();
Здесь одновременно изменяются:
По умолчанию элементы добавляются в document.body. Можно
указать контейнер:
const circle = new mojs.Shape({
parent: document.getElementById('container'),
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000
});
circle.play();
Анимацию можно повторять:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000,
repeat: 2,
delay: 500
});
circle.play();
repeat — количество повторовdelay — задержка перед стартомНесколько анимаций можно запускать последовательно:
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000
});
const circle2 = new mojs.Shape({
shape: 'rect',
radius: { 0: 50 },
fill: 'blue',
duration: 1000,
delay: 1000
});
circle.play();
circle2.play();
Для более сложных сценариев используется Timeline:
const timeline = new mojs.Timeline();
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 50 },
fill: 'red',
duration: 1000
});
const rect = new mojs.Shape({
shape: 'rect',
radius: { 0: 50 },
fill: 'blue',
duration: 1000
});
timeline.add(circle, rect);
timeline.play();
Timeline позволяет:
1. Отсутствие вызова .play() Анимация
не запускается автоматически.
2. Неверный формат диапазонов Нужно использовать
объект { from: to }, а не массив.
3. Конфликт с CSS CSS-стили могут перекрывать визуальные свойства.
<!DOCTYPE html>
<html>
<head>
<script src="https://cdn.jsdelivr.net/npm/@mojs/core"></script>
</head>
<body>
<script>
const circle = new mojs.Shape({
shape: 'circle',
radius: { 0: 60 },
fill: { 'orange': 'yellow' },
opacity: { 0: 1 },
duration: 1200,
easing: 'bounce.out'
});
circle.play();
</script>
</body>
</html>