在第一次尝试使用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