我想在嵌入式SVG中创建柱形图,并在每列的鼠标悬停事件上使用简单的颜色动画效果。如何仅创建一次动画并将其应用于任何列?
在下面的示例中,我将颜色动画放在第一列。具体问题是如何在不重复节点的情况下在其他列(节点)上应用相同的动画。我应该使用JavaScript吗?或者我可以在动画节点上使用某种参考吗?
<svg class="columnChart">
<g transform="matrix(1 0 0 -1 0 0) translate(0, -100)">
<rect width="10" height="100" x="0" y="0">
<animate attributeName="fill"
attributeType="XML"
begin="mouseover"
dur="0.25s"
fill="freeze"
to="#00ff00"/>
<animate attributeName="fill"
attributeType="XML"
begin="mouseout"
dur="0.25s"
fill="freeze"
to="#000000"/>
</rect>
<rect width="10" height="80" x="15" y="0"/>
<rect width="10" height="55" x="30" y="0"/>
<rect width="10" height="60" x="45" y="0"/>
</g>
<g transform="rotate(90)">
<text x="110">mo</text>
</g>
<g transform="rotate(90)">
<text x="110" y="-15">tu</text>
</g>
<g transform="rotate(90)">
<text x="110" y="-30">we</text>
</g>
<g transform="rotate(90)">
<text x="110" y="-45">th</text>
</g>
</svg>
提前感谢您的帮助。
答案 0 :(得分:1)
您可以使用定义执行此操作。在我的情况下,我重新使用动画渐变作为填充。使用相关的动画定义填充(例如使用id animating_fill),然后使用style =“... fill:url(#animating_fill); ...”
将其作为条形填充引用我认为这可能比js解决方案更好(尽管我使用JS来设置我的定义)。
答案 1 :(得分:1)
您可以使用CSS3 Transitions。这是一个结合了SVG动画和CSS过渡的example,不透明度通过CSS过渡和带有<animate>
元素的矩形宽度进行动画处理。
答案 2 :(得分:0)
不幸的是,您无法重复使用动画元素。所以是的,您应该以两种方式之一使用Javascript。您可以使用它来复制动画元素并将它们添加到每个元素中,或者您只是直接在JS中执行动画(无论如何这可能会更好)。