css internet-explorer animation svg explorer

css - La animación SVG no funciona en IE11



internet-explorer animation (4)

IE no admite animación CSS de elementos SVG. Tampoco admite las animaciones SMIL incorporadas estándar que tiene SVG.

Si convierte su animación en animaciones SVG nativas, tal vez podría hacer que funcione utilizando la biblioteca FakeSmile . De lo contrario, necesitará usar una alternativa alternativa para IE, como un gif animado o algo así.

Tengo una animación de carga realmente simple que funciona perfectamente en Firefox y Chrome, pero en IE11 no muestra la figura SVG.

Aquí está el ejemplo completo: JSFiddle sample

SVG:

<svg class="circular-loader" viewBox="25 25 50 50"> <circle class="loader-path" cx="50" cy="50" r="20" fill="none" stroke-width="2" stroke-miterlimit="10"/> </svg>

La animación, que es una rotación, está funcionando en IE11, pero el SVG, que es un círculo, no se muestra.

¿Alguna idea?

Simplemente no puedo entender qué no es compatible con IE11.


IE11 admite animaciones CSS3 pero no en nodos secundarios de un elemento SVG. Puede animar el nodo SVG en sí mismo, por lo que mi solución es dividir las partes en SVG separadas y animarlas con CSS3.

https://codepen.io/getsetbro/full/Bxeyaw/

Esto incluso funcionará si IE11 está en modo de compatibilidad si agrega la metaetiqueta

<meta http-equiv="X-UA-Compatible" content="IE=edge" />


Para cualquiera que tenga problemas con esto, tengo una solución alternativa.

Tenía un SVG completo con ID y animaciones CSS, todo funcionaba perfecto para todos los demás navegadores principales.

Tengo mi SVG insertado en el HTML, por lo que puedo acceder a todos los elementos con animaciones CSS.

Para que esto funcione, debe tener su SVG con posición:

absolute; top: 0px; left: 0px,

... dentro de un contenedor .svgcontent (o como quieras llamarlo)

Guión:

var IE = (navigator.userAgent.indexOf("Edge") > -1 || navigator.userAgent.indexOf("Trident/7.0") > -1) ? true : false; objs = [ ''#file1'', ''#file2'',''#file3'',''#file4'',''#file5'',''#file6'',''#file7'',''#file8'',''#file9'',''#file10'',''#file11'', ''#bottom'' ]; if ( IE ){ objs.forEach(function (item) { item = $(item); id = item.attr(''id''); svgcontent = item.closest(''.svgcontent'') svg = item.closest(''svg''); svgattrs = '' width=''+svg.attr(''width'')+'' height=''+svg.attr(''height'')+'' '' html = ''<svg id="''+id+''" ''+svgattrs+''>''+item.html()+''</svg>''; item.remove(); $(svgcontent).prepend(html); }); }

Esto toma todos los elementos en la matriz objs , e insértalos como un SVG completo detrás del primero (puede cambiar el prepend para append para cambiar este comportamiento).

Y el SVG tendrá la misma identificación que el objeto, por lo que el animado CSS se aplicará a un SVG completo, no a un objeto SVG.

¡Y eso es!


Solo Microsoft Edge admitirá transiciones y animaciones CSS SVG ... especialmente stroke-dasharray .

Consulte los documentos de desarrollador de Microsoft:

https://dev.windows.com/en-us/microsoft-edge/platform/status/csstransitionsanimationsforsvgelements

Permite que las transiciones y animaciones CSS se apliquen a elementos SVG.
Versión sin prefijo: Microsoft Edge build 10240+

Como puedes ver en mi tenedor de tu ejemplo. No estaba viendo girar el cargador debido a que no tenía el atributo de stroke en su elemento circle .

https://jsfiddle.net/z8w4vuau/50/

Puedes ver cómo puede girar ahora. Pero tendrá que verificar si el navegador es IE y ajustar su stroke-dasharray para que sea un guión más grande. Dado que IE11 y versiones posteriores no admiten animación SVG stroke-dasharray y stroke-dashoffset con animación CSS o transiciones, a menos que sea Microsoft Edge build 10240+.

Pero si necesita una solución de navegador cruzado para animar SVG, especialmente stroke-dasharray y stroke-dashoffset . Luego, considere el uso de una biblioteca de animación JS como la Plataforma de animación GreenSock ( GSAP ). Usando DrawSVGPlugin

DrawSVGPlugin