Creating Dynamic Layouts

Cet article résout un problème très ancien, car il porte sur la création d'une interface utilisateur dynamique qui déplace son aménagement en fonction de ce règlement ou de l'agent utilisateur est l'affichage ou la visualisation de l'interface utilisateur. Problème Vous souhaitez créer une interface utilisateur dynamique qui est exposé manière aussi logique et lisible que possible, est réparti sur une grande variété de différents agents utilisateurs (tels que les diverses résolutions, les navigateurs, les appareils, et ainsi de suite), et fait usage raisonné de l'écran de l'immobilier disponible. Théorie Pensez à ce qui se passe lorsque vous surfez sur une page HTML comme http://www.eweek.com.

  

Note Je ne suis pas critique eWeek spécifiquement, mais seulement à titre d'exemple, parce que presque tous les sites Web a le même problème. La réalité est que ni vaut mieux, parce que chacune a ses avantages et ses inconvénients. Pourtant, ni est optimale. Lorsque le Web d'abord commencé à devenir populaire, la plupart des dispositifs de calcul avait même la résolution d'écran, et les gens rarement surfé sur l'Internet sur les appareils de téléphonie cellulaire. Les besoins informatiques sont maintenant des dispositifs de calcul sont extrêmement puissantes, mais elles varient à l'extrême dans leur résolution d'écran. Personnelle peut varier d'un minimum de 800 × 480 à un sommet de 4500 × 1200 pour un double écran. Il n'a pas de sens de fixer la résolution d'écran. Les proportions utilisées dans le navigateur de petite taille sont d'une colonne, une colonne et une colonne. Toutefois, le navigateur utilise plus d'une colonne, deux colonnes et deux colonnes. Qu'est-ce que vous faites est réajuster l'espace ainsi que dans la petite fenêtre, une seule colonne est illustré. Dans la fenêtre plus grande, plus de colonnes peut être illustré. Solution Cet article explique la solution en morceaux, en commençant par la page HTML appelant globale qui appelle l'algorithme de calibrage, puis l'algorithme de dimensionnement elle-même. Le code suivant comprend globale de la page HTML.

 Source: / site / ROOT / articles ajax / dhtml / dynamiclayout.html  Dynamic Layout 

En regardant le code de la page HTML, vous pouvez voir qu'un type appelé FlexBox est instancié et affectés à l'FlexBox variable globale. Le type FlexBox est l'algorithme de calibrage. L'action de l'instanciation et en appelant le type FlexBox est effectuée dans le InitializePage fonction, qui est appelée par le body.onload event.2 Vous voulez instancier le type FlexBox en cas body.onload, parce que c'est le premier endroit sûr code pour fonctionner sur un modèle DOM complète. Lorsque FlexBox est instancié, il a besoin d'un paramètre du constructeur, dans le cas de l'exemple, c'est le tampon «contenu». Le tampon «contenu» est un code de référence à un élément HTML qui sert de base à des éléments HTML qui sera redimensionné. Dans l'exemple, les références d'identification contenu dans un élément div, qui contient des éléments div enfant. Dans cet algorithme de calibrage, d'un élément enfant références div div éléments. Dans votre application de cet article, vous n'avez pas besoin de faire cela. Cet algorithme montre que le dimensionnement d'un élément HTML contient un certain nombre de blocs de contenu, qui servent de colonnes qui seront redimensionnées. Lorsque vous affectez une instance de FlexBox à FlexBox, FlexBox initialise s'est d'abord et réorganise les éléments div dans une structure de table. L'exécution du constructeur FlexBox oblige à réorganiser les éléments div le code HTML suivant:

La réorganisation du code HTML à un élément de tableau est une nécessité. Deux modes d'aligner proportionnellement éléments sur une page HTML: coordonnées absolues et relatives coordonnées. Par défaut, HTML utilise des coordonnées relatives, que le navigateur calcule. En coordonnée relative mode, il vous suffit de définir les éléments qui suivent les autres éléments. Utilisant des coordonnées absolues résout les problèmes d'alignement de trois éléments div enfant, mais le reste de la page HTML peut paraître étrangement alignés, car certains éléments risquent de ne pas utiliser absolue coordonnées. La façon simple d'aligner le contenu sur une page HTML en utilisant les coordonnées relatives consiste à utiliser une table. Ainsi, l'algorithme de calibrage se penche sur l'élément div parent, crée une table, et crée une cellule de tableau pour chaque élément div enfant. Certains lecteurs pourraient penser qu'il aurait été plus facile de définir les éléments plutôt div table et ont ensuite l'algorithme de travail avec les éléments du tableau directement. Il est vrai que l'utilisation d'un élément de tableau aurait été plus facile, mais cet algorithme montre comment vous pouvez remplacer les éléments HTML avec de nouveaux éléments HTML. Pour en revenir au code source de la page HTML appelant, le setCharacteristics méthode est appelée une fois FlexBox a été attribué . Vous passez une définition d'objet avec un certain nombre d'objets embarqués à setCharacteristics. Le but de setCharacteristics est de définir la largeur des colonnes proportionnelle des éléments enfants div. Ainsi, l'objet incorporé a un certain nombre de propriétés qui correspondent un-à-tête avec les identifiants des éléments enfants div. Dans l'exemple, l'objet incorporé définit les restrictions suivantes:

• col1: Chaque colonne doit être de 200 pixels de large, et il ya amaximum que d'une seule colonne.

• col2: Chaque colonne doit être de 100 pixels de large, et il ya un maximum de quatre colonnes.

• Col3: Chaque colonne doit être de 200 pixels de large, et il peut y avoir autant de colonnes qu'il ya de l'espace. Pour comprendre les restrictions, vous devez comprendre la nature de l'algorithme de calibrage. L'idée de l'algorithme de calibrage est de définir des proportions qui permettre à une application client à commander du contenu de manière appropriée. En augmentant la largeur du navigateur, vous pouvez assembler des blocs de plus de côté le contenu de l'autre. La lisibilité de la page HTML est amélioré, car il ya moins de défilement, et la page HTML ressemble à celle d'un journal. La différence avec la page HTML est que, contrairement à un journal, le nombre de colonnes affichées dépend de la taille de la fenêtre du client. L'avantage est que si vous regardez sur la page HTML à partir de l'appareil ou d'un UMPC notearticle grand écran, vous obtenez toujours un regard et sentir bon. Cet article et l'accent algorithme de calibrage sur la conscience de donner le feedback page HTML qu'un cellule de tableau a maintenant la place pour un, deux, ou trois colonnes de contenu. Comment faire que le contenu est affiché dépend de la page HTML et est au-delà du champ d'application de l'algorithme de calibrage. Pour en revenir au code source de la page HTML appelant, le setContentCallback fonction est appelée après l'appel setCharacteristics.

Le but de la setContentCallback fonction est de définir un rappel d'utilisateur qui est mis à jour avec les nouvelles informations de l'utilisateur combien de limiter les colonnes peuvent tenir dans une cellule. Dans l'exemple, le code client affiche les paramètres dans la cellule du tableau. Reproportion Pour la table, vous appelez la méthode de mise à jour. La mise à jour première fois est appelé, c'est de l'événement onload corps. L'événement onload corps est tiré qu'une seule fois et ne sera pas appelé de nouveau si le client redimensionne le navigateur du client. Pour avoir la méthode de mise à jour appelée quand le navigateur est redimensionné, l'événement window.onresize est affecté. Dans l'exemple, vous assignez window.onresize updateClientArea à la fonction, qui effectue un appel de méthode unique pour flexbox.update qui, à leur tour, les proportions des mises à jour de la table. Maintenant que la théorie de l'algorithme de calibrage a été expliqué à partir du niveau abstrait , nous allons discuter les détails de l'algorithme de calibrage. Le code suivant montre l'exécution complète de l'algorithme de calibrage. Notez que l'algorithme de calibrage est une implémentation personnalisée, et vous pourriez choisir une stratégie différente dans votre propre situation:

fonction 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); tempArray var = 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 + +) ( enfant var = tempArray [c1]; if (child.nodeName.toLowerCase () == "div") ( var cellule = tablerow.insertCell (-1); cell.appendChild (enfant); if (child.id) ( cell.id = child.id; ) ) )this.parentIdentifier.appendChild (this.table);) FlexBox.prototype.setCharacteristics = function (caractéristiques) (this.characteristics caractéristiques =; FlexBox.prototype.setContentCallback = function (cbContent) (this.cbContent = cbContent; FlexBox.prototype. = update function () (var row = this.table.rows [0]; totalCells var = row.cells.length; availableLength var = document.body.clientWidth; for (var index dans this.characteristics) (this.characteristics [ index]. cols = 0;) var Increment; if (this.characteristics.updateAlgorithm) (Incrément = this.characteristics.updateAlgorithm;) else ( Incrément = function (ref) ( takenWidth var = 0; for (var index dans ref.characteristics) ( takenWidth + = ref.characteristics [index]. cols * ref.characteristics [index]. largeur; ) didIncrement var = false; for (var index dans 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. largeur) (row.Cells [c1]. width = this.characteristics [] id. this.characteristics largeur * [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]) ;)))))

Pour la plupart, le code ne figurent pas en gras est le support des codes pour le code de gras. La première section de code gras implémente la logique utilisée pour convertir la DIV et éléments div enfant dans une table qui contient les éléments div enfant. La deuxième section de code gras implémente la logique à la proportion des cellules du tableau. Commençons par la dissection du premier bloc de code et la manipulation de la table et des éléments div enfant. Vous pouvez manipuler le DOM dans l'une des deux façons suivantes: Vous pouvez utiliser la propriété innerHTML, ou que vous pouvez manipuler des objets en utilisant des méthodes. Cet article manipule des objets en utilisant les méthodes, parce que cette approche est plus simple. Les éléments div enfant peut contenir certains assez sophistiqué HTML code que vous ne voulez pas la sérialisation et la désérialisation. Utilisation des objets et leur déplacement dans les DOM ne corrompt pas les éléments div enfant. Notez les articles suivants du code:

Utilisez la méthode document.createElement d'instancier un élément HTML: Le retour HTML instance d'élément est instancié, mais ne fait pas partie de la page HTML et doit être ajoutée.

Si un élément représente un élément HTML spécifique, comme une table, puis associer le méthodes de l'élément HTML avec cette instance d'élément: Dans l'exemple, une table est instancié, et les lignes des tables de référence.

Utiliser une variable temporaire pour stocker des éléments avant qu'ils ne soient réorganisés: Rappelez-vous plus tôt, quand j'ai dit que l'algorithme de calibrage n'est pas nécessaire de convertir les éléments div à table? Avant d'aborder l'explication de l'algorithme de calibrage, un avis dans le premier bloc de code en gras façon dont les éléments sont enregistrés dans un tableau temporaire (tempArray) avant être rajoutée au document HTML comme éléments enfants d'une table. Cette étape de sauver des références est temporairement absolument crucial lorsque vous manipulez un modèle objet de document. Si vous n'enregistrez pas temporairement, vous pourriez ressentir certains effets secondaires très funky. Cette étape supplémentaire a été ajouté à cet article pour illustrer la façon de manipuler un document correctement.

Ajoutez une instance élément HTML à la hiérarchie des pages HTML à l'aide d'une méthode DOM telles comme appendChild: Si l'instance passée à appendChild est un élément déjà présent dans la page HTML, puis appeler une removeChild avant d'appeler appendChild. La vocation de removeChild se passe dans la transparence. Le deuxième bloc de code en gras implémente l'algorithme de partitionner la table. La logique est une technique de force brute qui distribue les largeurs entre les cellules du tableau et voit si la distribution est plus ou moins de la largeur disponible. La meilleure façon d'illustrer la logique est de passer par la page d'exemple HTML. Les restrictions de l'exemple de page HTML ont été décrites sous forme de points en quelques pages en arrière. La logique lit les restrictions et pour la première itération, les tentatives de placer une seule colonne dans chaque cellule du tableau. La largeur de chaque colonne sont additionnées et testé contre la largeur de la zone cliente. Si la largeur ajoutée est inférieure à la largeur de la zone client, puis une autre itération est exécutée. Dans l'exemple, la première cellule du tableau ne peut contenir une largeur de colonne unique. Un autre itération est effectuée, et la seconde Table Count cellule de colonne est incrémenté. Le schéma d'itérations résultats dans un schéma qui ressemble à la colonne compter le texte suivant:

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

Vous utilisez la technique de la force brute, parce que vous voulez distribuer les colonnes à parts égales entre toutes les cellules du tableau. Si vous voulez utiliser votre propre algorithme de distribution, alors l'instance d'objet passé à la setCharacteristics méthode a besoin d'avoir un updateAlgorithm membre de données. Lors de l'implémentation de votre propre algorithme, gardez à l'esprit que vous voulez distribuer la largeur des colonnes entre les cellules du tableau. Rappelez-vous les choses suivantes:

• Avec la technologie d'aujourd'hui, une grande variété de dispositifs présentent des différences extrêmes de résolution d'écran.

• largeur fixe ou entièrement basées sur des pourcentages pages HTML aussi bonne que sur les dimensions de l'écran spécifique. Si un écran est au-delà de ces dimensions, la page HTML semble mauvais.

• Lorsque vous accueillir différentes résolutions d'écran, envisager la mise en page de manière dynamique dans les dimensions horizontales et verticales. La plupart des pages ne considérer que la page HTML comme étant dynamique dans la dimension verticale.

• Ne pas utiliser des coordonnées absolues lors de l'utilisation des proportions algorithmique, parce que cela requiert de réglage de tous les éléments sur toute la page HTML. Utilisez des coordonnées relatives, qui impliquent des éléments de tableau HTML.

• Lorsque vous déplacez le contenu d'une manière horizontale et verticale, l'utilisation d'un algorithme de distribution qui distribue le contenu de manière égale sur la page HTML.

un article présenté par Sonja Lande


Disclaimer:Notre site n'est pas responsable du contenu de cet article. Webarticles est une ressource d'information gratuite.
Important: Cet article intitulé «Créer mise en page dynamique" a été traduit par un logiciel automatique. Nous nous sentons désolés pour les fautes d'orthographe que mai ont eu lieu. Nous vous remercions de votre compréhension.


Online: 261 users browsing the articles directory