Моя цель в этой статье — представить KUTE.js , бесплатный и многофункциональный движок JavaScript-анимации с открытым исходным кодом от thednp и dalisoft.
Это вторая статья в серии Beyond CSS: библиотеки динамической анимации DOM . Если вы хотите узнать больше о том, как лучше всего использовать анимацию в Интернете, или когда вы можете подумать об использовании библиотеки анимации JavaScript вместо анимации только с CSS, первая статья в этой серии, Анимация DOM с помощью Anime.js , содержит некоторые полезные советы и ресурсы.
Что вы можете сделать с KUTE.js?
KUTE.js делает доступным ядро анимации и множество плагинов для анимации определенных видов свойств. Эта модульная архитектура помогает поддерживать производительность библиотеки и высокую гибкость.
Что можно анимировать с помощью ядра KUTE.js
Просто используя основной движок , вы можете анимировать:
- Свойство непрозрачности
-
Все свойства двумерного преобразования, кроме
matrix
, двухосногоskew
и двухосногоscale
- Все свойства трехмерного преобразования, кроме
matrix3d
иrotate3d
- Следующие свойства блочной модели:
width
,height
,top
иleft
- Свойства
color
иbackgroundColor
- Прокрутка анимации как на объекте
window
и на любом прокручиваемом элементе DOM
Что можно анимировать с помощью CSS-плагина KUTE.js
С помощью плагина CSS количество возможностей для анимации увеличивается. Вот что вы можете сделать:
- Анимировать все свойства
borderWidth
модели, такие какmargin
,padding
,borderWidth
и т. Д. -
borderRadius
свойствоborderRadius
- Свойства анимации текста, такие как
fontSize
,lineHeight
,letterSpacing
,wordSpacing
и т. Д. - Свойства анимации цвета, такие как
borderColor
иoutlineColor
- Анимируйте свойство
clip
, теперь оно устарело в CSS. - Анимируйте свойство
backgroundPosition
.
Что можно оживить с помощью плагина KUTE.js SVG
SVG (Scalable Vector Graphics) иллюстрации и значки находятся по всему Интернету. Это не случайно. SVG-графика выглядит великолепно независимо от разрешения экрана, поскольку она написана на языке разметки, делает ее более доступной и при правильной оптимизации может иметь небольшой размер файла.
Одна удивительная вещь, которую вы можете сделать с SVG-графикой, это анимировать ее различные части, и KUTE.js предлагает отличный плагин, который позволяет вам создавать сложные анимации без особых усилий.
В частности, SVG-плагин KUTE.js позволяет вам:
- Morph SVG пути
- Анимировать атрибут штриха SVG
- Animate SVG преобразуется надежным кросс-браузерным способом
Что можно анимировать с помощью плагина атрибутов KUTE.js
С помощью плагина Attributes KUTE.js позволяет вам анимировать любой числовой атрибут представления с единицей измерения или без нее, например, px, em и т. Д. Этот плагин в сочетании с плагином SVG делает возможным создание некоторых интересных анимаций.
Что можно анимировать с помощью текстового плагина KUTE.js
Расширение KUTE.js с помощью плагина Text позволит вам анимировать текстовые элементы двумя способами:
- Увеличение и уменьшение строкового представления числа
- Написание строки символом за раз.
Посетите специальную страницу на сайте KUTE.js для получения полной информации о его возможностях:
Использование KUTE.js
Пришло время поэкспериментировать с KUTE.js.
Включение KUTE.js в ваш проект
Вы можете скачать KUTE.js с помощью кнопки «Скачать» на веб-сайте проекта , со страницы KUTE.js на GitHub или даже по ссылке CDN .
Затем вы включаете файл kute.min.js
в ваш HTML-документ с помощью обычного <script>
непосредственно перед закрывающим </body>
.
Вы также можете установить KUTE.js, используя Bower и npm.
Все подробности о процессе установки находятся на странице установки KUTE.js.
Простая анимация с одним свойством с KUTE.js
KUTE.js использует два основных метода:
-
.to()
позволяет анимировать свойства CSS для одного элемента с заданным значением по умолчанию или с вычисленного значения до желаемого значения. Этот метод лучше всего подходит для простой прокрутки или отображения / скрытия анимации, или когда вы не знаете текущее значение свойства, которое хотите анимировать - С
.fromTo()
вы можете анимировать элемент, определяя начальные и конечные значения. Этот метод работает лучше, чем предыдущий, главным образом потому, что KUTE.js не должен вычислять начальные значения вашей анимации.
Синтаксис для .to()
:
KUTE.to( element, {propertyName:propertyValue} ).start();
Синтаксис для .fromTo()
:
KUTE.fromTo( element, {fromPropertyName:fromPropertyValue}, {toPropertyName: toPropertyValue} ).start();
Синтаксис выше создает объект анимации , то есть объект JavaScript, который хранит данные об анимации элемента DOM, например, определение свойств CSS, длительности анимации, задержки анимации и т. Д.
Важно отметить, что анимация не запускается по умолчанию. Скорее, чтобы запустить анимацию, вам нужно вызвать метод .start()
для объекта анимации.
Вы также можете останавливать, приостанавливать и возобновлять анимацию, используя .stop()
, .pause()
и .play()
.
Перед запуском, возобновлением или приостановкой анимации вы можете проверить, активна ли анимация в данный момент или нет, используя .playing
и .paused
соответственно:
tween.playing; tween.paused;
Чтобы намочить ноги, используйте .to()
чтобы анимировать только значение opacity
значка звезды от его начального значения, установленного в таблице стилей, до значения ноль. Элемент выбирается с использованием его атрибута класса. Вот соответствующий фрагмент:
KUTE.to('.icon-star-dark', {opacity: 0}).start();
Чтобы воссоздать ту же анимацию с помощью fromTo()
, вот фрагмент, который вам нужен:
KUTE.fromTo( '.icon-star-dark', //selector {opacity: 1}, //start value {opacity: 0} //end value ).start();
Анимация нескольких свойств одного и того же объекта с помощью KUTE.js
Вот как вы можете анимировать более одного свойства одного и того же объекта. Для этой демонстрации я собираюсь использовать .fromTo()
, но вы можете адаптировать код с помощью .to()
, просто удалив начальные значения из кода.
Вот синтаксис:
KUTE.fromTo( element, { fromPropertyName1:fromPropertyValue1, fromPropertyName2:fromPropertyValue2, fromPropertyName3:fromPropertyValue3 }, { toPropertyName1: toPropertyValue1, toPropertyName2: toPropertyValue2, toPropertyName3: toPropertyValue3 } ).start();
Допустим, вы хотите анимировать свойства CSS- transform
элемента HTML вместе с его opacity
. Вот как вы можете сделать это с KUTE.js:
KUTE.fromTo('.icon-star-dark', { scale: 1.5, //start value 1 rotate: 360, //start value 2 opacity: 1 //start value 3 }, { scale: 0.3, //end value 1 rotate: 0, //end value 2 opacity: 0 //end value 3 }).start();
Приведенный выше код масштабирует элемент со значения 1,5 до значения 0,3, поворачивает его с 360 градусов до 0 градусов и скрывает, изменяя значение его opacity
со значения 1 до 0.
Добавление задержки, длительности и других параметров в объект Tween KUTE.js
Возможность контролировать, когда начинается анимация, как долго она длится, сколько раз она запускается и т. Д., — это общие требования, которые мы ожидаем от библиотеки анимации.
Используя приведенный выше фрагмент, вот как KUTE.js позволяет вам добавлять опции для ваших подростков.
KUTE.fromTo('.icon-star-dark', { //from properties ... }, { //to properties ... }, { //options transformOrigin: '30% 50%', duration: 500, easing: 'easeInElastic' }).start();
Как вы можете видеть, вам нужно добавить несколько пар свойств в фигурные скобки. Выше я определил значения для transformOrigin
(который по умолчанию составляет 50% по оси x и 50% по оси y), свойства duration
и easing
для элемента.
KUTE.js предлагает эти и многие другие опции для тонкой настройки вашей анимации.
Перейдите на сайт библиотеки KUTE для получения полного списка доступных опций .
Применение одинаковых анимаций сразу к нескольким элементам с помощью KUTE.js
Для одновременной анимации более чем одного элемента вы можете избежать циклов кодирования и позволить KUTE.js обрабатывать задачу двумя .allTo()
методами: .allTo()
и .allFromTo()
.
Вот как вы можете сделать так, чтобы куча HTML-элементов сверкала, используя одинаковую анимацию для всех них в одном объекте анимации:
//define the tween object var sparklingStars = KUTE.allFromTo(stars, { opacity: 0.1, //start value 1 scale: 0.1 //start value 2 }, { opacity: 1, //end value 1 scale: 1.2 //end value 2 }, { //options offset: 200, repeat: 4, yoyo: true }); //start the animation sparklingStars.start();
Что касается приведенного выше кода, стоит отметить следующие два момента:
- При использовании
.allTo()
или.allFromTo()
offset
позволяет создавать анимацию, которая применяется ко всем элементам коллекции. Другими словами, вместо одновременной анимации всех элементов, между анимациями будет задержка в несколько миллисекунд, которая увеличивается с каждым элементом в коллекции. - Я сохранил объект анимации в переменной для последующего использования. Эта техника полезна, когда вам нужно работать с несколькими анимациями для более сложных анимаций. Давайте посмотрим на это в действии в следующем разделе!
Цепочка нескольких твинов с помощью KUTE.js
Возможность запуска нескольких анимаций подряд без особых усилий является большим плюсом использования хорошей библиотеки JavaScript для анимации DOM.
KUTE.js позволяет вам делать это с помощью .chain()
.
Вот синтаксис для цепочки трех подростков:
tween1.chain(tween2, tween3);
По-прежнему используя код сверкающих звезд из последней демонстрации, вы бы связали с ним еще две анимации, т. Е. Исчезновение звездного шара и появление некоторого текста.
var sparklingStars = KUTE.allFromTo('.icon', { //rest of the code here }); var disappearingBall = KUTE.fromTo('.ball', { //rest of the code here }); var greetingText = KUTE.fromTo('.greeting', { //rest of the code here }); //chaining takes place here sparklingStars.chain(disappearingBall, greetingText).start();
Работа с плагинами KUTE.js
Как и следовало ожидать, добавление плагинов позволяет вам делать больше забавных вещей с KUTE.js. Демонстрация ниже использует плагины SVG, Text и Attributes.
Синтаксис немного отличается для плагина Attributes:
var tween = KUTE.to(element, {attr: {property: value}});
Вот демонстрация, в которой круговой путь SVG-графики превращается в контур в форме сердца на том же графике. Вы можете либо вставить путь прямо в объект анимации в виде строки (в кавычках, например, ‘d = ”M 360.759 250…’), либо добавить идентификатор в путь SVG ( <path id="ball" d="M 360.759 250 ... />
) и ссылаться на путь в объекте анимации, используя его значение id, что я и сделал в приведенном ниже коде.
var morphingBall = KUTE.fromTo('#ball', { path: '#ball', attr: { fill: 'rgba(21, 19, 121, 1)' }, opacity: 0.5 }, { path: '#heartpath', attr: { fill: '#7c0e18' }, opacity: 1 }, { easing: 'easingElasticIn', morphIndex: 12, duration: 3000 });
KUTE предлагает опцию morphIndex
, которая помогает определить наименьшее возможное расстояние, пройденное точками на втором пути во время анимации морфа. Установка значения morphIndex
которое лучше всего подходит для вашей анимации, требует некоторых усилий. Поэкспериментируйте с этой демонстрационной программой KUTE, созданной одним из авторов KUTE, для лучшего понимания этой опции.
Текстовый плагин работает без проблем с ядром KUTE. Вы можете увидеть это в действии, так как текст анимируется в конце демонстрации. Вот скелет анимации, использующий текстовый плагин KUTE.js:
var greetingText = KUTE.to('.greeting', { opacity: 1, scale: 1, text: 'Happy 2017 Folks!' //more properties }, { easing: 'easingBounceIn', //more options });
Этот плагин предлагает быстрый способ анимировать написание текста в Интернете. Используйте свойство number
для увеличения или уменьшения числа внутри строки, а свойство text
для записи строки по одному символу за раз. Демонстрация этой статьи показывает свойство text
на работе.
Вывод
В этой статье был представлен KUTE.js, небольшая, но универсальная и гибкая библиотека JavaScript для динамической анимации DOM.
KUTE.js предлагает широкий спектр возможностей анимации, полную документацию, удобный синтаксис и предоставляется вам совершенно бесплатно по лицензии MIT .
Почему бы не поиграть с KUTE.js и сообщить мне, что вы думаете?