简单的 SVG SMIL 未在 Safari 中显示
Simple SVG SMIL not showing in Safari
此代码笔适用于所有浏览器,但 Safari 除外。它并不复杂,但我对 SVG 和 SMIL 还很陌生,所以我可能遗漏了一些不受支持的东西?
http://codepen.io/jaminroe/pen/rVoPRp
简化版,只有2个形状:
<svg height="100px" width="100px" viewBox="0 0 50 50" >
<path fill="#4E3BC1" >
<animate
attributeName="d"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1;"
values="M 0 50
c0-12 0-37 0-50 8 0 17 0 25 0 8 0 20 0 25 0 0 13 0 38 0 50-5 0-17 0-25 0-8 0-17 0-25 0
Z;
m 41 50
c-8 0-19 0-27 0-4-5-10-16-14-23 5-9 9-16 14-23 8 0 19 0 27 0 4 8 9 16 14 23-4 8-9 16-14 23
Z;"
/>
<animate
attributeName="fill"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1;"
values="#1eb287;
#1ca69e;"
/>
</path>
</svg>
谢谢!
删除每个 keySplines 属性末尾的分号。
我也是新手,刚遇到同样的问题。您可能知道,keyTimes 需要比 keySplines 多一个值(在您的例子中是 2 个 keyTimes 和 1 个 keySpline)。 keySplines 属性末尾的分号可能使 Safari 假设后面有第二个值,这意味着您现在有 2 个 keyTimes 值和 2 个 keySplines 值。
这打破了整个动画,什么也没有显示。
这是您在 Safari 中删除了分号的代码段。
<svg height="100px" width="100px" viewBox="0 0 50 50" >
<path fill="#4E3BC1" >
<animate
attributeName="d"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1"
values="M 0 50
c0-12 0-37 0-50 8 0 17 0 25 0 8 0 20 0 25 0 0 13 0 38 0 50-5 0-17 0-25 0-8 0-17 0-25 0
Z;
m 41 50
c-8 0-19 0-27 0-4-5-10-16-14-23 5-9 9-16 14-23 8 0 19 0 27 0 4 8 9 16 14 23-4 8-9 16-14 23
Z;"
/>
<animate
attributeName="fill"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1"
values="#1eb287;
#1ca69e;"
/>
</path>
</svg>
我发现 Safari 的另一个问题是在使用 <animate>
时,values
属性 可以 以尾随分号结尾,但 不能 以尾随换行符结尾,即属性值必须以路径数据或分号结尾,紧接在右括号之前。
有效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z;">
</animate>
有效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z">
</animate>
无效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z;
"></animate>
(示例故意不完整,我删除了所有其他属性和路径以整理它们)
此代码笔适用于所有浏览器,但 Safari 除外。它并不复杂,但我对 SVG 和 SMIL 还很陌生,所以我可能遗漏了一些不受支持的东西?
http://codepen.io/jaminroe/pen/rVoPRp
简化版,只有2个形状:
<svg height="100px" width="100px" viewBox="0 0 50 50" >
<path fill="#4E3BC1" >
<animate
attributeName="d"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1;"
values="M 0 50
c0-12 0-37 0-50 8 0 17 0 25 0 8 0 20 0 25 0 0 13 0 38 0 50-5 0-17 0-25 0-8 0-17 0-25 0
Z;
m 41 50
c-8 0-19 0-27 0-4-5-10-16-14-23 5-9 9-16 14-23 8 0 19 0 27 0 4 8 9 16 14 23-4 8-9 16-14 23
Z;"
/>
<animate
attributeName="fill"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1;"
values="#1eb287;
#1ca69e;"
/>
</path>
</svg>
谢谢!
删除每个 keySplines 属性末尾的分号。
我也是新手,刚遇到同样的问题。您可能知道,keyTimes 需要比 keySplines 多一个值(在您的例子中是 2 个 keyTimes 和 1 个 keySpline)。 keySplines 属性末尾的分号可能使 Safari 假设后面有第二个值,这意味着您现在有 2 个 keyTimes 值和 2 个 keySplines 值。 这打破了整个动画,什么也没有显示。
这是您在 Safari 中删除了分号的代码段。
<svg height="100px" width="100px" viewBox="0 0 50 50" >
<path fill="#4E3BC1" >
<animate
attributeName="d"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1"
values="M 0 50
c0-12 0-37 0-50 8 0 17 0 25 0 8 0 20 0 25 0 0 13 0 38 0 50-5 0-17 0-25 0-8 0-17 0-25 0
Z;
m 41 50
c-8 0-19 0-27 0-4-5-10-16-14-23 5-9 9-16 14-23 8 0 19 0 27 0 4 8 9 16 14 23-4 8-9 16-14 23
Z;"
/>
<animate
attributeName="fill"
dur="1s"
repeatCount="indefinite"
keyTimes="0;
1"
calcMode="spline"
keySplines="0,0,1,1"
values="#1eb287;
#1ca69e;"
/>
</path>
</svg>
我发现 Safari 的另一个问题是在使用 <animate>
时,values
属性 可以 以尾随分号结尾,但 不能 以尾随换行符结尾,即属性值必须以路径数据或分号结尾,紧接在右括号之前。
有效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z;">
</animate>
有效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z">
</animate>
无效:
<animate values="
M 332,520 h 20 a 10,10,0,0,1,0,20 H 332 A 10,10,0,0,1,332,520 Z;
"></animate>
(示例故意不完整,我删除了所有其他属性和路径以整理它们)