анимационные исследования
Предисловие: анимацию можно разделить на два типа с точки зрения использования: одна — это анимация отображения, аналогичная изображению в формате GIF или видео, а другая — интерактивная анимация. Оба они имеют определенные сценарии применения.Например, в нашем бизнесе информационного потока, в процессе от раскрывающейся страницы до входа на страницу события, мы можем полностью заменить загрузку, которая может иметь только маленький кружок, с анимацией отображения ввода. , стр.
Демонстрационная анимация:
Интерактивная анимация (на экране виден небольшой жест):
1. Показать анимацию VS интерактивная анимация
Существует много способов реализовать анимацию отображения в реальных сценариях использования, например, с помощьюgif图
,canvas
,css3
Анимация и т.д., но конечный результат вывода не интерактивен, то есть от начального состояния анимации до конечного состояния за один проход пользователь может воспринимать этот процесс, но не может участвовать. Для интерактивных анимаций мы можем запускать соответствующие операции в определенный момент времени воспроизведения анимации, а затем позволять пользователям участвовать в ней.Наиболее распространенным примером является дождь в красных конвертах или анимация нашего футбольного чемпионата мира, которая может не только улучшить Пользовательский опыт также может увеличить разнообразие наших продуктов. Однако проблема, с которой часто сталкивается интерактивная анимация, заключается в том, что реализовать интерактивную анимацию с помощью собственного кода очень сложно. В то же время производительность и совместимость — это вопросы, которые необходимо серьезно учитывать. Лучшим решением является поиск связанных фреймворков.
2. Технология, используемая в анимации
- CSS3 Animation
- canvas
- SVG
- WebGL
- Используйте анимацию на основе JavaScript
С развитием CSS3 использование CSS3transform
и анимированные@keyframes
Можно сделать много крутых анимаций, но сценарии применения анимаций CSS3 — это только анимации отображения.Пока анимация запускается, мы не можем контролировать состояние анимации, а для сложных анимаций CSS3 очень бессилен. Для анимаций, управляемых JavaScript, эти недостатки могут быть в определенной степени компенсированы, например:anime.js
Повысилсяtimeline
Концепция через цепочку выполнения каждой части анимации, чтобы завершить более сложную анимацию, в то же время функции обратного вызова, предоставляемые на каждом этапе выполнения анимации, также могут позволить нам контролировать состояние выполнения анимации. более удобно, предоставляя возможность для взаимодействия. дляcanvas
,существуетcanvas
Графика, нарисованная наDOM 事件
,Толькоcanvas
Сам тег поддерживает прослушивание событий DOM. Поэтому необходимоcanvas 容器
Событие обрабатывается для реализации мониторинга и обработки соответствующего события.WebGL
возможноcanvas
предоставить оборудованиеGPU
Ускоряет рендеринг, используя системный графический процессор для более плавного отображения анимации на мобильных устройствах.
3. Совместимость родственных технологий
- для
CSS3的animation
, совместимость следующая: -
canvas
Совместимость следующая: -
WebGL
Совместимость следующая:
Можно видеть, что анимация CSS3 и поддержка холста относительно хороши, только WebGL вообще не поддерживается в браузере Android 4.4, позже мы упомянем библиотеку PixiJs, которая может быть отображена с помощью WebGL или изящно понижена с помощью рендеринга холста.
4. Несколько существующих схем
1. AE + bodymovin + Lottie
Применимая сцена: в основном анимация дисплея
Введение: через
AE 上的 Bodymovin 插件
Экспортируйте анимацию, сделанную в AE, в файл json, черезLottie
правильноJSON
разбор и, наконец,SVG/canvas/html
способ рендеринга анимации.
Официальная документация:airbnb.io/lottie/репозиторий кода:код спрей.IO/коллекция/…
преимущество:
- Кросс-платформенный, один раз нарисуйте, один раз конвертируйте, работайте везде
- Файл меньше, экспортируйте AE
JSON
, наконец черезlottie
визуализировать какcanvas/svg/html格式
- Некоторыми свойствами анимации можно управлять через API, например, скоростью анимации; добавьте функции обратного вызова для каждого состояния анимации.
- анимация в
After Effects
Создано, используйтеBodymovin
Экспорт и рендеринг без дополнительной инженерной работы. - Повысьте производительность интерфейсных инженеров и улучшите свободу дизайнеров для создания динамических эффектов.
недостаток:
-
Bodymovin
Плагин нуждается в доработке, и все еще есть некоторые эффекты AE, которые не могут быть успешно экспортированы. - Поддержка взаимодействия не очень хорошая, больше используется для отображения анимации
-
Lottie
правильноjson
Поддержка файлов нуждается в улучшении, и некоторые из них могут быть успешно экспортированы вjson
Эффект файла плохо отображается на мобильном - Многие эффекты AE не поддерживаютсяПросмотр поддерживаемых функций: Поддерживаемые функции
2. Anime.js
Применимые сценарии: сильное отображение + слабая интерактивная анимация
Введение: Anime.js — это легкая библиотека анимации на основе js, основными функциями которой являются: - Поддержка ключевых кадров, подключение нескольких анимаций - Поддержка Timeline, которая дает возможность реализовать более сложную анимацию - Поддержка управления воспроизведением состояния анимации, воспроизведения, паузы, перезапуска, поиска анимации или временной шкалы. - Поддержка обратного вызова состояния анимации, предоставление функции обратного вызова при запуске, выполнении и завершении анимации. - Поддержка SVG-анимации - Можно настроить кривую Безье - Любое свойство DOM, содержащее числовое значение, может быть анимировано.
Гитхаб:GitHub.com/Amazing позволяет вам…репозиторий кода:код спрей.IO/коллекция/…Демонстрация документации:animecharacter.com/document АТИ…
Функции:
-
В некоторой степени,
anime.js
такжеCSS3动画库
, что относится ко всемCSS属性
, и понял@keyframes
Удобнее реализовать покадровую анимацию, заменив сложный метод определения CSS3.使用对象数组的形式定义每一帧
Тыкни меня: экземпляр ключевых кадровanime({ targets: 'div', translateX: [ { value: 250, duration: 1000, delay: 500, elasticity: 0 }, //第一帧 { value: 0, duration: 1000, delay: 500, elasticity: 0 } //第二帧 ] }) //这个例子实现了目标元素在两帧中实现水平位移
-
который предоставил
Timeline
Можно добиться более сложных анимационных эффектов, благодаря этомуTimeline
, мы можем сохранить связь между различными анимациями, а затем составить более сложную анимацию из нескольких разных анимаций.Тыкни меня: экземпляр временной шкалыvar myTimeline = anime.timeline(); //通过.add()方法添加动画 myTimeline .add({ targets: '.square', translateX: 250 }) .add({ targets: '.circle', translateX: 250 }) .add({ targets: '.triangle', translateX: 250 });
-
Управление воспроизведением анимации, общие из них: пауза, повтор, продолжение, отслеживание состояния анимации, автоматическое воспроизведение, время цикла, эффект дрожания.Тыкни меня: экземпляр элементов управления воспроизведением
-
Функции обратного вызова предоставляются для анимаций, которые выполняются в начале, во время или по завершении анимации или временной шкалы.Тыкни меня: экземпляр обратного вызова
var myAnimation = anime({ targets: '#begin .el', translateX: 250, delay: 1000, begin: function(anim) { // callback console.log(anim.began); // true after 1000ms } });
-
служба поддержки
promise
, после окончания анимации вызовитеanime.finishe
д вернетpromise对象
.Тыкни меня: Обещай экземпляр -
служба поддержки
svg
путь рисования, в настоящее время не поддерживаетсяcanvas绘制
Ткните меня: пример SVG -
для
input
Таким образом, метки элементов с числовыми значениями также могут быть переданы черезanime实例
оживлятьТкните меня: экземпляр DOM ATTRIBUTESanime({ targets: input, value: 1000, // Animate the input value to 1000 round: 1 // Remove decimals by rounding the value });
преимущество:
- Очевидно,
anime.js
не только понялCSS3动画
Глубокая инкапсуляция, более того, заключается в реализации анимации состояния операции через js-драйвер,timeline
Реализовано управление несколькими анимациями ветвей, что дает возможность реализовывать более сложные анимации. - пройти через
anime.js
который предоставилplayback controls
а такжеcallback
, а дляpromise
Поддержка , позволяет нам иметь место для простого взаимодействия с анимацией. - Хотя не поддерживается
canvas
, но поддерживаетsvg绘制路径
, я мало что знаю о svg, и я сделаю дополнение после того, как я подробно изучу позже. - Совместимость с браузером лучше,
Android 4
Все вышеперечисленное поддерживается
Недостатки и недостатки:
-
anime.js
Грамотно делать анимацию отображения.В интерактивной анимации вам все равно нужно наблюдать за сценой.Это больше подходит для небольших интерактивных анимаций, подобных сильному взаимодействию при игре в футбол путем прикосновения к экрану.anime.js
Это не очень выгодно.
3. PixiJs
Применимая сцена: интерактивная анимация, анимационные игры
Введение: PixiJS — это механизм 2D-рендеринга, и Pixi в основном отвечает за рендеринг изображений. Богатая интерактивная графика, анимация и игры могут быть созданы без необходимости углубляться в WebGL API или решать проблемы совместимости браузеров и устройств. Между тем, PixiJS имеет полную поддержку WebGL с плавным переходом на холст HTML5, если это необходимо. PixiJs использует WebGL для рендеринга по умолчанию. Вы также можете указать холст для рендеринга. WebGL не поддерживается в мобильных браузерах Android 4.4, но его можно изящно уменьшить с помощью холста.
Github: GitHub.com/Professor Pi Department/Pixi…Официальная документация:Профессор кафедры кожи.download/release/doc…Официальный сайт:www.pixijs.com/Примеры:Профессор Пи Департамент.IO/examples/#/…
Особенности (из официальной документации):
- служба поддержки
WebGL渲染
- служба поддержки
canvas 渲染
(Официально PixiJS теперь самый быстрый в рендеринге холста) - очень прост в использовании
API
- Богатые интерактивные события, такие как события полной мыши и мобильного касания.
-
Pixi
использовать иCanvas Drawing
Почти идентичный API, но другойCanvas
API для рисования, графика, нарисованная с помощью Pixi, выполняется черезWebGL
существуетGPU
визуализировать на - Есть также ряд функций, которые необходимо понять после изучения PixiJs.
Преимущество:
- Самое большое преимущество - пройти
WebGL
вызывать GPU для рендеринга анимации, что значительно повышает производительность - Не требует глубоких знаний
WebGL API
или浏览器兼容性
(по следующей причине) - служба поддержки
canvas
Резервный вариант, не поддерживаемый текущим устройствомWebGL
час,PixiJs
Будет использованоcanvas渲染
анимация - полный
DOCS
, более активное сообщество, способствующее углубленному обучению. Однако я считаю, что стоимость обучения PixiJ относительно высока.
недостаток:
- Во-первых, это проблема совместимости, WebGL находится в разработке.
Android 4.4
Он не поддерживается и может быть понижен только с помощью холста. - Pixi в основном отвечает за отрисовку экрана, и многие другие разработчики функций должны писать или использовать его с другими библиотеками, но, согласно текущей точке зрения, это соответствует нашим потребностям.
представление:
- Для мобильной версии
Android4.4
Вышеупомянутые мобильные телефоны, в дополнение к недостатку производительности, вызванному уровнем кода, вызывают рендеринг GPU через WebGL, и производительность по-прежнему гарантируется. Однако для Android 4.4 можно использовать только отрисовку холста, а производительность по-прежнему зависит от сложности анимации и оптимизации кода.
V. Резюме
Для различных нужд анимации я собрал три библиотеки анимации в разных сценариях. Для анимации отображения мы можем использовать первую схему, пусть студенты-дизайнеры предоставят анимацию, мы используем экспортированную анимациюJSON
, возвращает анимацию кsvg/canvas/html
. Если сцена интерактивная или вам нужно сделать небольшую игру, вы можете использовать третье решениеPixiJs
,пройти черезWebGL
Для рендеринга использовать аппаратные ресурсы, значительно повысить производительность, в плане совместимости, для тех, кто не поддерживаетWebGL
браузер, вы можете использоватьcanvas渲染
Приходить平稳回退
. Последний сценарий — слабое взаимодействие и сильное отображение.В этом сценарии пользователь часто нажимает, чтобы приостановить выполнение соответствующей операции, и продолжает воспроизводить анимацию после завершения операции.交互方面比较偏弱
, в этом сценарии можно использовать вторую схемуAnime.js
, Anime.js не только поддерживает все свойства css, но также контролирует различные состояния выполнения анимации с помощью временной шкалы, обратного вызова и элементов управления воспроизведением. И совместимость отвечает нашим потребностям с точки зрения производительности, если она не вызывает слишком много页面回流
, используйте преобразование, чтобы больше работать с составным слоем, и производительность по-прежнему в порядке (чтобы попробовать больше, производительность по-прежнему хороша из нескольких примеров, которые я видел). Наконец, проанализировав с точки зрения спроса, сделайте простой небольшой рейтинг по стоимости обучения:PixiJs > Anime.js > lottie
6. Справочник по анализу производительности анимации
- Обеспечивает высокопроизводительную интерактивную анимацию со скоростью до 60 кадров в секунду.
- RequestaniMationFrame лучше
- Используйте инструменты разработчика браузера для обнаружения производительности анимации CSS [Инструменты]
- Анимация 60FPS с CSS3
- Аппаратное ускорение анимации CSS
- Рекомендации по производительности веб-анимации
7. Справочные ссылки
- Основное различие между Canvas и SVG
- Холст для обмена игровой практикой
- Прогрессивные анимационные решения
- Исследование интерактивного динамического эффекта руки-дао
- SegmentFault Technology Weekly Vol.20 - Рисование звездного неба на холсте
- Настройка кривой Безье [Инструмент]
- Интерфейс, который не может делать анимацию, не является хорошей разработкой
- Серия обмена игровой практикой