2011-10-19 68 views
3

我想在嵌入式SVG中創建一個柱狀圖,並在每個列的mouseover事件上使用簡單的顏色動畫效果。我如何只創建一次動畫並將其應用於任何列?如何將相同的動畫應用於多個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

不幸的是,您不能重用動畫元素。所以是的,你可能應該用兩種方法之一來使用Javascript。您可以使用它來複制動畫元素並將它們添加到每個元素中,也可以直接在JS中執行動畫(無論如何,這可能會更好)。

1

你可以用定義來做到這一點。在我的情況下,我重新使用動畫漸變作爲填充。與其相關的動畫定義填充(例如用ID animating_fill),然後使用樣式引用它作爲你的酒吧填充=「...填寫:URL(#animating_fill); ...」

我覺得這可能比JS解決方案更好(儘管我使用JS來設置我的例子中的定義)。

1

您可以使用CSS3 Transitions。這是一個example,它結合了SVG動畫和CSS轉換,不透明度用<animate>元素的CSS轉換和矩形寬度動畫。

相關問題