ホームページ  >  記事  >  ウェブフロントエンド  >  CSS と D3 を使用して白黒の重なり合うアニメーション効果を実現する方法

CSS と D3 を使用して白黒の重なり合うアニメーション効果を実現する方法

不言
不言オリジナル
2018-08-17 14:03:262325ブラウズ

この記事の内容は、CSS と D3 を使用して、js でこれを理解する方法を紹介しており、必要な友人が参考になれば幸いです。助けます。

効果プレビュー

CSS と D3 を使用して白黒の重なり合うアニメーション効果を実現する方法

コード解釈

domを定義、コンテナには3つのサブ要素が含まれ、各サブ要素は円を表します:

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

中央表示:

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: black;
}

コンテナサイズの定義:

.circles {
    width: 60vmin;
    height: 60vmin;
}

コンテナを描画します1 つの円:

.circles {
    position: relative;
}

.circles span {
    position: absolute;
    box-sizing: border-box;
    width: 50%;
    height: 50%;
    background-color: white;
    border-radius: 50%;
    left: 25%;
}

変数を定義し、複数の円を描画します。各円は最初の円の下の中点を中心に回転して、より大きな円を形成します:

.circles {
    --particles: 3;
}

.circles span {
    transform-origin: bottom center;
    --deg: calc(360deg / var(--particles) * (var(--n) - 1));
    transform: rotate(var(--deg));
}

.circles span:nth-child(1) {
    --n: 1;
}

.circles span:nth-child(2) {
    --n: 2;
}

.circles span:nth-child(3) {
    --n: 3;
}

子要素にアニメーション効果を追加します:

.circles span {
    animation: rotating 5s ease-in-out infinite;
}

@keyframes rotating {
    0% {
        transform: rotate(0);
    }

    50% {
        transform: rotate(var(--deg)) translateY(0);
    }

    100% {
        transform: rotate(var(--deg)) translateY(100%) scale(2);
    }
}

サブ要素の色の混合を設定します。サブ要素間の重なり部分が黒く表示されるようにモードを変更します:

.circles span {
    mix-blend-mode: difference;
}

コンテナにアニメーション効果を追加して、サブ要素の拡大を相殺し、アニメーションを滑らかに接続します:

.circles {
    animation: zoom 5s linear infinite;
}

@keyframes zoom {
    to {
        transform: scale(0.5) translateY(-50%);
    }
}

次に、d3 バッチ処理の dom 要素を使用します。そしてCSS変数。
d3 ライブラリを紹介します:

<script></script>

d3 を使用して円の数を表す変数に値を割り当てます:

const COUNT_OF_PARTICLES = 30;

d3.select('.circles')
    .style('--particles', COUNT_OF_PARTICLES)

d3 を使用して dom 要素を生成します:

d3.select('.circles')
    .style('--particles', COUNT_OF_PARTICLES)
    .selectAll('span')
    .data(d3.range(COUNT_OF_PARTICLES))
    .enter()
    .append('span');

d3 を使用して添え字を表す変数に値を割り当てますサブ要素の:

d3.select('.circles')
    .style('--particles', COUNT_OF_PARTICLES)
    .selectAll('span')
    .data(d3.range(COUNT_OF_PARTICLES))
    .enter()
    .append('span')
    .style('--n', (d) => d + 1);

HTML ファイルを削除します。 CSS ファイル内の関連する dom 要素と関連する CSS 変数。

最後に、円の数を 30 に調整します:

rreee

これで完了です。

関連する推奨事項:

純粋な CSS を使用して、DOM 要素を使用せずにアニメーション効果を実装する方法

純粋な CSS を使用して、動く白いウサギのアニメーション効果を実装する方法

CSS を使用してトラックローダーを実装する方法効果

以上がCSS と D3 を使用して白黒の重なり合うアニメーション効果を実現する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。