Erstellen dynamischer Layouts

Dieser Artikel löst ein altes Problem, wie es aussieht auf eine Dynamisierung der Benutzeroberfläche, die Verschiebungen ihre Anordnung je nachdem, welche Auflösung oder User-Agent ist die Anzeige oder Anzeige der Benutzeroberfläche. Problem Sie wollen eine dynamische Benutzeroberfläche, die angezeigt wird, heißt anlegen als logisch und gut lesbar wie möglich, sich auf eine Vielzahl von unterschiedlichen User-Agents Verbreitung (einschließlich der unterschiedlichen Auflösungen, Browser, Geräte usw.), macht und eine sinnvolle Nutzung des Immobilien-Bildschirm zur Verfügung. Theory Überlegen Sie, was passiert, wenn Sie Surfen auf einer HTML-Seite wie http://www.eweek.com.

  

Hinweis Ich bin nicht der kritischen Beurteilung eWeek spezifisch, sondern nur als ein Beispiel, weil fast jeder Website, hat die gleichen Fehler. Die Realität ist, dass weder besser ist, weil jeder Vor-und Nachteile hat. Doch weder optimal ist. Wenn die Web zunächst damit begonnen, populär geworden, die meisten DV-Geräte hatte die gleiche Bildschirmauflösung, und die Menschen nur selten surfte im Internet auf Handy-Geräte. Jetzt DV-Geräte sind extrem leistungsfähig, aber unterschiedlich auf die Spitze in ihrer Auflösung. Personal-Computing-Bedarf kann von einem Tiefstand von 800 × 480 auf einem Höchststand von 4500 × 1200 für eine Dual-Screen. Es macht keinen Sinn, um die Bildschirmauflösung zu beheben. Die Verhältnisse in den kleinen Browser verwendet werden, eine Spalte, eine Spalte und eine Spalte. Verwendet jedoch den größeren Browser eine Spalte, zwei Spalten und zwei Spalten. Was Sie tun, ist zur Anpassung des Raum, so dass in den kleineren Fenster ist nur eine Spalte dargestellt. In den größeren Fenster können mehr Spalten dargestellt werden. Solution Dieser Artikel beschreibt die Lösung in Stücken, beginnend mit dem allgemeinen Aufruf HTML-Seite, dass die Dimensionierung Algorithmus fordert, und dann die Dimensionierung Algorithmus selbst. Der folgende Code beinhaltet die gesamte HTML-Seite.

 Quelle: / website / ROOT / Ajax / DHTML / dynamiclayout.html  Dynamisches Layout 

Mit Blick auf den Code für die HTML-Seite können Sie sehen, dass ein Typ FlexBox genannt wird instanziiert und die globale Variable FlexBox zugeordnet. Die Art FlexBox ist die Dimensionierung Algorithmus. Die Aktion der Instanziierung und den Aufruf der FlexBox Art ist in der Funktion InitializePage, die von der body.onload event.2 Sie wollen die FlexBox Art in der body.onload Fall instanziieren, genannt wird durchgeführt, weil dies der erste sichere Ort für Code, um auf eine vollständige DOM-Modell zu betreiben. Wenn FlexBox instanziiert wird, braucht es einen Konstruktor Parameter, im Fall des Beispiels, dass der Puffer "Inhalt". Der Puffer "Inhalt" ist eine ID-Referenz zu einem HTML-Element, das als Grundlage für die HTML-Elemente, die der Größe verändert werden dient. In dem Beispiel, die ID-Inhalt verweist auf ein div-Element, das Kind div-Elemente enthält. In diesem Sizing-Algorithmus, ein div-Element Referenzen Kind div-Elemente. In Ihrem Umsetzung des vorliegenden Artikels zu tun, brauchen Sie nicht zu tun. Dieser Algorithmus zur zeigt, dass ein HTML-Element eine Reihe von Content-Blöcke, die wie die Spalten, die der Größe verändert werden dienen enthält. Wenn Sie eine Instanz der FlexBox zuweisen FlexBox, FlexBox initialisiert erste selbst und ordnet die div-Elemente in eine Tabelle Struktur. Die Ausführung der FlexBox Konstruktor veranlasst, die div-Elemente auf den folgenden HTML-Nachbestellung:

Die Neuordnung der HTML-Element, um eine Tabelle ist eine Notwendigkeit. Zwei Modi proportional Ausrichtung der Elemente auf einer HTML-Seite: absolute Koordinaten und relative Koordinaten. Standardmäßig verwendet HTML relative Koordinaten, die den Browser berechnet. Relativ-Modus zu koordinieren, brauchen Sie nur zu definieren, welche Elemente die anderen Elemente folgen. Verwendung von absoluten Koordinaten löst die Probleme der Angleichung der drei Kind div-Elemente, aber der Rest der HTML-Seite könnte seltsam ausgerichtet werden, da einige Elemente nicht benutzen könnten absolute Koordinaten. Die einfache Möglichkeit zur Angleichung der Inhalte in einer HTML-Seite mit relativen Koordinaten ist eine Tabelle zu verwenden. So sucht der Algorithmus zur bei der Muttergesellschaft div-Element, wird eine Tabelle erstellt, und erstellt eine Tabelle, Zelle für jedes Kind div-Element. Einige Leser mögen denken, dass es leichter gewesen wäre, um Tabelle zu definieren und nicht div-Elemente und haben den Algorithmus Arbeit mit dem Tabellen-Elemente direkt. Es ist wahr, dass die Verwendung einer Tabelle Element wäre leichter gewesen, aber dieses Algorithmus zeigt, wie Sie HTML-Elemente mit neuen HTML-Elemente ersetzen kann. Kommen wir zurück zu den Source-Code des aufrufenden HTML-Seite, ist die Methode setCharacteristics einmal genannt FlexBox zugewiesen wurde . Sie übergeben ein Objekt-Definition mit einer Reihe von eingebetteten Objekten zu setCharacteristics. Der Zweck der setCharacteristics ist entsprechend dem prozentualen Anteil der Spaltenbreite des Kindes div-Elemente zu definieren. So hat das eingebettete Objekt eine Reihe von Eigenschaften, die ein entsprechen-zu-eins mit den IDs des Kindes div-Elemente. In dem Beispiel, das eingebettete Objekt definiert die folgenden Einschränkungen:

• col1: Jede Spalte muss 200 Pixel breit, und es besteht nur aus einer einzigen Spalte amaximum.

• col2: Jede Spalte sollte 100 Pixel breit, und es gibt ein Maximum von vier Spalten.

• col3: Jede Spalte muss 200 Pixel breit, und es kann so viele Spalten wie es ist der Raum. Um die Einschränkungen zu verstehen, müssen Sie die Art des Algorithmus zur verstehen müssen. Die Idee des Sizing-Algorithmus ist, um die Proportionen zu definieren, die ermöglichen eine Client-Anwendung zum Inhalt entsprechend um. Durch die Erhöhung der Breite des Browserfensters, können Sie mehr Content-Blöcke nebeneinander montieren. Die Lesbarkeit der HTML-Seite wird verbessert, weil es weniger Scrollen und die HTML-Seite gleicht der einer Zeitung. Der Unterschied zu der HTML-Seite ist, dass im Gegensatz zu einer Zeitung, die Anzahl der angezeigten Spalten auf die Größe des Client-Fensters ab. Der Vorteil ist, dass wenn man sich die HTML-Seite sehen aus der UMPC-Gerät oder einen Breitbild-notearticle, erhalten Sie immer noch eine gute Optik und Haptik. Dieser Artikel und der Algorithmus zur Konzentration auf das Bewusstsein der Angabe der HTML-Seite, dass ein Feedback Tabellenzelle hat jetzt Platz für ein, zwei oder drei Spalten von Inhalten. Wie, dass der Inhalt angezeigt wird, hängt von der HTML-Seite und geht über den Rahmen des Sizing-Algorithmus. Kommen wir zurück zu den Source-Code des aufrufenden HTML-Seite, wird die Funktion setContentCallback genannt nach dem Aufruf setCharacteristics.

Der Zweck der Funktion setContentCallback ist es, einen Rückruf, der Nutzer mit den neuen Informationen, wie viele Benutzer aktualisiert wird eingeschränkt Spalten können in eine Zelle zu passen zu definieren. In dem Beispiel, den Client-Code zeigt die Parameter in der Tabelle Zelle. Reproportion der Tabelle, rufen Sie die Methode zu aktualisieren. Das erste Mal aktualisieren genannt wird, ist es aus dem Körper onload-Event. Der Körper onload-Event wird nur einmal und nicht wieder aufgerufen werden, wenn der Kunde dem Client-Browser die Größe entlassen. Um das Update-Methode genannt haben, wenn der Browser verändert wird, ist die window.onresize Ereignis zugeordnet. Im Beispiel weisen Sie window.onresize updateClientArea, um die Funktion, die eine einzige Methode aufrufen, um flexbox.update, die. Wiederum aktualisiert die Proportionen der Tabelle nun, dass die Theorie von der Dimensionierung Algorithmus wurde von der abstrakten Ebene erklärt macht Lassen Sie uns besprechen die Details des Sizing-Algorithmus. Der folgende Code zeigt die vollständige Umsetzung des Sizing-Algorithmus. Beachten Sie, dass der Algorithmus zur Durchführung einer benutzerdefinierten ist, und Sie können eine andere Strategie in die eigene Situation zu wählen:

Funktion FlexBox (parentIdentifier) (if (typeof (parentIdentifier) == "string") (document.getElementById this.parentIdentifier = (parentIdentifier);) else (this.parentIdentifier = parentIdentifier;) this.table = document.createElement ( "table"); this.table.border = 1; var TableRow this.table.insertRow = (-1); var tempArray = new Array (); for (var c1 = 0; c1 <this.parentIdentifier.childNodes.length; c1 + +) ( tempArray [c1] = this.parentIdentifier.childNodes [c1]; ) for (var c1 = 0; c1 <tempArray.length; c1 + +) ( var child = tempArray [c1]; if (child.nodeName.toLowerCase () == "div") ( var cell = tablerow.insertCell (-1); cell.appendChild (child); if (child.id) ( cell.id = child.id; ) ) )this.parentIdentifier.appendChild (this.table);) FlexBox.prototype.setCharacteristics = function (Merkmale) (this.characteristics = Eigenschaften; FlexBox.prototype.setContentCallback = function (cbContent) (this.cbContent = cbContent; FlexBox.prototype. update = function () (var row = this.table.rows [0]; var totalCells = row.cells.length; var availableLength = document.body.clientWidth; for (var index in this.characteristics) (this.characteristics [ index]. cols = 0;) var Increment; if (this.characteristics.updateAlgorithm) (Increment = this.characteristics.updateAlgorithm;) else ( Increment = function (ref) ( var takenWidth = 0; for (var index in ref.characteristics) ( takenWidth + = ref.characteristics [index]. cols * ref.characteristics [index]. width; ) var didIncrement = false; for (var index in ref.characteristics) ( var obj = ref.characteristics [index]; if ((+ takenWidth obj.width) <availableLength) ( if (obj.maxCols) ( if (obj.cols <obj.maxCols) ( obj.cols + +; didIncrement = true; ) ) else ( obj.cols + +; didIncrement = true; ) ) ) if (didIncrement) ( Increment (ref); )) Increment (this); for (var c1 = 0; c1 <row.cells.length; c1 + +) (if (row.Cells [C1]. Id) (var id = row.Cells [C1]. Id; if (this.characteristics [id] & & this.characteristics [id]. Breite) (row.Cells [C1]. width = this.characteristics [id]. Breite * this.characteristics [id]. cols; if (this. cbContent & & this.cbContent.updateContent) (this.cbContent.updateContent (row.Cells [c1], row.Cells [C1]. childNodes [0], this.characteristics [id]. cols, this.characteristics [id]) ;)))))

In den meisten Fällen, wird der Code nicht fett gedruckt ist die Unterstützung Code für den kühnen Code. Der erste mutige Codeabschnitt implementiert die Logik verwendet, um die div und Kind div-Elemente in eine Tabelle, dass das Kind div-Elemente enthält, zu konvertieren. Der zweite Abschnitt fett-Code implementiert die Logik Anteil der Zellen in einer Tabelle. Let's durch Zergliederung des ersten Code-Block und die Manipulation der Tabelle und Kind div-Elemente beginnen. Sie können die DOM in eine von zwei Arten bearbeiten: Sie können die innerHTML-Eigenschaft verwenden, oder Sie können Objekte mit Methoden zu manipulieren. Dieser Artikel manipuliert Objekte mit Methoden, denn das Konzept ist einfacher. Das Kind div-Elemente enthalten könnten einige recht beeindruckende HTML-Code, den Sie nicht wollen, dass die Serialisierung und deserialisieren. Verwendung von Objekten und bewegte sie in der DOM nicht beschädigt das Kind div-Elemente. Beachten Sie die folgenden Elemente aus dem Code:

Verwenden Sie die Methode document.createElement zu instanziieren, ein HTML-Element: Das zurückgegebene HTML-Element-Instanz instanziiert wird, ist aber nicht Teil der HTML-Seite und muss hinzugefügt werden.

Wenn ein Element repräsentiert einen bestimmten HTML-Element wie einem Tisch, dann verbinden die Methoden der HTML-Element mit dem Element B.: Im Beispiel wird eine Tabelle instanziiert und Tabellen Bezug Zeilen.

Verwenden Sie eine temporäre Variable zu speichern können, bevor sie nachbestellt werden: Denken Sie daran, früher, als ich sagte, dass der Algorithmus zur muss nicht div-Elemente zu Tisch konvertieren? Bevor wir uns an die Erklärung des Sizing-Algorithmus, Bekanntmachung im ersten kühnen Code-Block, wie Elemente in einem temporären array (tempArray), bevor gespeichert werden hinzu zurück in die HTML-Dokument als Kind-Elemente einer Tabelle. Dieser Schritt des Sparens Referenzen vorübergehend ist von entscheidender Bedeutung, wenn Sie ein Dokument-Objekt-Modell zu manipulieren sind. Wenn Sie speichern nicht nur vorübergehend, könnten Ihnen einige sehr funky Nebenwirkungen. Dieser zusätzliche Schritt war, um den Artikel hinzugefügt, um zu veranschaulichen, wie ein Dokument zu manipulieren richtig.

Fügen Sie ein HTML-Element-Instanz in der HTML-Seite Hierarchie mit einem DOM-Methode wie wie appendChild: Wenn die Instanz appendChild übergeben wird, ein Element bereits in der HTML-Seite befindet, dann rufen Sie ein removeChild vor dem Aufruf appendChild. Die Berufung des removeChild geschieht transparent. Die zweite fett Code-Block implementiert den Algorithmus, um die Tabelle zu partitionieren. Die Logik ist ein Brute-Force-Technik, die die Breite zwischen den Tabellenzellen verteilt und sieht, wenn die Verteilung ist mehr oder weniger als die verfügbare Breite. Der beste Weg, um die Logik zu veranschaulichen soll durch das Beispiel HTML-Seite zu gehen. Die Beschränkungen der Beispiel-HTML-Seite in Form Kugel ein paar Seiten zurück skizziert. Die Logik lautet die Beschränkungen und für die erste Iteration, versucht, eine einzelne Spalte in jeder Tabelle Zelle zu platzieren. Die Breite der einzelnen Spalten werden addiert und gegen die Breite des Client-Bereich getestet. Wenn die zusätzliche Breite geringer ist als die Client-Bereich Breite, dann eine weitere Iteration ausgeführt wird. Im Beispiel kann die erste Tabellenzelle nur ein einfacher Spaltenbreite. Eine weitere Iteration durchgeführt worden ist, und die zweite Tabellenzelle Spalte count inkrementiert. Das Muster der Iterationen Ergebnisse in einer Spalte zählen Muster, das ungefähr wie folgt aussieht:

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

Sie verwenden die Brute-Force-Technik, weil Sie die Spalten gleichmäßig auf alle Zellen der Tabelle verteilen möchten. Wenn Sie Ihre eigenen Vertriebs-Algorithmus, dann ist die Objekt-Instanz an die Methode übergeben setCharacteristics verwenden möchten muss ein Datenelement updateAlgorithm haben. Bei der Umsetzung Ihrer eigenen Algorithmus, bedenken Sie, dass Sie die Spaltenbreite zu den Zellen in einer Tabelle zu verteilen. Denken Sie daran, folgende Dinge:

• Mit der heutigen Technologie, haben eine Vielzahl von Geräten extreme Unterschiede in der Bildschirmauflösung.

• fester Breite oder vollständig Percentage-basierte HTML-Seiten gut aussehen nur auf bestimmte Bildschirmgröße Dimensionen. Wenn ein Bildschirm ist, die über die Dimensionen, sieht der HTML-Seite schlecht.

• Bei unterschiedlichen Bildschirmauflösungen Aufnahme, betrachten das Seitenlayout dynamisch in der horizontalen und vertikalen Abmessungen. Die meisten Seiten betrachten nur die HTML-Seite als in der vertikalen Dimension dynamisch.

• Verwenden Sie keine absoluten Koordinaten bei der Verwendung von algorithmischen Proportionen, denn das verlangt, dass alle Elemente auf die gesamte HTML-Seite anpassen. Verwenden Sie relative Koordinaten, die HTML-Tabelle Elemente bedeuten.

• Beim Verschieben von Inhalten in einer horizontalen und vertikalen Mode, verwenden Sie einen Algorithmus, der Verteilung der Inhalt verteilt gleichmäßig auf die HTML-Seite.

Ein Artikel eingereicht von Sonja Lande


Disclaimer:Unsere Website ist nicht verantwortlich für den Inhalt dieses Artikels. Webarticles ist eine kostenlose Informationsquelle.
Wichtig: Dieser Artikel "Erstellen dynamischer Layouts" wurde durch ein automatisches Software übersetzt. Wir fühlen uns leid für alle Rechtschreibfehler, die möglicherweise aufgetreten sind. Vielen Dank für Ihr Verständnis.


Online: 375 users browsing the articles directory