Maison > interface Web > js tutoriel > Méthode d'implémentation de la disposition du tonneau Vue (avec code)

Méthode d'implémentation de la disposition du tonneau Vue (avec code)

不言
Libérer: 2018-10-29 14:55:49
avant
2612 Les gens l'ont consulté

Le contenu de cet article concerne la méthode d'implémentation de la disposition des barillets Vue (avec code). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.

La société a récemment refactorisé et utilise le framework Vue. En ce qui concerne la présentation d'une marque, parce que les longueurs de caractères des marques sont incohérentes, chaque étiquette de marque a des longueurs différentes. La disposition multiligne entraînera une disposition inégale de la marque de chaque ligne, ce qui affectera sérieusement l'apparence. Il y a donc ce plug-in de disposition en barillet.

La mise en œuvre de la disposition des barils est la suivante :

1. Tout d'abord, triez le contenu à remplir et filtrez les éléments dans chaque ligne.

2. Coupez ensuite chaque rangée d'éléments pour les rendre joliment alignés.

Pas à pas

1. Sélectionnez les éléments de chaque rangée en fonction de vos besoins

Obtenez d'abord les éléments dont nous avons besoin et la largeur de notre conteneur cible.

Conteneur du composant Vue :

<template>
  <div ref="barrel">
      <slot></slot>
  </div>
</template>
Copier après la connexion

2 De plus, nous devons obtenir le conteneur et la largeur du conteneur

this.barrelBox = this.$refs.barrel;
this.barrelWidth = this.barrelBox.offsetWidth;
Copier après la connexion

. 3. Ensuite, nous parcourons nos éléments et les regroupons en fonction de leur largeur.

ps : Lors de l'obtention de la largeur d'un élément, il faut distinguer les modèles de boîtes.

Array.prototype.forEach.call(items, (item) => {

            paddingRight = 0;

            paddingLeft = 0;

            marginLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-left'));

            marginRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('margin-right'));

            let boxSizing = window.getComputedStyle(item, "").getPropertyValue('box-sizing');

            if (boxSizing !== 'border-box') {

                paddingRight = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-right'));

                paddingLeft = parseInt(window.getComputedStyle(item, "").getPropertyValue('padding-left'));

            }

            widths = item.offsetWidth + marginLeft + marginRight + 1;

            item.realWidth = item.offsetWidth - paddingLeft - paddingRight + 1;

            let tempWidth = rowWidth + widths;

            if (tempWidth > barrelWidth) {

                dealWidth(rowList, rowWidth, barrelWidth);

                rowList = [item];

                rowWidth = widths;

            } else {
                rowWidth = tempWidth;

                rowList.push(item);

            }

        })
Copier après la connexion

Quatrièmement, la prochaine étape consiste à répartir raisonnablement les éléments de chaque groupe.

const dealWidth = (items, width, maxWidth) => {
let remain = maxWidth - width;
let num = items.length;
let remains = remain % num;
let residue = Math.floor(remain / num);
items.forEach((item, index) => {
    if (index === num - 1) {
        item.style.width = item.realWidth + residue + remains + 'px';
    } else {
        item.style.width = item.realWidth + residue + 'px';
    }
})
}
Copier après la connexion

J'utilise une méthode de répartition uniforme pour répartir uniformément l'excédent de largeur sur chaque élément. Par exemple, si tous les éléments d’une ligne occupent 800 px et qu’il y a 8 éléments, la longueur totale de la ligne est de 960 px. Ensuite, la largeur augmentée de chaque ligne est de (960-800)/8=16, et la largeur de chaque élément augmente de 16px

Il convient de noter que js aura des problèmes de précision lors de l'obtention de la largeur de l'élément, il est donc nécessaire de prérégler un pixel pour la mise en mémoire tampon.

Mon adresse de code : Github :vue-barrel; npm: vue-barrel

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:segmentfault.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal