文本值的 SVG 动画
SVG animation of text values
是否有 SVG 动画标签可以让我更改文本标签的内容?
我有一个将项目移动到文本标签旁边的动画,我需要文本与动画同步更新。我还有其他使用 SVG 计时系统向前和向后跳过的功能,所以我明确不想在 JavaScript.
中执行此操作
下面是一些不起作用的示例代码,因为我不知道如何表达更改文本内容的设置标签:
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-10 -10 600 400'>
<g>
<circle r='80' fill='cyan' cx='90' cy='120'/>
<text x='98' y='120' fill='black' >
I am moving
<set attributeName='content' begin='3s' fill='freeze' to='I am stationary'/>
<set attributeName='content' begin='5s' fill='freeze' to='I am moving'/>
</text>
<animateMotion path='M 0 0 L 100 100' begin='0s' dur='3s' fill='freeze' />
<animateMotion path='M 100 100 L 0 0' begin='5s' dur='3s' fill='freeze' />
</g>
当您在浏览器中查看此内容时,我喜欢 看到带有文本 "I am moving" 的移动蓝色圆圈。当蓝色圆圈暂停时,它应该会暂时显示 "I am stationary" 文本,然后再继续。相反,文本更改不会发生。
我一直在阅读 SMIL animation documentation;虽然让我的文本旋转或改变颜色真的很容易,但我看不出有什么方法可以真正改变文本标签的内容。
SVG 的 SMIL 用于动画属性,而不是内容。因此,您不能使用 SMIL 更改 <text>
元素的内容。正如 Robert Longson 在评论中提到的,一种可能的解决方法是使用两个 <text>
元素:一个用于固定文本,一个用于移动文本。然后,您可以使用 SMIL 为两个 <text>
元素的可见性属性(或显示属性)设置动画,以便一次只有一个 <text>
元素可见。例如...
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-10 -10 600 400'>
<g>
<circle r='80' fill='cyan' cx='90' cy='120'/>
<text x='98' y='120' fill='black' visibility="visible">
I am stationary
<set attributeName='visibility' begin='0s' dur='3s' to='hidden'/>
<set attributeName='visibility' begin='5s' dur='3s' to='hidden'/>
</text>
<text x='98' y='120' fill='black' visibility="hidden">
I am moving
<set attributeName='visibility' begin='0s' dur='3s' to='visible'/>
<set attributeName='visibility' begin='5s' dur='3s' to='visible'/>
</text>
<animateMotion path='M 0 0 L 100 100' begin='0s' dur='3s' fill='freeze' />
<animateMotion path='M 100 100 L 0 0' begin='5s' dur='3s' fill='freeze' />
</g>
</svg>
请注意,IE 不支持 SVG SMIL 动画。
请注意,Chrome 已弃用对 SVG SMIL 动画的支持,将来可能会删除支持。在 Chrome 中使用 SVG SMIL 动画时,您将在开发者控制台中看到一条警告消息。
是否有 SVG 动画标签可以让我更改文本标签的内容?
我有一个将项目移动到文本标签旁边的动画,我需要文本与动画同步更新。我还有其他使用 SVG 计时系统向前和向后跳过的功能,所以我明确不想在 JavaScript.
中执行此操作下面是一些不起作用的示例代码,因为我不知道如何表达更改文本内容的设置标签:
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-10 -10 600 400'>
<g>
<circle r='80' fill='cyan' cx='90' cy='120'/>
<text x='98' y='120' fill='black' >
I am moving
<set attributeName='content' begin='3s' fill='freeze' to='I am stationary'/>
<set attributeName='content' begin='5s' fill='freeze' to='I am moving'/>
</text>
<animateMotion path='M 0 0 L 100 100' begin='0s' dur='3s' fill='freeze' />
<animateMotion path='M 100 100 L 0 0' begin='5s' dur='3s' fill='freeze' />
</g>
当您在浏览器中查看此内容时,我喜欢 看到带有文本 "I am moving" 的移动蓝色圆圈。当蓝色圆圈暂停时,它应该会暂时显示 "I am stationary" 文本,然后再继续。相反,文本更改不会发生。
我一直在阅读 SMIL animation documentation;虽然让我的文本旋转或改变颜色真的很容易,但我看不出有什么方法可以真正改变文本标签的内容。
SVG 的 SMIL 用于动画属性,而不是内容。因此,您不能使用 SMIL 更改 <text>
元素的内容。正如 Robert Longson 在评论中提到的,一种可能的解决方法是使用两个 <text>
元素:一个用于固定文本,一个用于移动文本。然后,您可以使用 SMIL 为两个 <text>
元素的可见性属性(或显示属性)设置动画,以便一次只有一个 <text>
元素可见。例如...
<svg version='1.1' xmlns='http://www.w3.org/2000/svg' width='100%' height='100%' viewBox='-10 -10 600 400'>
<g>
<circle r='80' fill='cyan' cx='90' cy='120'/>
<text x='98' y='120' fill='black' visibility="visible">
I am stationary
<set attributeName='visibility' begin='0s' dur='3s' to='hidden'/>
<set attributeName='visibility' begin='5s' dur='3s' to='hidden'/>
</text>
<text x='98' y='120' fill='black' visibility="hidden">
I am moving
<set attributeName='visibility' begin='0s' dur='3s' to='visible'/>
<set attributeName='visibility' begin='5s' dur='3s' to='visible'/>
</text>
<animateMotion path='M 0 0 L 100 100' begin='0s' dur='3s' fill='freeze' />
<animateMotion path='M 100 100 L 0 0' begin='5s' dur='3s' fill='freeze' />
</g>
</svg>
请注意,IE 不支持 SVG SMIL 动画。
请注意,Chrome 已弃用对 SVG SMIL 动画的支持,将来可能会删除支持。在 Chrome 中使用 SVG SMIL 动画时,您将在开发者控制台中看到一条警告消息。