在第一次使用 SVG 的过程中(使用Raphael库),我遇到了在画布上以完全包含在画布中的方式定位动态元素的问题。我正在尝试做的是随机放置n 个单词/短语。
由于文本是可变的,它的位置也需要是可变的,所以我正在做的是:
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、文本或其他任何东西的行为?