在第一次嘗試使用SVG的過程中(使用Raphael庫),我遇到了一個問題,在畫布上定位動態元素的方式是它們包含在內部的完全畫布。我想要做的是隨機位置n單詞/短語。定位SVG元素
由於文本是可變的,它的位置需要是可變以及使我在做什麼是:
- 最初創建點
0,0
無混濁的文本。 - 使用
text.getBBox().width
檢查繪製的文本元素的寬度。 - 設置一個新的
x
座標爲Math.random() * (canvas_width - (text_width/2) - pad)
。 - 將文本的
x
座標更改爲新設置的值(text.attr('x', x)
)。 - 文本的不透明度屬性設置爲1。
我會是第一個承認,我的數學智慧是有限的,但是這似乎很簡單。不知怎麼的,我最終還是得到了超出畫布右邊緣的文字。爲了簡單起見,我通過將x
值添加到Math.random()
結果中去除了該位,該值也設置了最小值。儘管如此,我仍然在畫布前端看到同樣的問題。
我的理解(比如說)是,Math.random()
位會產生一個介於0和1之間的數字,然後可以乘以某個數字(在我的例子中,畫布寬度 - 文本寬度的一半 - 某些任意填充)來獲取外部邊界。我將文本的寬度減半,因爲它在網格上的位置設置在其中心。
我希望我剛剛在這盯着太久,但我的數學是生鏽或我誤解一些有關的Math.random()
,SVG,文本或其他任何東西,這種解決方案的引擎蓋下的行爲?
對不起 - 我以爲我有一個解決方案,所以我刪除/刪除,但後來意識到數學解決了你以前有。我不知道拉斐爾在封面下做了什麼,所以我不能真正幫助你。 – 2010-04-29 17:09:05
沒問題。不過,你可能已經走上了正軌。仔細研究'Math.random()'是如何操作的,除2之外的結果可能是罪魁禍首。如果那是可行的,那麼將會跟進。 – 2010-04-29 18:09:52