Maison > interface Web > tutoriel CSS > Comment utiliser CSS et D3 pour réaliser une image dansante (code source ci-joint)

Comment utiliser CSS et D3 pour réaliser une image dansante (code source ci-joint)

不言
Libérer: 2018-10-08 16:48:54
avant
2179 Les gens l'ont consulté

Le contenu de cet article explique comment utiliser CSS et D3 pour réaliser une image dansante (code source ci-joint). Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer. pour vous.

Aperçu de l'effet

Comment utiliser CSS et D3 pour réaliser une image dansante (code source ci-joint)

Téléchargement du code source

https://github.com/comehope/front- end-daily-challenges

Interprétation du code

définit dom, le conteneur contient 1 .square sous-conteneur, le sous-conteneur en contient 4 <span></span>, chaque <span></span> représente une diagonale secteur :

<figure>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
</figure>
Copier après la connexion

Affichage centré :

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #222;
}
Copier après la connexion

Définir l'unité de taille du conteneur, 1em est égal à 8px :

.container {
    font-size: 8px;
}
Copier après la connexion

sous-conteneur Les 4 <span></span> qu'il contient ne définissent pas la largeur et la hauteur, mais définissent uniquement la bordure. Le 1er et le 4ème <span></span> ne prennent que les bordures gauche et droite, et les 2ème et 3ème <span></span> ne prennent que les bordures. bordures supérieure et inférieure :

.square span {
    display: block;
    border: 2.5em solid transparent;
    color: #ddd;
}

.square span:nth-child(1),
.square span:nth-child(4) {
    border-left-color: currentColor;
    border-right-color: currentColor;
}

.square span:nth-child(2),
.square span:nth-child(3) {
    border-top-color: currentColor;
    border-bottom-color: currentColor;
}
Copier après la connexion

Changez la bordure en arc :

.square span {
    border-radius: 50%;
}
Copier après la connexion

Utilisez la disposition en grille dans le sous-conteneur pour définir 4 <span></span> en une grille 2 * 2 :

.square {
    display: grid;
    grid-template-columns: repeat(2, 1fr);
    grid-gap: 0.2em;
    padding: 0.1em;
}
Copier après la connexion

Faites pivoter 4 <span></span> pour qu'ils forment un carré, qui ressemble à une fleur. Le résultat du calcul est de 45 degrés. Il s'écrit ainsi pour être cohérent avec la forme de. le calcul dans l'animation suivante :

.square span {
    transform: rotate(calc(45deg + 90deg * 0));
}
Copier après la connexion

Ajoutez une animation qui fait <span></span> tourner. L'ensemble du processus d'animation tourne 4 fois, chaque rotation est de 90 degrés. Après 4 rotations, il revient à la position d'origine. :

.square span {
    animation: rotation 2s ease-in-out infinite;
}

@keyframes rotation {
    0% { transform: rotate(calc(45deg + 90deg * 0)); }
    25% { transform: rotate(calc(45deg + 90deg * 1)); }
    50% { transform: rotate(calc(45deg + 90deg * 2)); }
    75% { transform: rotate(calc(45deg + 90deg * 3)); }
    100% { transform: rotate(calc(45deg + 90deg * 4)); }
}
Copier après la connexion

Faites-en 2<span></span> Mouvement dans le sens inverse :

.square span:nth-child(2),
.square span:nth-child(3) {
    animation-direction: reverse;
}
Copier après la connexion

À ce stade, l'animation d'un .square sous-conteneur est terminée, et ensuite, 4 animations de .square sont réalisées.
Ajoutez 3 groupes supplémentaires de .square sous-conteneurs dans le dom :

<figure>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
    <div>
        <span></span>
        <span></span>
        <span></span>
        <span></span>
    </div>
</figure>
Copier après la connexion

Utilisez la disposition en grille pour disposer les 4 .square en forme de grille, la variable --columns est le côté longueur de la grille, c'est-à-dire qu'il y a 2 .square sous-conteneurs de chaque côté :

.container {
    display: grid;
    --columns: 2;
    grid-template-columns: repeat(var(--columns), 1fr);
}
Copier après la connexion

Maintenant, on dirait qu'il y a plusieurs petits carrés noirs qui bougent constamment. Quand il y a plus d'éléments dom, l'effet d'animation ressemble à Plus cela devient spectaculaire, tout comme une danse de groupe, plus il y a de monde, plus cela devient puissant. Ensuite, utilisez d3 pour ajouter des éléments dom par lots.
Introduire la bibliothèque d3 :

<script></script>
Copier après la connexion

Déclarer une constante COLUMNS, indiquant la longueur du côté de la grille :

const COLUMNS = 2;
Copier après la connexion

Supprimer le sous-élément .square dans le fichier html, utilisez plutôt d3 pour créer dynamiquement :

d3.select('.container')
    .selectAll('p')
    .data(d3.range(COLUMNS * COLUMNS))
    .enter()
    .append('p')
    .attr('class', 'square');
Copier après la connexion

Continuez à utiliser la syntaxe de concaténation pour ajouter des sous-éléments <span></span> :

d3.select('.container')
    .selectAll('p')
    .data(d3.range(COLUMNS * COLUMNS))
    .enter()
    .append('p')
    .attr('class', 'square')
    .selectAll('span')
    .data(d3.range(4))
    .enter()
    .append('span');
Copier après la connexion

Supprimez la déclaration de variable --columns dans le fichier css et changez Pour utiliser la déclaration dynamique d3 :

d3.select('.container')
    .style('--columns', COLUMNS)
    /*略*/
Copier après la connexion

Enfin, changez la longueur du côté en 4, c'est-à-dire laissez 16 .square animer ensemble :

const COLUMNS = 4;
Copier après la connexion

Vous avez terminé !

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