我有以下代码,
<div id="akbar">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
width="400" height="200" viewBox="0 0 400 200">
<g transform="scale(1,-1) translate(0,-200)">
<rect x="50" y="0" fill="#f00" width="100" height="100">
<animate attributeName="height"
from="0"
to="100"
dur="0.5s"
fill="freeze" />
</rect>
<rect x="150" y="0" fill="#f70" width="100" height="200">
<animate
attributeName="height"
from="0"
to="200"
dur="0.5s"
fill="freeze" />
</rect>
<rect x="250" y="0" fill="#ec0" width="100" height="150">
<animate
attributeName="height"
from="0"
to="150"
dur="0.5s"
fill="freeze" />
</rect>
</g>
</svg>
</div>
我想让svg矩形动画像音乐波一样增长。
我怎样才能做到这一点?
答案 0 :(得分:1)
您可以使用
来实现它values
,keyTimes
keySplines
<animate>
标记的属性。
我仅将您的示例剥离为单列:
<svg version="1.1" xmlns="http://www.w3.org/2000/svg"
width="400" height="200" viewBox="0 0 400 200">
<g transform="scale(1,-1) translate(0,-200)">
<rect x="50" y="0" fill="#f00" width="100" height="100">
<animate
attributeName="height"
from="0"
to="100"
dur="1s"
fill="freeze"
values="0; 200; 150; 160; 150; 160"
keyTimes="0; 0.2; 0.4; 0.6; 0.8; 1"
keySplines=".42 0 1 1;
0 0 .59 1;
.42 0 1 1;
0 0 .59 1;
.42 0 1 1;
0 0 .59 1;"
/>
</rect>
</g>
</svg>
由于它还不完美,你可以使用属性来更好地调整时间(特别是keySplines
)并使音乐波像更多。
正如您在提供的示例中所看到的,单列的移动步骤是:
我想增加那些重复百分比数字(83和88)之间的差异会给你带来稍微好一点的影响(基于75%和80%,更容易在widht: 200px
上计算),但是它很接近。
另请参阅关于SVG动画的CSS tricks article,它非常详尽,涵盖了有关所提及属性的所有细节 - 等等。