La creazione di layout dinamico

In questo articolo si risolve un problema di vecchia data, come sembra a creare un'interfaccia utente dinamica che sposta la sua disposizione a seconda di ciò risoluzione o agente utente sta visualizzando o visualizzare l'interfaccia utente. Problema Si desidera creare un interfaccia dinamica utente che è disposto come logica e come leggibile possibile, è distribuita su una vasta gamma di diversi interpreti (comprese le diverse risoluzioni, i browser, i dispositivi, e così via), e fa uso razionale del bene immobile dello schermo disponibile. Theory Pensate a cosa succede quando si navigare a una pagina HTML, come http://www.eweek.com.

  

Nota Non sto criticando eWeek in particolare, ma solo come esempio, perché quasi ogni sito web ha il difetto stesso. La realtà è che nessuno dei due è meglio, perché ognuno ha vantaggi e svantaggi. Eppure non è ottimale. Quando il Web inizialmente hanno cominciato a diventare popolari, dispositivi di elaborazione più avuto la stessa risoluzione dello schermo, e le persone raramente hanno navigato in Internet sul cellulare, apparecchi di telefonia. Esigenze informatiche Ora dispositivi informatici sono estremamente potenti, ma variano da un estremo, nella loro risoluzione dello schermo. Personali possono variare da un minimo di 800 × 480 ad un massimo di 4500 × 1200 per un doppio schermo. Non ha senso fissare la risoluzione dello schermo. Medesime proporzioni utilizzate per il browser di piccole dimensioni sono una colonna, una colonna, e una colonna. Tuttavia, il browser più grandi utilizza una colonna, due colonne, e due colonne. Che cosa si sta facendo ha ritoccato lo spazio in modo che nella piccola finestra, solo una colonna sarà illustrato. Nella finestra più grande, più colonne può essere illustrata. Solution questo articolo si spiega la soluzione in pezzi, a partire dalla pagina HTML complessiva chiamando che chiama l'algoritmo di dimensionamento, e quindi l'algoritmo di calibrazione stessa. Il codice che segue comprende la pagina HTML globale.

 Fonte: / website / ROOT / articles AJAX / DHTML / dynamiclayout.html  Dynamic Layout 

Guardando il codice della pagina HTML, si può vedere che un tipo di chiamata FlexBox viene istanziato e assegnato alla FlexBox variabile globale. Il tipo di FlexBox è l'algoritmo di dimensionamento. L'azione di un'istanza e chiamare il tipo FlexBox viene effettuata nel InitializePage funzione, che viene chiamato dal event.2 body.onload Si desidera istanziare il tipo FlexBox in caso body.onload, perché questa è la prima posizione sicura per Codice di operare su un modello completo DOM. FlexBox Quando viene creata un'istanza, ha bisogno di un parametro del costruttore, nel caso dell'esempio, che è il buffer "contenuto". Il buffer di "contenuto" è un riferimento a un ID di un elemento HTML che serve come base degli elementi HTML che verrà ridimensionata. In questo esempio, i riferimenti contenuti ID di un elemento div, che contiene gli elementi div figlio. In questo algoritmo di dimensionamento, un elemento div riferimenti elementi div figlio. Nella tua applicazione del presente articolo, non c'è bisogno di farlo. Questo algoritmo dimensionamento dimostra che un elemento HTML contiene un certo numero di blocchi di contenuto, che servono come le colonne che verranno ridimensionati. Quando si assegna un 'istanza di FlexBox a FlexBox, FlexBox inizializza prima se stesso e riordina gli elementi div in una struttura di tabella. L'esecuzione del costruttore FlexBox induce a riordinare gli elementi div il seguente codice HTML:

Il riordino del codice HTML a un elemento di tabella è una necessità. Due modi proporzionalmente allineare gli elementi in una pagina HTML: coordinate assolute e relative coordinate. Per impostazione predefinita, HTML utilizza coordinate relative, che il browser calcola. In coordinate relative modalità, hai solo bisogno di definire gli elementi che seguono gli altri elementi. Utilizzo coordinate assolute risolve i problemi di allineare i tre elementi div bambino, ma il resto della pagina HTML potrebbe essere stranamente allineato, come alcuni elementi potrebbero non utilizzare in assoluto coordinate. Il modo più semplice per allineare il contenuto di una pagina HTML usando le coordinate relative è quello di utilizzare una tabella. Pertanto, l'algoritmo di dimensionamento guarda l'elemento div genitore, crea una tabella, e crea una cella di una tabella per ogni elemento div figlio. Alcuni lettori potrebbero pensare che sarebbe stato più facile per definire tabella elementi piuttosto div e poi il lavoro algoritmo con gli elementi tavola direttamente. È vero che l'utilizzo di un elemento di tabella sarebbe stato più facile, ma questo algoritmo illustra come è possibile sostituire gli elementi HTML con nuovi elementi HTML. Tornando al codice sorgente della pagina HTML chiamante, il setCharacteristics metodo viene chiamato una volta FlexBox è stato assegnato . Si passa un oggetto di definizione, con una serie di oggetti incorporati a setCharacteristics. Lo scopo di setCharacteristics è quello di definire la larghezza delle colonne proporzionale degli elementi div bambino. Così, l'oggetto incorporato ha un certo numero di proprietà che corrispondono uno-a-uno con gli ID degli elementi div bambino. In questo esempio, l'oggetto incorporato definisce le seguenti limitazioni:

• col1: Ogni colonna deve essere 200 pixel di larghezza, e non vi è amaximum di una sola colonna.

• col2: Ogni colonna deve essere di 100 pixel di larghezza, e c'è un massimo di quattro colonne.

• col3: Ogni colonna deve essere 200 pixel di larghezza, e ci possono essere le colonne che ci sia spazio. Per comprendere le restrizioni, è necessario comprendere la natura degli algoritmi di calibrazione. L'idea di algoritmo di calibrazione è quello di definire le proporzioni che consentire una applicazione client di ordinare i contenuti in modo appropriato. aumentando la larghezza del browser, è possibile assemblare blocchi più di quello dei contenuti a fianco. La leggibilità della pagina HTML è migliorata, perché c'è meno lo scorrimento, e la pagina HTML simile a quello di un giornale. La differenza con la pagina HTML è che a differenza di un giornale, il numero di colonne visualizzate dipende dalla dimensione della finestra del client. Il vantaggio è che se si guarda la pagina HTML dal dispositivo UMPC o da un ampio notearticle schermo, è ancora un buon look and feel. Questo articolo e la messa a fuoco dimensionamento algoritmo sulla consapevolezza di dare il feedback che una pagina HTML cella di tabella è ora spazio per uno, due o tre colonne di contenuti. Come il contenuto viene visualizzato dipende dalla pagina HTML ed è al di là del campo di applicazione dell'algoritmo di dimensionamento. Tornando al codice sorgente della pagina HTML chiamante, il setContentCallback funzione viene chiamata dopo la chiamata setCharacteristics.

Lo scopo della setContentCallback funzione è quella di definire una callback utente che viene aggiornato con le nuove informazioni di utente quante colonne limitato grado di inserirsi in una cella. In questo esempio, il codice client visualizza i parametri nella cella della tabella. Reproportion Per la tabella, si chiama il metodo di aggiornamento. L'aggiornamento prima volta che viene chiamato, è dall'evento onload corpo. L'evento onload corpo è sparato una sola volta e non sarà chiamato ancora una volta se il client ridimensiona il browser client. Per avere il metodo di aggiornamento chiamato ogni volta che il browser viene ridimensionata, l'evento window.onresize è stato assegnato. In questo esempio, si assegna window.onresize al updateClientArea funzione, che effettua una chiamata unico metodo per flexbox.update, che a sua volta aggiorna le proporzioni della tabella. Ora che la teoria degli algoritmi di calibrazione è stata spiegata dal livello astratto , Let's discutere i dettagli dell'algoritmo di dimensionamento. Il codice seguente mostra l'applicazione completa delle algoritmo di dimensionamento. Si noti che l'algoritmo di calibrazione è un'implementazione personalizzata, e si potrebbe scegliere una strategia diversa nella tua stessa situazione:

funzione FlexBox (parentIdentifier) (if (typeof (parentIdentifier) == "string") (this.parentIdentifier = document.getElementById (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 + +) ( bambino var = tempArray [c1]; if (child.nodeName.toLowerCase () == "div") ( var cell = tablerow.insertCell (-1); cell.appendChild (bambino); if (child.id) ( cell.id = child.id; ) ) )this.parentIdentifier.appendChild (this.table);) FlexBox.prototype.setCharacteristics = function (caratteristiche) (this.characteristics caratteristiche =; FlexBox.prototype.setContentCallback = function (cbContent) (this.cbContent = cbContent; FlexBox.prototype. = function update () (var row = this.table.rows [0]; totalCells var = row.cells.length; availableLength var = document.body.clientWidth; for (var index in this.characteristics) (this.characteristics [ index]. cols = 0;) Increment var; if (this.characteristics.updateAlgorithm) (Increment = this.characteristics.updateAlgorithm;) else ( Incremento = function (ref) ( var takenWidth = 0; for (var index in ref.characteristics) ( takenWidth + = ref.characteristics [index]. cols * ref.characteristics [index]. larghezza; ) didIncrement var = 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) ( Incremento (ref); )Incremento) (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. larghezza) (row.Cells [C1]. width = this.characteristics [] id. width * 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]) ;)))))

Per la maggior parte, non il codice mostrato in grassetto è il codice di supporto per il codice in grassetto. La prima sezione di codice in grassetto implementa la logica utilizzata per convertire i div e gli elementi div bambino in una tabella che contiene gli elementi div bambino. La seconda sezione di codice in grassetto implementa la logica di proporzione le celle della tabella. Cominciamo da sezionare il primo blocco di codice e la manipolazione della tabella e gli elementi div bambino. È possibile manipolare il DOM in uno dei due modi: è possibile utilizzare la proprietà innerHTML, oppure è possibile manipolare gli oggetti utilizzando metodi. In questo articolo si manipola oggetti utilizzando metodi, in quanto tale approccio è più semplice. Gli elementi div bambino potrebbe contenere del codice HTML abbastanza sofisticato, che non si desidera per serializzare e deserializzare. L'utilizzo di oggetti e spostarli nel DOM non corrompe gli elementi div bambino. Notare i seguenti elementi dal codice:

Utilizzare il metodo document.createElement per istanziare un elemento HTML: L'istanza HTML restituito elemento viene istanziato, ma non fa parte della pagina HTML e deve essere aggiunto.

Se un elemento rappresenta un elemento HTML specifica come un tavolo, quindi associare il metodi di elemento HTML con l'istanza elemento: In questo esempio, una tabella viene creata un'istanza, le righe e le tabelle di riferimento.

Utilizzare una variabile temporanea per memorizzare gli elementi prima di essere riordinate: Remember prima, quando ho detto che l'algoritmo di ridimensionamento non ha bisogno di convertire gli elementi div a tavola? Prima di esaminare la spiegazione degli algoritmi di calibrazione, nota nel primo blocco di codice in grassetto come elementi vengono salvati in un array temporaneo (tempArray) prima essere aggiunti nuovamente al documento HTML come elementi figlio di una tabella. Questo passo del risparmio riferimenti temporaneamente è assolutamente indispensabile quando si manipola un modello di documento oggetto. Se non si salva temporaneamente, si potrebbe verificarsi alcuni effetti collaterali molto funky. Questo passo ulteriore è stato inserito l'articolo per spiegare come modificare un documento corretto.

Aggiungere un'istanza elemento HTML per la gerarchia delle pagine HTML con un metodo DOM tali come appendChild: Se l'istanza passato a appendChild è un elemento già si trova nella pagina HTML, quindi chiamare una removeChild prima di chiamare appendChild. La convocazione di removeChild avviene in modo trasparente. Il secondo blocco di codice in grassetto implementa l'algoritmo di partizione della tabella. La logica è una tecnica di forza bruta che distribuisce la larghezza tra le celle della tabella e vede se la distribuzione è più o meno la larghezza a disposizione. Il modo migliore per illustrare la logica è quella di passare attraverso la pagina di esempio HTML. Le restrizioni della pagina di esempio HTML sono stati delineati in forma di pallottola di un paio di pagine indietro. La logica legge le restrizioni e per la prima iterazione, i tentativi di inserire una singola colonna in ogni cella della tabella. Le larghezze di ciascuna colonna vengono sommati e testato contro la larghezza dell'area client. Se la larghezza aggiunto è inferiore alla larghezza dell'area client, poi un'altra iterazione viene eseguita. Nell'esempio, la prima cella tabella può contenere solo una larghezza singola colonna. Un'altra iterazione viene effettuata, e la seconda cell count colonna della tabella viene incrementato. Il modello di iterazioni risultati in un modello di conteggio di colonna che somiglia quanto segue:

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

Si utilizza la tecnica della forza bruta, in quanto si desidera distribuire le colonne uguali fra tutte le celle della tabella. Se si desidera utilizzare l'algoritmo di distribuzione, quindi l'istanza di oggetto passato al metodo setCharacteristics bisogno di avere un updateAlgorithm membro dati. Quando si implementa l'algoritmo, tenete sempre a mente che si desidera distribuire la larghezza delle colonne tra le celle della tabella. Ricordate le seguenti cose:

• Con la tecnologia odierna, una vasta gamma di dispositivi sono differenze estreme nella risoluzione dello schermo.

• larghezza fissa o percentuale, completamente basato su pagine HTML bell'aspetto solo su dimensioni dello schermo specifici. Se uno schermo è al di là di quelle dimensioni, la pagina HTML sembra male.

• Quando ospitare diverse risoluzioni dello schermo, si consideri il layout di pagina in modo dinamico le dimensioni orizzontale e verticale. Maggior parte delle pagine in considerazione solo la pagina HTML come dinamiche nella dimensione verticale.

• Non utilizzare le coordinate assolute quando si utilizza proporzioni algoritmico, perché richiede di adeguare tutti gli elementi della pagina HTML intera. Utilizzate le coordinate relative, che implicano elementi di tabella HTML.

• Quando si sposta il contenuto in modo orizzontale e verticale, l'uso di un algoritmo di distribuzione che distribuisce in modo uniforme il contenuto della pagina HTML.

un articolo presentato da Sonja Lande


Disclaimer:Il nostro sito non è responsabile per il contenuto di questo articolo. Webarticles è una risorsa gratuita di informazioni.
Importante: Questo articolo "Creazione di layout Dynamic" è stato tradotto da un software automatico. Ci dispiace per eventuali errori di ortografia che possono essersi verificati. Grazie per la vostra comprensione.


Online: 175 users browsing the articles directory   


  

|