SVG-анимация не работает на IE11

У меня действительно простая анимация загрузки, которая отлично работает на Firefox и Chrome, но в IE11 она не показывает SVG-рисунок.

Вот полный пример: Образец JSFiddle

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>

Анимация, которая представляет собой вращение, работает в IE11, но SVG, представляющий собой круг, не отображается.

Есть идеи?

Я просто не могу понять, что не поддерживается IE11.

Ответы

Ответ 1

Только Microsoft Edge будет поддерживать переходы и анимацию CSS SVG, особенно stroke-dasharray.

Пожалуйста, ознакомьтесь с документами Microsoft для разработчиков:

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

Позволяет CSS-переходам и анимациям применяться к элементам SVG.
Нефиксированная версия: сборка Microsoft Edge 10240+

Как вы можете видеть в моей развилке вашего примера. Вы не видели вращение загрузчика из-за отсутствия атрибута stroke в вашем элементе circle.

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

Вы можете видеть, как это может вращаться сейчас. Но вам придется проверить, является ли браузер IE, и настроить ваш stroke-dasharray, чтобы он был больше. Поскольку IE11 и ниже не поддерживают анимацию SVG stroke-dasharray и stroke-dashoffset с помощью CSS-анимации или переходов, если это не сборка Microsoft Edge 10240+.

Но если вам нужно кросс-браузерное решение для анимации SVG, особенно stroke-dasharray и stroke-dashoffset, тогда изучите использование библиотеки анимации JS, такой как GreenSock Animation Platform (GSAP). Использование DrawSVGPlugin

https://greensock.com/drawSVG

Ответ 2

IE не поддерживает анимацию CSS элементов SVG. Он также не поддерживает стандартные встроенные анимации SMIL, которые SVG имеет.

Если вы преобразуете свою анимацию в родные анимации SVG, вы можете заставить ее работать с помощью библиотеки FakeSmile. В противном случае вам понадобится использовать альтернативный вариант для IE - например, анимированный gif или что-то еще.

Ответ 3

IE11 поддерживает анимацию CSS3, но не на дочерних узлах элемента SVG. Вы можете анимировать сам узел SVG, поэтому мое решение состоит в том, чтобы разбить части на отдельные SVG и анимировать их с помощью CSS3.

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

Это даже будет работать, если IE11 находится в режиме совместимости, если вы добавите метатег

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

Ответ 4

Для тех, у кого есть проблемы с этим, у меня есть обходной путь.

У меня был полный SVG с идентификаторами и анимациями CSS, все работающие идеально подходят для всех других основных браузеров.

У меня SVG вставлен в HTML, поэтому я могу получить доступ к каждому элементу с помощью анимации CSS.

Чтобы это сработало, вы должны иметь свой SVG с позицией:

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

... внутри контейнера .svgcontent (или того, что вы хотите назвать)

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

Это принимает все элементы массива objs и вставляет их как полный SVG за первым (вы можете изменить prepend на append, чтобы изменить это поведение).

И SVG будет иметь тот же идентификатор, что и объект, поэтому анимация CSS будет применяться к полному SVG, а не к объекту SVG.

И что это!