10

私はこのようなことをする必要があります: ここに画像の説明を入力してください

これは非常に簡単に見えるかもしれませんが、いくつかの要件があります:-含まれるdivの幅はテキストの長さに依存する必要があります(CSSで可能ですか?)-すべての円をランダムに配置する必要があります-これは自分。

border-radius円の作成(高さ、幅、50%の設定)に使用してborder-radiusいるので、JavaScriptである種のグリッドを作成し、各要素を反復処理してその寸法を取得しようとしています。次に、前の要素(存在する場合)の位置を取得し、それらを現在の要素の寸法に追加します。さらに、マージンを追加すると、衝突を回避するのに役立ちます。それは正しいアプローチですか?

私はちょうど私の2つの問題を解決する方法の提案を探しています。

4

1 に答える 1

2

コンテンツのサイズに基づいて拡大縮小する円。

  • これは、最初に解決する必要があるものです。最初にそれらの寸法を知らなければ、どこにでも配置することができないからです。

  • 当然、DIVのサイズは最初に幅で拡大し、次に高さで拡大します。つまり、高さの制約に移る前に、まずコンテナの最大幅を利用する必要があります。このため、相対平均を使用せずに同じ半径の円スケールを作成することは非常に難しい場合があります。

  • 相対平均とは、コンテンツの境界となるコンティナーの既存の領域に基づいて、高さ/幅の平均寸法を見つけることです。例えば:


コンテンツの境界となるDIVの幅と高さは、javascriptで検出できます。これらのプロパティもそれぞれ200pxx20pxであることを発見したとしましょう。

総面積は幅*高さなので4000pxです。しかし、私たちは、丸みを帯びた角を適用して丸みを帯びた円を形成できるように、正方形を実現しようとしています。同じ面積に等しい長方形の寸法を見つけて、それらの新しい寸法を適用したいと思います。

同じ幅*の高さで同じ領域を実現するには、次のようにします。

√4000=63.2455532したがって:63.2455532 x 63.2455532 = 4000

DIVをランダムに配置し、DIV間の衝突を回避します。

  • 寸法を見つけたら、(X、Y)座標のランドを配置に使用できるようになります。これらの座標と半径を配列にプッシュします。再帰を使用して、残りの円を衝突の失敗に配置します。衝突の失敗は、正常にプッシュされた配列内の重複する(X、Y)+radiusrelativetoo要素を持つ要素から発生します。
于 2012-12-23T22:29:54.320 に答える