を作成する動的なレイアウト

この記事は、古くて新しい問題を解決するとして、それはシフト、そのレイアウトの解像度やユーザエージェントは何が表示され、またはあなたがレイアウトされている動的なユーザーインタフェースを作成するユーザーインターフェイスの問題の表示に応じて動的なユーザーインタフェースを作成する時に見える論理的に読みやすく、できるだけとして、ユーザエージェントの異なる幅広い分野で(解像度変化を含む、ブラウザ、デバイスなど)、および不動産の利用可能な画面の良識を使用することができます。理論を考え、何が起こるか広がっているときにhttp://www.eweek.comのようなHTMLページをサーフィンする。

  

注意してください 私は米eWEEKの具体的には批判ではない例は、これはほとんどすべてのWebサイトでは、同じ欠陥があるとして現実には、どちらも良いですので、それぞれの長所と短所があります。しかし、どちらも最適です。ときは、Webを最初に起動、ほとんどのコンピューティングデバイスは、同じ画面の解像度があったが、人々はほとんどの携帯デバイス上では、インターネットサーフィンの人気になっています。現在のコンピューティングデバイス、非常に強力ですが、その画面の解像度で極端に異なります。パーソナルコンピューティングのニーズによって異なることができる800 × 480に4500 × 1200のデュアルスクリーンの高低。これは、画面の解像度を修正しても意味がない。比率は小さなブラウザで使用される1つの列、一列、および1つの列です。しかし、より大きなブラウザの1つの列、2列、および2つの列を使用します。何をやっているように、小さいウィンドウでは、1列のみが示されている空間を再調整されます。大きなウィンドウで、複数の列を示すことができます。この記事は、部分でのソリューションは、サイジングのアルゴリズムの呼び出しの全体的な呼び出し元のHTMLページを起動して、サイジングアルゴリズム自体について説明ソリューション。次のコードでは、全体的なHTMLページで構成されます。

 ソース: /サイト/ルート/ Ajaxの記事/ DHTMLビューア/ dynamiclayout.html 動的レイアウト

HTMLページのコードを見て、そのタイプFlexBoxインスタンス化されると呼ばれるグローバル変数flexboxに割り当てられて見ることができます。タイプFlexBoxサイジングのアルゴリズムです。インスタンス化し、FlexBox型はbody.onload event.2あなたbody.onloadイベントFlexBox型のインスタンスを作成するには、呼び出される関数InitializePageで行われている呼び出しのアクションは、これは、最初の安全な場所ですコードの完全なDOMモデルを操作するときFlexBoxインスタンス化され、それはコンストラクタのパラメータが必要;の例の場合には、そのバッファの"コンテンツ"です。バッファの"コンテンツ"とは、そのサイズを変更されるHTML要素の基盤となるHTML要素にIDを参照です。この例では、そのIDのコンテンツを参照するdiv要素は、子div要素が含まれます。このサイズのアルゴリズムでは、div要素の参照子div要素。この記事は、あなたの実装では、あなたがする必要はない。このサイズアルゴリズムでは、HTML要素のコンテンツをブロックこれは、サイズが変更される列として番号が含まれて示しています。いつflexboxにFlexBoxのインスタンスを割り当てると、FlexBox最初に自身と並べ替えて、テーブルの構造には、div要素を初期化します。 FlexBoxコンストラクタを実行するには、次のHTMLにdiv要素を並べ替えることが原因:

table要素には、HTMLの並べ替えに必要である。 2つのモードに比例し、HTMLページ上の要素を整列:絶対座標と相対座標です。デフォルトでは、HTMLの相対的な使用のブラウザでは計算さを調整します。相対モードでは座標を、あなただけの要素は、他の要素は、以下を定義する必要があります。絶対を使用して座標が、3つの子div要素の整列の問題を解決するためのHTMLページの残りの部分妙に整列されるかもしれないが、一部の要素を絶対使用しない可能性があります座標です。するためのHTMLページの相対的な使用上のコンテンツを配置簡単な方法座標テーブルを使用しています。したがって、サイジングアルゴリズムでは、親のdiv要素では、見えるが、テーブルを作成し、それぞれの子div要素の表のセルを作成します。一部の読者がされてではなく、div要素テーブルを定義しやすいだろうし、表の要素を直接アルゴリズムの動作があると思うかもしれない。それを使用してテーブルの要素となってほうが簡単だろう、このアルゴリズムをどのように新しいHTML要素をHTML要素に置き換えることができますを示しています。は呼び出し元のHTMLページのソースコードへの行き方は、メソッドsetCharacteristics 1回呼び出されますflexbox割り当てられているのは事実だ。あなたsetCharacteristicsに埋め込まれたオブジェクトの数オブジェクトの定義を渡します。 setCharacteristicsの目的は、子供のdiv要素の比例列の幅を定義することです。したがって、埋め込まれたオブジェクトのプロパティの数は、1つの対応する1対1の子div要素のIDを使用しています。この例では、埋め込まれたオブジェクトは、次の制限を定義:

•列1:各列の幅が200ピクセル、そこだけで1つの列amaximumである必要があります。

•col2を:各列の幅100ピクセルであるべきであり、4つのカラムの最大値です。

•列3:各列の幅が200ピクセルとする必要があるなどがあるスペースです。制限を理解するために、多くの列として、あなたは、サイジングのアルゴリズムの性質を理解する必要があることができます。サイジングアルゴリズムのアイデアの比率を定義することですクライアントアプリケーションで適切なコンテンツを注文することができます。ブラウザの幅を増やすことで、側でコンテンツ側のより多くのブロックを組み立てることができます。ため、少ないスクロールされているHTMLページの読みやすさ、および改善されているHTMLページのような新聞のこと。 HTMLページとの違いは、新聞と違って、列に表示される数は、クライアントのウィンドウのサイズに依存しています。利用する場合は、HTMLページで、ウルトラモバイルPCデバイスまたはワイドスクリーンnotearticleから見てみると、まだよく見ると感じている。この資料では、HTMLページのフィードバックを与えることの意識には、サイジングのアルゴリズムがフォーカスを表のセルは、コンテンツの列の1つ、2つまたは3つの部屋があります。どのようにコンテンツが表示されているHTMLページに依存し、サイジングのアルゴリズムの範囲を超えています。は呼び出し元のHTMLページのソースコードには、関数setContentCallbackと呼ばれるsetCharacteristicsを呼び出した後に取得。

関数setContentCallbackの目的は、どのように多くのユーザーの新しい情報で更新されているユーザーのコールバックの列のセルに適合することができます制限を定義することです。この例では、クライアントコードを表示する表のセル内のパラメータは、メソッドupdateを呼び出し、テーブル割合を変えるために。最初のタイムを更新と呼ばれ、それはボディのonloadイベントからです。体のonloadイベントを1回だけの場合、クライアントは、クライアントのブラウザのサイズを変更を再度呼び出すことはできませんが発生します。更新プログラムのメソッドを持ってするたびにブラウザのサイズが変更されると、window.onresizeイベントに割り当てられているという。この例では、あなたは、順番の更新は、テーブルの大きさで、今では、サイジングのアルゴリズムの理論は、抽象的なレベルから説明されているflexbox.updateに単一のメソッド呼び出しは、関数updateClientAreaにwindow.onresizeを割り当てる、のサイジングアルゴリズムの詳細について話し合うことができます。次のコードでは、サイジングのアルゴリズムの完全な実装を示します。には、サイジングアルゴリズムでは、カスタムの実装であることに注意し、あなた自身の状況では、異なる戦略を選択する可能性があります:

関数FlexBox(parentIdentifier)(場合((parentIdentifier)=="文字列")(this.parentIdentifier =(parentIdentifier);)他(this.parentIdentifier = parentIdentifier Document.getElementByIdにてtypeof演算;) this.table = document.createElement("テーブル"); this.table.border = 1; ヴァールtablerow = this.table.insertRow(-1); ヴァールtempArray =新しいArray(); (ヴァールc1 = 0; c1"this.parentIdentifier.childNodes.length;のc1 + +)( tempArray [c1] = this.parentIdentifier.childNodes [c1];  (ヴァールc1 = 0; c1"tempArray.length;のc1 + +)( ヴァール子= tempArray [c1]; 場合は(()=="child.nodeName.toLowerCase部")( ヴァールセル= tablerow.insertCell(-1); cell.appendChild(子); 場合は()child.id( cell.id = child.id;   ()this.table this.parentIdentifier.appendChild;)FlexBox.prototype.setCharacteristics =関数(特性)(this.characteristics =特性; FlexBox.prototype.setContentCallback =関数(cbContent)(this.cbContent = cbContent; FlexBox.prototype。更新=関数()(ヴァール行= this.table.rows [0];ヴァールtotalCells = row.cells.length;ヴァールavailableLength = document.body.clientWidth; this.characteristicsで(ヴァールインデックス)(this.characteristics [用インデックス]。colsの= 0;)ヴァールインクリメント;場合(this.characteristics.updateAlgorithm)(インクリメント= this.characteristics.updateAlgorithm;)他( インクリメント=関数(参考)( ヴァールtakenWidth = 0; ref.characteristicsで(ヴァールインデックス)の( takenWidth + = ref.characteristics [インデックス]。colsの* ref.characteristics [インデックス]幅;  ヴァールdidIncrement =偽; ref.characteristicsで(ヴァールインデックス)の( ヴァールOBJの= ref.characteristics [インデックス]; 場合は((takenWidth + obj.width)"availableLength)( (obj.maxCols)の場合( (obj.cols"obj.maxCols)の場合( obj.cols + +; didIncrement =真;   他( obj.cols + +; didIncrement =真;    (didIncrement)の場合( インクリメント(参考); )をインクリメント(この);(ヴァールc1 = 0; c1"row.cells.length; c1 + +)(場合(row.cells [c1] IDを)(ヴァールIDを= row.cells [c1]です。IDを;場合(this.characteristics目録番号]&&this.characteristics目録番号:幅)(row.cells [c1]幅= this.characteristics目録番号:幅* this.characteristics目録番号]。colsの;場合(this. cbContent&this.cbContent.updateContent)(this.cbContent.updateContent(row.cells [c1]、row.cells [c1]。childNodes [0]、this.characteristics目録番号]。colsの、this.characteristics目録番号]) ;)))))

ほとんどの部分については、コードを太字で表示されている太字のコードをサポートするコードは表示されません。最初の太字のコードセクションでは、ロジックでは、子供のdiv要素が含まれてテーブルには、divと子のdiv要素に変換するために使用を実装します。 2番目の太字のコードセクションに比例し、表のセルのロジックを実装していますが、テーブルと子div要素の操作の最初のコードブロックの解剖ことから始めましょう。次のいずれかの方法では、DOMを操作することができます:あなたのinnerHTMLプロパティを使用するか、またはオブジェクトのメソッドを使用して操作することができます。ため、このアプローチは簡単ですこの記事は、オブジェクトのメソッドを使って操作します。子div要素のいくつかの非常に洗練されたHTMLコードは、シリアル化および逆シリアル化を含んでいないことができます。オブジェクトを使用してDOMの中でそれらを移動する子div要素が破損していません。コードからは、次の点に注意:

メソッドを使用します document.createElement HTML要素をインスタンス化する:返されたHTML要素のインスタンスをインスタンス化されますが、HTMLページの一部ではないとニーズに追加されます。

もし要素の場合、関連付けるテーブルのような特定のHTML要素を表します は、要素のインスタンスを使用してHTML要素のメソッド:上の例では、テーブル、およびテーブルの参照行をインスタンス化します。

前に並べ替えされている一時的な変数を使用して要素を格納する:覚えておく以前のときに私はサイズ変更アルゴリズムをテーブルにdiv要素に変換する必要はないというか?最初の太字のコードブロックをどのように要素を一時配列(tempArray前)に保存されるのは、サイジングのアルゴリズムの説明については、通知を見前にテーブルの子要素としては、HTMLドキュメントに戻って追加される。参照が一時的に絶対に不可欠であるときに、オブジェクトの文書モデルを操作している省エネのこの手順場合は、一時的に保存しない場合は、いくつかの非常にファンキーな副作用が発生することができます。この余分な手順では、資料をどのように適切に文書を操作することを示すために追加されました。

HTMLページの階層は、DOMメソッドを使用してHTML要素のインスタンスを追加など 〜のように AppendChildを:インスタンスがAppendChildを渡された要素がすでにHTMLページ内に位置し、AppendChildを呼び出す前に、removeChild呼び出すことです。 removeChildの呼び出しを透過的に発生します。2番目の太字のコードブロックは、テーブルを分割するためのアルゴリズムを実装します。ロジックは、表のセル間の幅を配布して見て強引な手法ですが、配布は多かれ少なかれ、利用可能な幅よりも。ロジックを説明するために最善の方法は、たとえば、HTMLページを介して移動することです。たとえば、HTMLページの制限を箇条書きのフォームページのカップル後ろに概説された。ロジックとの制限を読み取り、最初の繰り返しでは、各表のセル内の単一の列の場所にしようとします。各列の幅を一緒に追加され、テストのクライアント領域の幅に対して。場合は、追加の幅は、クライアント領域の幅よりも、その後別の反復処理が実行されます未満です。この例では、最初のテーブルのセルを1つだけ列の幅を含めることができます。もう1つの反復、実施されている2番目の表のセルの列のカウントがインクリメントされます。そのようなカラム数パターンの繰り返しのパターンの結果は、以下:

1 1 1 1 2 1 1 2 2 1 3 2 1 3 3 1 4 3 ...

なぜなら、同じように、すべての表のセルの間の列を配布したい場合は、ブルートフォーステクニックを使用します。もしあなた自身の分散アルゴリズムと、そのオブジェクトのインスタンスメソッドsetCharacteristicsに渡さを使用する場合、データメンバupdateAlgorithmが必要です。ときは、心の中では、表のセルの間の列の幅を配布するよう、独自のアルゴリズムを実装します。次のことを記憶:

今日の技術により、•、デバイスのさまざまな画面の解像度の極端な違いがあります。

•固定幅または完全に占める割合HTMLページの良い特定の画面の大きさだけで見てベース。もし画面がそれらの寸法を超えていると、HTMLページは不良だ。

•ときに別の画面の解像度を収容し、動的に水平および垂直方向の次元では、ページのレイアウトを検討します。ほとんどのページだけHTMLページを考慮の垂直方向のディメンションでの動的ている。

•絶対使用しないでいるため、すべてのHTMLページ全体の要素の調整を必要とするとき、アルゴリズムの比率を使用して調整します。使用して相対的には、HTMLのテーブル要素を意味するもので調整します。

•ときは、水平および垂直方向のファッションでは、均等には、HTMLページ上のコンテンツを配布するための分散アルゴリズムを使用するコンテンツを移動する。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、""動的なレイアウトを作成する自動ソフトウェアによって翻訳された。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 312 users browsing the articles directory