2011-05-11 128 views
8

我有一些可以被用戶點擊的svg對象。動態更新SVG

有沒有辦法: - 將用戶點擊的對象(id)信息發送到'main html document'? - 從svg文件中的外部文檔中提取。

也許,我的描述不清,......我想實現這樣的:SVG圖像內的任何對象

  1. 用戶點擊;
  2. 主文檔將接收被點擊對象的ID和:
    • 顯示有關該對象的某些信息;
    • 在svg-image中繪製額外的對象。

問題:如何從通信到SVG文件,從文件到SVG?

非常感謝,任何想法都歡迎!

P.S.可能SVG不是最好的辦法嗎?那有什麼更好?

編輯:我看到了關於使用拉斐爾的建議,但我希望看到'原生'選項。 (現在我正在分析Raphaels的實現來看看,但不認爲它正在做我需要的)。

回答

6

this example如何從父文檔得到引用SVG的DOM。

here's an example您可以如何從svg文件調用父文檔。

SVG非常適合做您所描述的內容。

4

我建議使用像Raphaël這樣的庫來支持你的SVG建築。您可以將事件附加到可通過圖像組件的node屬性獲取的DOM對象。

+0

+1推薦拉斐爾。更好的是,當SVG不可用時,Raphael也支持VML,這意味着您可以生成適用於所有瀏覽器的矢量圖形,甚至古老的IE版本。 – Spudley 2011-05-11 15:09:04

+0

但拉斐爾只與畫布合作..?!我無法找到如何使用Raphael與SVG一起工作......或者說canvas只是svg的「另一種反感」? – Budda 2011-05-11 15:35:25

+0

它表示「畫布」,但並不意味着 - 這是一個稍微混亂的標註方式。 – 2011-05-11 15:47:57

0

如果你想堅持使用SVG/VML,Raphaël.js確實是一個很好的解決方案。現在你可以使用canvas(新的HTML 5功能)。 Canvas是一個新的html標籤(可以有id,events,...),允許你像SVG那樣繪製自由形狀。當然,IE本身不支持畫布,你需要使用「excanvas.js」(這個或那個,但是這個工作非常好......),以使它與IE兼容。

我只知道關於canvas的一個限制:使用背景圖像會使IE非常慢。如果這是你想要做的事,我會使用Raphaël.js。

好運

+0

IE9已經支持畫布。實際上,爲什麼問題是「如何?」 – Budda 2011-05-11 16:52:08

0

沒有人建議,但不小心我發現,svg已經被jQuery支持! http://plugins.jquery.com/project/svg

可能這不是最好的方法,但我會嘗試使用jquery使用svg。實際上,這似乎是合理的