【发布时间】:2011-02-13 21:11:27
【问题描述】:
在第一次玩 SVG 的过程中(使用 Raphael 库),我遇到了一个问题,在画布上定位动态元素时,它们完全 em> 包含在画布中。我正在尝试做的是随机放置 n 个单词/短语。
由于文本是可变的,它的位置也需要可变,所以我正在做的是:
- 最初在
0,0点创建文本,没有不透明度。 - 使用
text.getBBox().width检查绘制的文本元素的宽度。 - 将新的
x坐标设置为Math.random() * (canvas_width - ( text_width/2 ) - pad)。 - 将文本的
x坐标更改为新设置的值 (text.attr( 'x', x ))。 - 将文本的不透明度属性设置为 1。
我将是第一个承认我的数学头脑有限的人,但这似乎很简单。不知何故,我的文本仍然超出了画布的右边缘。为简单起见,我通过将它添加到Math.random() 结果中删除了同样设置最小x 值的位。不过,它就在那里,我在画布的前缘看到了同样的问题。
我的理解(例如)是Math.random() 位会生成一个介于 0 和 1 之间的数字,然后可以乘以某个数字(在我的情况下,画布宽度 - 文本宽度的一半 -一些任意填充)以获得外部边界。我将文本的宽度分成两半,因为它在网格上的位置设置在它的中心。
我希望我只是盯着这个太久了,但是我的数学 那 生疏了还是我误解了 Math.random()、SVG、文本或其他任何东西的行为在这个解决方案的底层?
【问题讨论】:
-
对不起 - 我以为我有一个解决方案,所以我删除/取消删除,但后来意识到数学计算结果与您之前的相同。我不知道拉斐尔在幕后做了什么,所以我真的帮不了你。
-
没问题。不过,您可能走在正确的轨道上。更仔细地观察
Math.random()的运作方式以及除以 2 可能是罪魁祸首。如果成功了,我们会跟进。
标签: javascript svg raphael