В SVG2 большая часть функциональности SMIL должна быть доступна с помощью анимации CSS.
Но они все еще в черновике, и только хром начал реализовывать некоторые.
Кроме того, хром-сообщение - это сообщение об устаревании, оно еще не удалено из этого браузера, и я сомневаюсь, что другие браузеры, поддерживающие его, скоро удалят его.
Во всяком случае, вы можете уже достичь анимации SMIL, как браузер в браузере, не поддерживающий его (например, IE) благодаря полисам вроде javascript, например fakesmile.
К сожалению, скрипты в документах svg, загружаемых через элемент HTMLImage (<img>
), не будут работать. Поэтому вам нужно переключиться с тега <img>
на теги , <object>
или <embed>
. Эти теги позволяют выполнять скрипты, поэтому вам просто нужно импортировать полипол в ваш документ svg, а затем загрузить изображение, как вы это делали бы в теге <img>
.
Вот пример, который будет работать на IE:
SMILTest.svg
<svg width="120" height="120"
viewPort="0 0 120 120" version="1.1"
xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<rect x="10" y="10" width="100" height="100">
<animate attributeType="XML"
attributeName="x"
from="-100" to="120"
dur="10s"
repeatCount="indefinite"/>
</rect>
<script xlink:href="https://cdn.rawgit.com/FakeSmile/FakeSmile/master/smil.user.js"></script>
</svg>
index.html
...
<object data="SMILTest.svg"></object>
...
Live example
Если все ваши SVG изображения подаются с того же домена, как главной странице, вы можете также автоматизировать его с чем-то вроде этого:
window.addEventListener('load', function(){
var obj = document.querySelectorAll('object[data*=".svg"],iframe[src*=".svg"],embed[src*=".svg"]');
Array.prototype.forEach.call(obj, function(o){
var doc = o.contentDocument;
var s = document.createElementNS('http://www.w3.org/2000/svg','script');
doc.documentElement.appendChild(s);
s.setAttributeNS('http://www.w3.org/1999/xlink', 'xlink:href', 'https://cdn.rawgit.com/FakeSmile/FakeSmile/master/smil.user.js');
});
});
Live example
Вы можете использовать SMIL, используя js polyfill, например fakesmile, через теги iframe или object. – Kaiido
Является ли встраивание всей веб-страницы для каждого изображения единственным вариантом сейчас? Потому что это не кажется оптимальным. У меня возникли проблемы с тем, что эта функция удаляется без «практической» альтернативы. –