Статьи

Создавайте потрясающие приложения с помощью анимации CSS3

Сегодняшние приложения HTML5 могут обеспечить потрясающий опыт благодаря новым спецификациям CSS3. Одним из них является CSS3 анимация . Это может помочь вам создать богатую анимацию на элементах HTML. Это может обеспечить интересные отзывы для пользователей и обеспечивает быстрый и плавный пользовательский интерфейс. Поскольку эти новые анимации в большинстве случаев ускоряются графическим процессором, они определенно поднимают планку качества нового поколения приложений HTML5.

В соответствии со спецификацией «Модуль анимации CSS уровня 3» на сайте W3C , в анимации CSS3 представлены определенные анимации, в которых указываются значения, которые свойства CSS будут принимать в течение заданного интервала времени. Эта спецификация является расширением CSS Transitions .

Поскольку CSS3 Animation является расширением для переходов CSS3 , вам следует сначала прочитать статью моего коллеги Дэвида Катухе о переходах здесь: Введение в переходы CSS3 .

В этой статье мы увидим интересную демонстрацию, рассказывающую о возможностях CSS3-анимации, о том, как создавать простые анимации и как справляться с отступлением в JavaScript:

  1. CSS3 анимации
  2. Поддержка браузеров
  3. CSS3 анимация JavaScript резервная библиотека
  4. Вывод

Давайте сначала начнем с быстрой демонстрации, что такое анимация CSS3. Вот пример анимации Star Wars AT-AT, которая использует анимации CSS3 для анимации частей транспорта (и которая будет использовать JavaScript, если ваш браузер не поддерживает анимации CSS3):

Вы можете протестировать этот образец также в отдельном окне здесь: http://david.blob.core.windows.net/html5/css3atat/index.htm

Примечание: этот образец был успешно протестирован с нативной анимацией под IE10 PP3 / PP4, Chrome 15, Firefox 8 и iPad 2 и с JS-резервом под IE9 для настольных и мобильных устройств (Windows Phone). По неизвестной причине, он ведет себя странно в Opera 11.50, но отлично работает с 11.60. Более того, наша замечательная платформа для ведения блогов большую часть времени форсирует механизм рендеринга IE9 через метатег. Чтобы вернуть его в режим стандартов IE10, нажмите клавишу F12 и измените значение «Режим документа» обратно на IE10. В противном случае просмотрите демонстрацию в отдельном окне.

Этот образец основан на потрясающей работе Энтони Кальзадиллы . Вы можете посмотреть другие невероятные демонстрации на его сайте здесь: http://www.anthonycalzadilla.com . Я большой поклонник примера дурака, использующего SVG и CSS3 Animation, например.

CSS3 анимации

Вступление

Давайте сначала рассмотрим, что вы можете играть, чтобы создать анимацию. CSS3 Animations работает в основном с теми же значениями, что и CSS3 Transition.

Вот они:

  • цвет : интерполируется с помощью красного, зеленого, синего и альфа-компонентов (каждый рассматривается как число, см. ниже)
  • длина : интерполируется как действительные числа.
  • Процент : интерполируется как действительные числа.
  • целое число : интерполируется через дискретные шаги (целые числа). Интерполяция происходит в реальном числовом пространстве и преобразуется в целое число с помощью floor ().
  • число : интерполируется как действительные (с плавающей запятой) числа.
  • список трансформации : см. спецификацию CSS Transforms: http://www.w3.org/TR/css3-2d-transforms/
  • прямоугольник : интерполируется через компоненты x, y, width и height (обрабатывая каждый как число).
  • видимость : интерполируется через дискретный шаг. Интерполяция происходит в реальном числовом пространстве между 0 и 1, где 1 «видимо», а все остальные значения «скрыты».
  • shadow : интерполируется через компоненты color, x, y и blur (обрабатывая их как цвет и числа, где это уместно). В случае, когда есть списки теней, более короткий список заполняется в конце тенями, цвет которых прозрачен, а все длины (x, y, blur) равны 0.
  • градиент : интерполируется через позиции и цвета каждой остановки. Они должны иметь одинаковый тип (радиальный или линейный) и одинаковое количество остановок для анимации.
  • сервер рисования (SVG): интерполяция поддерживается только между: градиент в градиент и цвет в цвет. Затем они работают, как указано выше.
  • Список разделенных пробелами выше : если списки имеют одинаковое количество элементов, каждый элемент в списке интерполируется с использованием приведенных выше правил. В противном случае, нет интерполяции.
  • свойство сокращения : если все части сокращения могут быть анимированы, тогда интерполяция выполняется так, как если бы каждое свойство было задано индивидуально.

И следующие свойства должны поддерживаться для анимации:

  • цвет фона ( цвет )
  • фоновое изображение ( только градиенты )
  • background-position ( процент и длина )
  • цвет рамки нижний ( цвет )
  • граница нижней ширины ( длина )
  • бордюрный цвет ( цвет )
  • Цвет рамки слева ( цвет )
  • border-left-width ( длина )
  • рамка-цвет справа ( цвет )
  • border-right-width ( длина )
  • интервал границы ( длина )
  • пограничный верхний цвет ( цвет )
  • border-top-width ( длина )
  • ширина бордюра ( длина )
  • низ ( длина и процент )
  • цвет ( цвет )
  • обрезать ( прямоугольник )
  • размер шрифта ( длина и процент )
  • Вес шрифта ( число )
  • сетка- * (разная)
  • высота ( длина и процент )
  • слева ( длина и процент )
  • межбуквенный интервал ( длина )
  • высота строки ( число, длина и процент )
  • нижнее поле ( длина )
  • поле слева ( длина )
  • поле справа ( длина )
  • поле-вершина ( длина )
  • максимальная высота ( длина и процент )
  • максимальная ширина ( длина и процент )
  • минимальная высота ( длина и процент )
  • минимальная ширина ( длина и процент )
  • непрозрачность ( число )
  • цвет контура ( цвет )
  • контурное смещение ( целое число )
  • контурная ширина ( длина )
  • padding-bottom ( длина )
  • отступ слева ( длина )
  • правый отступ ( длина )
  • padding-top ( длина )
  • справа ( длина и процент )
  • текстовый отступ ( длина и процент )
  • текстовая тень ( тень )
  • верх ( длина и процент )
  • выравнивание по вертикали ( ключевые слова, длина и процент )
  • видимость ( видимость )
  • ширина ( длина и процент )
  • интервал между словами ( длина и процент )
  • z-индекс ( целое число )
  • зум ( число )

SVG

Свойства объектов SVG являются анимируемыми, когда они определены как animatable: true в спецификации SVG: http://www.w3.org/TR/SVG/struct.html . Но в то время, когда эта статья была написана, мне не удалось объединить CSS3 Animation непосредственно на SVG-элементах ни в одной из последних версий браузеров. Сегодняшние примеры в сети делают небольшую хитрость: они встраивают ресурсы SVG в различные DIV, анимированные с помощью CSS3, как пример «Я дурак» .

Объявления

Чтобы объявить анимацию в файле CSS, вот тип общего кода, который вам нужно написать:

  @keyframes name_of_the_animation {

   из {

     property_to_animate: initial_value;

   }

   50% {

     property_to_animate: middle_value;

   }

   к {

     property_to_animate: final_value;

   }

 } 

Который также можно написать так:

  @keyframes name_of_the_animation {

   0% {

     property_to_animate: initial_value;

   }

   50% {

     property_to_animate: middle_value;

   }

   100% {

     property_to_animate: final_value;

   }

 } 

Это определение анимации объявляет 3 шага 0, 50 и 100%. Вы должны как минимум установить шаги от (или 0%) и до (или 100%), чтобы создать правильную анимацию (минимум 2 шага). Сделав это, вы можете добавить столько ключевых кадров, сколько захотите, от 0 до 100%, чтобы точно обрабатывать различные этапы анимации.

Как только определение объявлено, вы можете привязать его к элементу с помощью классических селекторов CSS3, и вам также потребуется настроить параметры анимации. Вот тип общих блоков, которые вы увидите:

  #id_of_the_html_element {

     имя-анимации: name_of_the_animation;

     продолжительность анимации: число_секунд с;

     анимация-число итераций: число |  бесконечный;

 } 

Чтобы лучше понять, давайте рассмотрим реальный образец. Прежде всего, поскольку спецификация CSS3 Animations все еще находится на стадии разработки, вам необходимо использовать соответствующий префикс поставщика. Давайте использовать IE10 в качестве примера с префиксом –ms. Посмотрим теперь, как движется голова нашего AT-AT.

Вот объявление анимации:

  @ -ms-ключевые кадры rotate-skull {

     0% {

         -ms-transform: rotate (0deg)

     }

     25% {

         -ms-transform: повернуть (15 градусов)

     }

     50% {

         -ms-transform: повернуть (-5 градусов)

     }

     55% {

         -ms-transform: rotate (0deg)

     }

     75% {

         -ms-transform: повернуть (-10 градусов)

     }

     100% {

         -ms-transform: rotate (0deg)

     }

 } 

У нас есть 6 шагов (0, 25, 50, 55, 75 и 100%), работающих над атрибутами трехмерного преобразования CSS3 путем изменения значения поворота.

Затем анимация применяется с помощью этого правила CSS:

  #череп

 {

     -ms-animation-name: rotate-skull;

     -ms-анимация-продолжительность: 7 с;

     -ms-animation-iteration-count: бесконечный;

 } 

Мы нацелены на элемент <div> с id= skull « id= skull » и применяем анимацию с именем « rotate-skull ». Анимация должна быть завершена за 7 секунд и проигрываться бесконечное количество раз.

Вот живой результат, если ваш браузер поддерживает CSS3 Animations:

Мы могли бы написать это правило более коротким способом, используя сокращенное свойство animation:

  #skull {

     -ms-анимация: вращение-череп 7с бесконечно;

 } 

Анимация будет запущена, как только будет применено соответствующее правило. Затем вы можете воспроизводить или останавливать анимацию просто с помощью JavaScript или CSS3, чтобы поиграть с классами, затронутыми тегом .

Нелинейные анимации

Свойство animation-timer-function можно использовать, если вы хотите нелинейную анимацию. Вы даже можете смешивать тип функций синхронизации во время каждого ключевого кадра.

В основном, CSS3-анимации будут использовать кубическую кривую Безье для сглаживания анимации, вычисляя различную скорость в течение ее продолжительности.

Поддерживаются следующие функции:

  • линейный : постоянная скорость
  • cubic-bezier : скорость будет рассчитываться в соответствии с кубической кривой Безье, определяемой двумя контрольными точками: P0 и P1 (поэтому здесь вам нужно будет определить 4 значения: P0x, P0y и P1x, P1y.
  • легкость : скорость будет вычислена с помощью кубического Безье (0,25, 0,1, 0,25, 1)
  • непринужденность : скорость будет вычислена с помощью кубического Безье (0,42, 0, 1, 1)
  • easy-inout : скорость будет вычислена с помощью кубического Безье (0,42, 0, 0,58, 1)
  • замедление : скорость будет вычислена с помощью кубического Безье (0, 0, 0,58, 1)

Вот инструмент моделирования, написанный Дэвидом Катухе, который использует чистый JavaScript, чтобы показать влияние каждой функции синхронизации:

Примечание: этот инструмент использует встроенный SVG, поддерживаемый Firefox, Chrome, Opera 11.60 и IE9 / 10. Таким образом, он не будет работать должным образом под Opera 11.50 и Safari на iPad.

Это потрясающий инструмент, использующий SVG. Вы даже можете играть с помощью мыши на пользовательской функции для редактирования кривой. Если вы хотите узнать больше об этом инструменте, пожалуйста, снова загляните в статью Дэвида.

Если ваш браузер поддерживает анимацию CSS3, давайте теперь посмотрим простую демонстрацию с использованием функций замедления для анимации тега canvas, содержащего анимированный спрайт с помощью CSS3.

Вот код анимации CSS3, который будет использоваться в этой демонстрации:

  @ -ms-keyframes demo {

     из {

     -ms-animation-timer-function: легкость;

     -ms-transform: translateX (0px);

     }

     50% {

     -ms-animation-хронирование-функция: легкость в;

     -ms-transform: translateX (300px);

     }

     к {

     -ms-animation-timer-function: облегчение входа;

     -ms-transform: translateX (900px);

     }

 }

 #testCanvas

 {

     -ms-animation-delay: 0 с;

     -ms-анимация-продолжительность: 6 с;

     -ms-animation-iteration-count: бесконечный;

     -ms-animation-name: demo;

 } 

А также все варианты префиксов поставщиков, чтобы убедиться, что он работает также в Google Chrome и Mozilla Firefox. И вот живой выход:

Если ваш браузер не поддерживает CSS3 Animation, но поддерживает canvas, должна отображаться работающая анимация спрайта, но персонаж не будет перемещаться по ширине экрана.

Примечание. Если вы хотите узнать больше об анимации холста и спрайтов, ознакомьтесь с этой статьей: HTML5 Gaming: анимация спрайтов в Canvas с помощью EaselJS

задержка

Свойство animation-delay позволяет просто запустить анимацию через некоторое время после ее применения.

События

3 события могут быть вызваны во время анимации. Они называются « Начало анимации», « Конец анимации» и « Итерация анимации». В зависимости от вашего браузера правильное имя будет, например:

  • Chrome: webkitAnimationEnd
  • Firefox: mozAnimationEnd
  • Internet Explorer: MSAnimationEnd

Событие даст вам следующие детали:

  • animationName : имя анимации, вызвавшей событие
  • elapsedTime : время, в течение которого анимация работала, в секундах

Вот пример использования для IE10:

  elementToAnimate.addEventListener ("MSAnimationEnd", function () {

     оповещение («конец!»);

 }, ложный); 

Подробнее о CSS3-анимации

CSS3 анимация действительно полезна по двум основным причинам:

  • Аппаратное ускорение: анимация CSS3 в большинстве случаев напрямую обрабатывается графическим процессором и может давать более плавные результаты. Это может быть очень интересным подходом для мобильных устройств.
  • Лучшее разделение между кодом и дизайном : я знаю, что есть некоторые споры по этому вопросу, но с Дэвидом мы думаем, что разработчик не должен знать как можно больше об анимации или чем-либо, связанном с дизайном. Точно так же дизайнер / художник не должен знать о JavaScript. CSS3 предлагает такую ​​возможность и может позволить дизайнерам работать со своими классическими инструментами для создания соответствующей анимации на элементах, между экранами и т. Д.

Чтобы подчеркнуть эту важность для производительности, в следующей HTML5-игре, которую я написал с использованием полнокадрового <canvas>: HTML5 Platformer работает на скорости 60 кадров в секунду в IE9 / IE10 на моем ПК, но на скорости 10 кадров в секунду на iPad 2. Это связано с тем, что его процессор намного более ограничен, и iPad в настоящее время не поддерживает аппаратное ускорение <canvas>. Использование CSS3 Transitions / Animations для анимации нескольких более мелких элементов <canvas> может значительно повысить производительность этой игры. Подумайте об этом, когда вы нацеливаетесь на мобильные устройства!

Поддержка браузеров

Поскольку предварительный просмотр платформы 3 IE10 доступен в Windows Developer Preview , мы поддерживаем анимацию CSS3. И, как вы можете видеть из следующего отчета, созданного caniuse.com , анимация CSS3 теперь поддерживается во многих браузерах:

browser support

Но так как спецификация еще не закончена ( рабочий проект ), вы должны использовать префиксы вендора, такие как -ms-, -moz-, -webkit-, -o-, чтобы сделать кросс-браузерное совместимое приложение.

Но вопрос может быть: как работать с браузерами, которые не поддерживают эту новую функцию?

Первый вариант — просто ничего не делать. Благодаря красоте постепенного ухудшения, вы можете просто позволить пользователю видеть статическое изображение, если вы работали правильно. Это, например, случай с этими двумя оригинальными образцами Энтони: я дурак! и чистый CSS3 AT-AT Walker . При просмотре в IE9, похоже, у нас есть только статическое изображение. При просмотре в IE10 тот же код показывает приятную анимацию. Пользователи IE10 получат расширенную версию, а IE9 по-прежнему сможет просматривать и правильно использовать веб-сайт. Чем современнее ваш браузер, тем больше визуального бонуса вы получите.

Второй вариант — обнаружить функцию с помощью библиотеки JS, например Modernizr, и попытаться предложить ту же анимацию с помощью библиотеки JavaScript, которая будет имитировать анимацию. Это то, что мы обычно называем резервным механизмом. К сожалению, сегодня я не нашел работающей и полной библиотеки JS, которая могла бы заменить анимацию CSS3, если она не поддерживается браузером.

Затем я написал образец библиотеки JS, более или менее специально разработанный для образца AT-AT.

CSS3 анимация JavaScript резервная библиотека

Анимации — это не что иное, как серия переходов, разделенных определенной продолжительностью, определенной с помощью ключевых кадров. Затем я повторно использовал концепции, созданные Дэвидом Катухе, в его библиотеке помощников переходов. Я позволю вам просмотреть его статью, чтобы проверить основы концепций кода.

Со своей стороны, я добавил некоторую поддержку для анимации значений поворота и перевода 2D-преобразования CSS3 и способа итерации по ключевым кадрам.

Вот основная часть библиотеки, которую нужно просмотреть:

  // Анимационный объект

 // Для этого нужен целевой элемент HTML, имя анимации, продолжительность и количество итераций и

 // ключевые кадры, содержащиеся в объекте массива

 // Просмотр анимации просто как последовательность переходов, сыгранных определенное количество раз

 ANIMATIONSHELPER.animation = function (цель, имя, длительность, счетчик итераций, ключевые кадры) {

     // сохранение значений свойств

     this.name = имя;

     this.duration = длительность;

     this.iterationcount = iterationcount;

     this.target = target;

     var elapsedtime = 0;

     var keyframeduration = 0;

     var elapsedtime = 0;

     // Преобразование процента каждого ключевого кадра в значение длительности

     для (var i = 0; i <keyframes.length; i ++) {

         keyframeduration = ((ключевые кадры [i] .percentage * длительность) / 100) - истекшее время;

         ключевые кадры [i] .duration = ключевой кадр;

         прошедшее время + = ключевой кадр;

     }

     this.currentTransition = {isPlaying: false};

     this.keyframes = ключевые кадры;

     this.keyframesCount = keyframes.length;

     this.currentKeyFrameIndex = 0;

     // Функция nextTransition () возвращает следующий переход для запуска

     // на основе текущего ключевого кадра для воспроизведения

     this.nextTransition = function (ключевой кадр, легкость, customEaseP1X, customEaseP1Y, customEaseP2X, customEaseP2Y) {

         var properties = [];

         var finalValues ​​= [];

         вар-переход;

         // По сравнению с оригинальным TRANSITIONSHELPER Дэвида Катухе

         // Нам нужен определенный код для игры со значениями свойств CSS3 2D Transform

         if (keyframe.propertyToAnimate === "transform") {

             for (var i = 0; i <keyframe.transformType.length; i ++) {

                 properties.push (keyframe.transformType [я] .type);

                 if (keyframe.transformType [i] .type == "rotate") {

                     finalValues.push ({deg: keyframe.transformType [i] .value1});

                 }

                 еще {

                     finalValues.push ({x: keyframe.transformType [i] .value1, y: keyframe.transformType [i] .value2});

                 }

             }

             // Создать новый переход

             переход = {

                 name: this.name + this.currentKeyFrameIndex,

                 target: this.target,

                 свойства: свойства,

                 finalValues: finalValues,

                 originalValues: ANIMATIONSHELPER.extractValues ​​(target.style [ANIMATIONSHELPER.currentTransformProperty], this.name),

                 продолжительность: ключевой кадр.дурация,

                 startDate: (новая дата) .getTime (),

                 currentDate: (новая дата) .getTime (),

                 легкость: легкость,

                 customEaseP1X: customEaseP1X,

                 customEaseP2X: customEaseP2X,

                 customEaseP1Y: customEaseP1Y,

                 customEaseP2Y: customEaseP2Y,

                 isPlaying: правда,

                 тип: "преобразование"

             };

             обратный переход;

         }

         // Если это классическое свойство для анимации, мы используем более или менее TRANSITIONSHELPER как есть

         еще {

             return TRANSITIONSHELPER.transition (this.target, keyframe.propertyToAnimate, keyframe.value, keyframe.duration, TRANSITIONSHELPER.easingFunctions.linear);

         }

     };

     // у каждого объекта анимации есть функция галочки

     // это будет вызываться каждые 17 мс (для достижения 60 кадров в секунду)

     // Этот тикер отслеживает текущее состояние перехода и

     // создаем новый переход, как только старый закончен / мертв

     this.tick = function () {

         if (this.iterationcount> 0) {

             if (! this.currentTransition.isPlaying) {

                 this.currentTransition = this.nextTransition (this.keyframes [this.currentKeyFrameIndex], ANIMATIONSHELPER.easingFunctions.linear);

                 // Мы используем наш собственный глобальный тикер только для 2D-преобразований

                 // В противном случае мы используем один из библиотеки TRANSITIONSHELPER

                 if (this.currentTransition.type === "transform") {

                     ANIMATIONSHELPER.currentTransitions.push (this.currentTransition);

                 }

                 this.currentKeyFrameIndex ++;

                 // Мы достигли последнего ключевого кадра (100%).  Мы начинаем с самого начала

                 if (this.currentKeyFrameIndex> = this.keyframesCount) {

                     this.currentKeyFrameIndex = 0;

                     this.iterationcount--;

                 }

             }

         }

     };

 }; 

Первая часть кода перебирает каждый ключевой кадр, чтобы вычислить точную продолжительность, указанную для каждого процента. Затем мы определяем функцию nextTransition() которая будет динамически создавать следующий переход для воспроизведения на основе текущего индекса в коллекции ключевых кадров. Наконец, у нас есть функция tick() которая будет отслеживать текущее состояние примененного перехода. Когда переход завершен или завершен, он запрашивает следующий переход, помещает его в стек воспроизводимых переходов и перемещает индексы.

Эта функция tick() вызывается благодаря следующему коду:

  ANIMATIONSHELPER.launchAnimation = function (animation) {

     // Запуск сервиса тиков, если требуется

     if (ANIMATIONSHELPER.tickIntervalID == 0) {

         ANIMATIONSHELPER.tickIntervalID = setInterval (ANIMATIONSHELPER.tick, 17);

     }

     // Небольшое закрытие для запуска метода tick на соответствующем экземпляре анимации

     setInterval (function () {animation.tick ();}, 17);

 }; 

Наконец, у нас есть такой код, который помогает нам создавать ключевые кадры:

  // Объект для создания нового универсального ключевого кадра (таким образом, не работает со свойствами 2D-преобразования CSS3)

 ANIMATIONSHELPER.keyframe = функция (процент, propertyToAnimate, значение) {

     this.percentage = процент;

     this.propertyToAnimate = propertyToAnimate;

     this.value = значение;

 };

 // Объекты для построения определенных ключевых кадров вращения

 ANIMATIONSHELPER.rotationkeyframe = функция (процент, значение) {

     this.percentage = процент;

     this.propertyToAnimate = "transform";

     this.transformType = [];

     this.transformType.push (new ANIMATIONSHELPER.transformType ("rotate", value));

 }; 

Чтобы подчеркнуть его использование, давайте воссоздаем предыдущий простой пример черепа CSS3 Animation с этой библиотекой:

  // сколько раз вы хотели бы запустить анимацию

 var iterationsNumber = 100;

 var skullElement = document.getElementById ("skull");

 var keyframes = [];

 keyframes.push (новый ANIMATIONSHELPER.rotationkeyframe (25, 15));

 keyframes.push (новый ANIMATIONSHELPER.rotationkeyframe (50, -5));

 keyframes.push (новый ANIMATIONSHELPER.rotationkeyframe (55, 0));

 keyframes.push (новый ANIMATIONSHELPER.rotationkeyframe (75, -10));

 keyframes.push (новый ANIMATIONSHELPER.rotationkeyframe (100, 0));

 var animation1 = new ANIMATIONSHELPER.animation (skullElement, "rotate-skull", 7000,

                             iterationsNumber, keyframes);

 ANIMATIONSHELPER.launchAnimation (animation1, ANIMATIONSHELPER.easingFunctions.linear); 

И вот результат, который теперь будет работать в каждом браузере, поддерживающем CSS3 2D Transform:

Наконец, в самом первом примере, продемонстрированном в начале этой статьи, используется Modernizr для проверки поддержки анимации CSS3. Если это не так, он загружает код, который будет имитировать ключевые кадры, определенные в файле master.css, moz-master.css & ms-master.css:

  // Проверка поддержки CSS3-анимации

 if (! Modernizr.cssanimations) {

 // если это так, мы можем использовать нашу резервную библиотеку JS

     supportElement.innerHTML = "CSS3-анимация <strong> не поддерживается </ strong>";

     LoadJSAnimationsFallback ();

 }

 еще {

     // если поддерживается анимация CSS3, нам нечего делать.

     // Таблицы стилей * master.css будут автоматически применены и использованы.

     supportElement.innerHTML = "Поддерживаются анимации CSS3 <strong> </ strong>";

 } 

Функция LoadJSAnimationsFallback () определена в jsfallback-master.js, который просто содержит все объявления ключевых кадров и 19 анимаций, необходимых для имитации поведения, созданного Энтони в чистом CSS3. При таком подходе разработчик должен затем переписать все правила, используя библиотеку. Другой подход может состоять в том, чтобы проанализировать один из файлов CSS с помощью вызова XHR и динамически создавать вызовы JavaScript для библиотеки. Это требует больше работы, так как вам почти нужно переопределить спецификации CSS3-анимации в JavaScript!

Теперь у вас есть идея о том, как создать запасной механизм для поддержки большего количества браузеров, когда вы начнете использовать новейшие спецификации CSS3.

Вы можете скачать файлы для основного примера здесь: http://david.blob.core.windows.net/html5/css3atat/CSS3ATATNonMinified.zip

Он содержит незавершенные версии файлов animationsHelper.js, transitionsHelper.js, jsfallback-master.js JavaScript, а также различные файлы CSS3 declinaison для префиксов основных поставщиков.

Вывод

CSS3 Animations — это мощная технология, которая выводит приложения HTML5 на новый уровень. Он предлагает интересные сценарии. Дизайнеры могут использовать его для создания экранов пользовательского интерфейса нового поколения с плавной и плавной анимацией без необходимости разработчиков. Поскольку аппаратное ускорение происходит в большинстве случаев, разработчики также должны обратить внимание на эту спецификацию. Наконец, оба могли сотрудничать. Дизайнеры могут работать над серией предопределенных анимаций, охватывающих большинство сценариев. Затем разработчики могут создавать библиотеки JavaScript, которые будут реализовывать эти анимации. Эта библиотека может предложить прозрачным способом 2 реализации: динамическое создание CSS3 на лету или запасной вариант для старых браузеров.

Идти дальше

Другие полезные посты:

Если вам понравилось читать этот пост, вы полюбите Learnable ; место, чтобы узнать новые навыки и приемы у мастеров. Участники получают мгновенный доступ ко всем электронным книгам и интерактивным онлайн-курсам SitePoint, таким как Learn CSS3 .