Maison >interface Web >tutoriel CSS >Comment utiliser CSS et D3 pour obtenir l'effet de points lumineux et de particules se complétant (code source ci-joint)

Comment utiliser CSS et D3 pour obtenir l'effet de points lumineux et de particules se complétant (code source ci-joint)

不言
不言original
2018-09-20 16:28:543188parcourir

Le contenu de cet article explique comment utiliser CSS et D3 pour obtenir l'effet de particules ponctuelles se complétant (code source ci-joint). Les amis dans le besoin peuvent s'y référer. j'espère que cela vous sera utile.

Aperçu de l'effet

Comment utiliser CSS et D3 pour obtenir leffet de points lumineux et de particules se complétant (code source ci-joint)


Téléchargement du code source

Tous les codes sources du front-end quotidien série pratique Veuillez télécharger depuis github :

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

Interprétation du code

Définissez dom, le conteneur contient 3 enfants Élément :

<div>
    <span></span>
    <span></span>
    <span></span>
</div>

Définir le fond de la page :

body {
    margin: 0;
    width: 100vw;
    height: 100vh;
    background: radial-gradient(circle at center, #222, black 20%);
}

Définir la taille du conteneur :

.container {
    width: 100%;
    height: 100%;
}

Définir le style du point lumineux, qui définit 2 variables de couleur plus claires et plus foncées :

.container {
    position: relative;
}

.container span {
    --bright-color: #d4ff00;
    --dark-color: #e1ff4d;
    position: absolute;
    width: 30px;
    height: 30px;
    margin-left: -15px;
    margin-top: -15px;
    background: radial-gradient(var(--bright-color), var(--dark-color));
    border-radius: 50%;
    box-shadow: 0 0 25px 3px var(--dark-color);
}

Positionnez la tache lumineuse au centre de la page :

.container span {
    transform: translateX(50vw) translateY(50vh);
}

Augmentez l'effet d'animation de la tache lumineuse qui s'étend et se rétrécit à partir du centre vers l'environnement :

.container span {
    animation: animate 1.5s infinite alternate;
    animation-delay: calc(var(--n) * 0.015s);
}

@keyframes animate {
    80% {
        filter: opacity(1);
    }

    100% {
        transform: translateX(calc(var(--x) * 1vw)) translateY(calc(var(--y) * 1vh));
        filter: opacity(0);
    }
}

Définissez les variables --x, --y et --n utilisées dans l'animation :

.container span:nth-child(1) {
    --x: 20;
    --y: 30;
    --n: 1;
    
}

.container span:nth-child(2) {
    --x: 60;
    --y: 80;
    --n: 2;
}

.container span:nth-child(3) {
    --x: 10;
    --y: 90;
    --n: 3;
}

Définissez la profondeur de champ du conteneur pour donner l'impression que le mouvement du point lumineux va de loin vers près :

.container {
    perspective: 500px;
}

.container span {
    transform: translateX(50vw) translateY(50vh) translateZ(-1000px);
}

À ce stade, les effets d'animation d'un petit nombre d'éléments sont terminés. Ensuite, utilisez d3 pour créer des éléments dom. et variables CSS par lots.
Introduisez la bibliothèque d3 et supprimez les sous-éléments dans le fichier html et les variables des sous-éléments dans le fichier css :

<script></script>

Définissez le nombre de particules ponctuelles :

const COUNT = 3;

Créer un dom par lots Élément :

d3.select('.container')
    .selectAll('span')
    .data(d3.range(COUNT))
    .enter()
    .append('span');

Définissez les valeurs​​de --x, --y et --n pour les éléments dom, où --x et --y sont nombres aléatoires de 1 à 99 :

d3.select('.container')
    /* 略 */
    .style('--x', () => d3.randomUniform(1, 99)())
    .style('--y', () => d3.randomUniform(1, 99)())
    .style('--n', d => d);

Définissez les valeurs de --bright-color et --dark-color pour l'élément dom :

d3.select('.container')
    /* 略 */
    .style('--dark-color', (d) => d3.color(`hsl(${70 + d * 0.1}, 100%, 50%)`))
    .style('--bright-color', (d) => d3.color(`hsl(${70 + d * 0.1}, 100%, 50%)`).brighter(0.15));

Enfin, définissez le nombre de lumière repérer les particules à 200 :

const COUNT = 200;

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!

Déclaration:
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