SVG Circle 在 Edge 中没有动画
SVG Circle not animated in Edge
下面的 svg 在除 Edge 之外的所有浏览器中都能完美地动画化(惊喜!)。
<svg width="80" height="24" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#555">
<circle cx="15" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
</svg>
我尝试添加 px
作为单位,但没有成功。
感谢您的提示!
我尝试检查你的代码并参考 MDN 文档。
我看到您在代码中使用了 animate、attributeName、from、to、dur 属性。
Animate Edge 版本 <=79 受支持。
而 attributeName、from、to、dur
的兼容性未知
参考:
我认为这就是您的代码无法在 MS edge 旧版浏览器中运行的原因。
我建议您建议您的客户使用 MS Edge Chromium 浏览器,或者您可以删除动画或显示图像代替动画来避免此问题。
阅读评论和答案后,我决定使用清晰的 CSS 动画,而不是 SVG。我从 https://projects.lukehaas.me/css-loaders/ 中获取了代码,我的 "solution" 看起来像这样:
<style>
.loader,
.loader:before,
.loader:after {
border-radius: 50%;
width: 2.2em;
height: 2.2em;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation: load7 1.3s infinite ease-in-out;
animation: load7 1.3s infinite ease-in-out;
}
.loader {
color: #888;
font-size: 10px;
margin: 80px auto;
position: relative;
text-indent: -9999em;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
.loader:before,
.loader:after {
content: '';
position: absolute;
top: 0;
}
.loader:before {
left: -3.5em;
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.loader:after {
left: 3.5em;
}
@-webkit-keyframes load7 {
0%,
80%,
100% {
box-shadow: 0 2.2em 0 -1.3em;
}
40% {
box-shadow: 0 2.2em 0 0;
}
}
@keyframes load7 {
0%,
80%,
100% {
box-shadow: 0 2.2em 0 -1.3em;
}
40% {
box-shadow: 0 2.2em 0 0;
}
}
</style>
<div class="loader">Loading...</div>
下面的 svg 在除 Edge 之外的所有浏览器中都能完美地动画化(惊喜!)。
<svg width="80" height="24" viewBox="0 0 120 30" xmlns="http://www.w3.org/2000/svg" fill="#555">
<circle cx="15" cy="15" r="15">
<animate attributeName="r" from="15" to="15"
begin="0s" dur="0.8s"
values="15;9;15" calcMode="linear"
repeatCount="indefinite" />
<animate attributeName="fill-opacity" from="1" to="1"
begin="0s" dur="0.8s"
values="1;.5;1" calcMode="linear"
repeatCount="indefinite" />
</circle>
</svg>
我尝试添加 px
作为单位,但没有成功。
感谢您的提示!
我尝试检查你的代码并参考 MDN 文档。
我看到您在代码中使用了 animate、attributeName、from、to、dur 属性。
Animate Edge 版本 <=79 受支持。
而 attributeName、from、to、dur
的兼容性未知参考:
我认为这就是您的代码无法在 MS edge 旧版浏览器中运行的原因。
我建议您建议您的客户使用 MS Edge Chromium 浏览器,或者您可以删除动画或显示图像代替动画来避免此问题。
阅读评论和答案后,我决定使用清晰的 CSS 动画,而不是 SVG。我从 https://projects.lukehaas.me/css-loaders/ 中获取了代码,我的 "solution" 看起来像这样:
<style>
.loader,
.loader:before,
.loader:after {
border-radius: 50%;
width: 2.2em;
height: 2.2em;
-webkit-animation-fill-mode: both;
animation-fill-mode: both;
-webkit-animation: load7 1.3s infinite ease-in-out;
animation: load7 1.3s infinite ease-in-out;
}
.loader {
color: #888;
font-size: 10px;
margin: 80px auto;
position: relative;
text-indent: -9999em;
-webkit-transform: translateZ(0);
-ms-transform: translateZ(0);
transform: translateZ(0);
-webkit-animation-delay: -0.16s;
animation-delay: -0.16s;
}
.loader:before,
.loader:after {
content: '';
position: absolute;
top: 0;
}
.loader:before {
left: -3.5em;
-webkit-animation-delay: -0.32s;
animation-delay: -0.32s;
}
.loader:after {
left: 3.5em;
}
@-webkit-keyframes load7 {
0%,
80%,
100% {
box-shadow: 0 2.2em 0 -1.3em;
}
40% {
box-shadow: 0 2.2em 0 0;
}
}
@keyframes load7 {
0%,
80%,
100% {
box-shadow: 0 2.2em 0 -1.3em;
}
40% {
box-shadow: 0 2.2em 0 0;
}
}
</style>
<div class="loader">Loading...</div>