( Raphaelライブラリを使用して) 初めて SVG をいじる過程で、キャンバス内に完全に含まれるような方法で動的要素をキャンバスに配置するという問題に遭遇しました。私がやろうとしているのは、ランダムに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、テキスト、またはその他の動作について誤解しているのでしょうか?