SVG animation is not working on IE11

2019-01-03 00:24发布

I have a really simple loading animation that works perfectly on Firefox and Chrome, but in IE11 it's not showing the SVG figure.

Here is the full example: 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>

The animation, which is a rotation, is working on IE11, but the SVG, which is a circle, is not being displayed.

Any idea?

I just can't figure out what is not being supported by IE11.

4条回答
冷血范
2楼-- · 2019-01-03 00:38

IE does not support CSS animation of SVG elements. It also doesn't support the standard built-in SMIL animations that SVG has.

If you convert your animation to native SVG animations, you could perhaps get it working using the FakeSmile library. Otherwise you will need to use some alternative fallback for IE - such as an animated gif or something.

查看更多
Rolldiameter
3楼-- · 2019-01-03 00:43

Only Microsoft Edge will support SVG CSS Transitions and Animation.. especially stroke-dasharray.

Please see the Microsoft Developer Docs:

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

Allows CSS Transitions and Animations to apply to SVG elements.
Unprefixed version: Microsoft Edge build 10240+

As you can see in my fork of your example. You were not seeing the loader spin due to not having the stroke attribute on your circle element.

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

You can see how it can spin now. But you will have to check if the browser is IE and adjust your stroke-dasharray so it is larger dash. Since IE11 and below do not support animating SVG stroke-dasharray and stroke-dashoffset with CSS animation or transitions, unless it is Microsoft Edge build 10240+.

But if you need a cross browser solution to animate SVG, especially stroke-dasharray and stroke-dashoffset. Then look into using a JS animation library like the GreenSock Animation Platform (GSAP). Using the DrawSVGPlugin

https://greensock.com/drawSVG

查看更多
神经病院院长
4楼-- · 2019-01-03 00:45

IE11 supports CSS3 animations but not on child nodes of an SVG element. You can animate the SVG node itself so my solution is to break up the parts into separate SVGs and animate those with CSS3.

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

This will even work if IE11 is in compatibility mode if you add the meta tag

<meta http-equiv="X-UA-Compatible" content="IE=edge" />
查看更多
乱世女痞
5楼-- · 2019-01-03 00:49

For anyone having trouble with this, I have a workaround.

I had a full SVG with IDs and CSS animations, all working perfect for all the other major browsers.

I have my SVG inserted into the HTML, so I can access every item with CSS animations.

For this to work, you have to have your SVG with position:

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

... inside a container .svgcontent (or whatever you want to call it)

Script:

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);        
    });
}

This takes all the elements in the objs array, and insert them as a full SVG behind the first one (you can change prepend to append to change this behavior).

And the SVG is going to have the same id as the object, so the CSS animate is going to apply to a full SVG, not an SVG object.

And that's it!

查看更多
登录 后发表回答