Анимация масштабируемой векторной графики , открытого стандартного формата векторной графики на основе XML, возможна различными способами:
Библиотеки также были написаны как прокладка , чтобы предоставить текущим браузерам с поддержкой SVG поддержку SMIL. [9] Этот метод также известен как SVG+Time. [ необходима цитата ]
Поскольку SVG поддерживает Portable Network Graphics (PNG) и растровые изображения JPEG , его можно использовать для анимации таких изображений в качестве альтернативы APNG и Multiple-image Network Graphics (MNG).
Элементы анимации SVG были разработаны в сотрудничестве с рабочей группой, опубликовавшей несколько версий языка синхронизированной интеграции мультимедиа (SMIL). Рабочая группа SYMM (совместно с рабочей группой SVG) разработала спецификацию анимации SMIL, которая представляет собой набор функций анимации XML общего назначения . SVG включает в себя функции анимации, определенные в спецификации анимации SMIL, и предоставляет некоторые расширения, специфичные для SVG.
В июне 1998 года «Рабочая группа по синхронизированным мультимедиа» (известная как «SYMM» [10] ) в рамках Консорциума Всемирной паутины («W3C») опубликовала первую рекомендуемую версию спецификации, известную как «SMIL 1.0». [11] [12] Вскоре после публикации SMIL 1.0 в 1998 году группа компаний во главе с Microsoft опубликовала « Расширения интерактивных мультимедиа с заданным временем для HTML (HTML+TIME); расширение SMIL в веб-браузер ». [13] В течение следующих двух лет ведущий автор HTML+TIME (Патрик Шмитц) работал с рабочей группой SYMM, а также с рабочей группой SVG. Вскоре после публикации SMIL 2.0 Шмитц и соавтор Аарон Коэн (из Intel ) опубликовали SMIL Animation 4 сентября 2001 года. [14] [15] SVG 1.0 также стал рекомендацией W3C 4 сентября 2001 года.
Некоторые веб-браузеры добавили поддержку анимации SVG в 2000-х годах, включая Amaya еще в 2003 году, но анимация SVG поддерживалась только широко используемыми браузерами, начиная с 2010-х годов, в частности Firefox 4 (2011). Internet Explorer поддерживает анимацию ECMAScript, а его преемник Microsoft Edge поддерживает анимацию ECMAScript и CSS, начиная с версии 42.17134.
Следующие фрагменты кода демонстрируют три метода создания анимированных изображений SVG в совместимых браузерах. Соответствующие части выделены желтым цветом. Щелкните миниатюры изображений, чтобы увидеть их анимированные версии.
<?xml версия="1.0" кодировка="UTF-8" автономный="да"?><svg версия= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" ширина = "100%" высота = "100%" viewBox = "-4 -4 8 8" > <title> Анимация SVG с использованием SMIL </title> <circle cx= "0" cy= "1" r= "2" stroke= "red" fill= "none" > <animateTransform attributeName = "преобразование" attributeType = "XML" тип = "поворот" от = "0" к = "360" длительности = "1с" repeatCount= "неопределенно" /> </круг></svg>
<?xml версия="1.0" кодировка="UTF-8" автономный="да"?><svg версия= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" ширина = "100%" высота = "100%" viewBox = "-4 -4 8 8" > <title> Анимация SVG с использованием CSS </title> <стиль> @keyframes rot_kf { из { преобразование: поворот(0град); } для { преобразовать: повернуть(360 градусов); } } .rot { анимация: rot_kf 1с линейная бесконечность; } </стиль> <circle class= "гниль" cx= "0" cy= "1" r= "2" stroke= "blue" fill= "none" /> </svg>
<?xml версия="1.0" кодировка="UTF-8" автономный="да"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" width= "100%" height= "100%" viewBox= "-4-4 8 8" onload= "rotate(evt)" > <title> Анимация SVG с использованием ECMAScript </title> <скрипт> функция поворота(evt) { константный объект = evt.target.ownerDocument.getElementById('rot'); установитьИнтервал(() => { константа сейчас = новая Дата(); константа миллисекунды = now.getTime() % 1000; const градусы = миллисекунды * 0,36; // 360 градусов за 1000 мс object.setAttribute('transform', `rotate(${degrees})`); }, 20); } </скрипт> <circle id= "гниль" cx= "0" cy= "1" r= "2" stroke= "зеленый" fill= "нет" /> </svg>
Хотя пример выше работает, это не оптимальная реализация; анимация ограничена 50 кадрами в секунду (FPS). Использование requestAnimationFrame
обеспечивает лучшую производительность и может достигать 60 FPS:
<?xml версия="1.0" кодировка="UTF-8" автономный="да"?><svg version= "1.1" xmlns= "http://www.w3.org/2000/svg" xmlns:xlink= "http://www.w3.org/1999/xlink" width= "100%" height= "100%" viewBox= "-4 -4 8 8" onload= "init()" > <title> Анимация SVG с использованием requestAnimationFrame() </title> <скрипт> пусть возражают; функция инициализации() { объект = документ.getElementById('rot'); window.requestAnimationFrame(поворот); } функция поворота (временная метка) { константа миллисекунды = временная метка % 1000; const градусы = миллисекунды * 0,36; // 360 градусов за 1000 мс object.setAttribute('transform', `rotate(${degrees})`); window.requestAnimationFrame(поворот); } </скрипт> <circle id= "rot" cx= "0" cy= "1" r= "2" stroke= "green" fill= "none" /> </svg>
Ниже приведены атрибуты анимации, которые идентифицируют целевой атрибут для заданного целевого элемента, значение которого изменяется со временем. attributeName = "<attributeName>"
указывает имя целевого атрибута. Префикс XMLNS может использоваться для указания пространства имен XML для атрибута. Префикс будет интерпретироваться в области действия текущего элемента анимации.
attributeType = "CSS | XML | auto"
указывает пространство имен, в котором определены целевой атрибут и связанные с ним значения. CSS
указывает, что значение 'attributeName' является именем свойства CSS, определенного как анимируемое в данной спецификации. XML
указывает, что значение 'attributeName' является именем атрибута XML, определенного в пространстве имен XML по умолчанию для целевого элемента. Атрибут должен быть определен как анимируемый в данной спецификации. auto
Значение по умолчанию — 'auto'. Реализация должна сопоставить 'attribute Name' с атрибутом для целевого элемента. Реализация должна сначала выполнить поиск в списке свойств CSS для соответствующего имени свойства, и если ничего не найдено, выполнить поиск в пространстве имен XML по умолчанию для элемента.
Программное обеспечение MediaWiki wiki автоматически генерирует статические, неанимированные миниатюры изображений SVG. Просмотр фактического изображения .svg с каждой соответствующей страницы описания покажет его анимацию в совместимом браузере.
Существует несколько библиотек JavaScript для работы с анимацией SVG. Преимущество использования таких библиотек в том, что эти библиотеки часто решают проблемы несовместимости в браузерах с помощью абстракции . Примерами библиотек являются Raphaël и Velocity.js