Статьи

Веселые веб-анимационные эффекты с KUTE.js

Библиотека анимации KUTE.js

Моя цель в этой статье — представить 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 и сообщить мне, что вы думаете?