日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 前端技术 > CSS >内容正文

CSS

如何用 CSS 和 D3 创作一个抽象的黑白交叠动画

發布時間:2025/3/21 CSS 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何用 CSS 和 D3 创作一个抽象的黑白交叠动画 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

效果預覽

在線演示

按下右側的“點擊預覽”按鈕可以在當前頁面預覽,點擊鏈接可以全屏預覽。

https://codepen.io/comehope/pen/Yjomyd

可交互視頻

此視頻是可以交互的,你可以隨時暫停視頻,編輯視頻中的代碼。

請用 chrome, safari, edge 打開觀看。

https://scrimba.com/p/pEgDAM/cydZrfr

源代碼下載

本地下載

每日前端實戰系列的全部源代碼請從 github 下載:

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

代碼解讀

定義 dom,容器中包含 3 個子元素,每個子元素代表一個圓:

<div class="circles"><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%; }

定義變量,畫出多個圓,每個圓圍繞著第 1 個圓的底部中點旋轉,圍成一個更大的圓形:

.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 src="https://d3js.org/d3.v5.min.js"></script>

用 d3 為表示圓數量的變量賦值:

const COUNT_OF_PARTICLES = 30;

d3.select(’.circles’)
.style(’–particles’, COUNT_OF_PARTICLES)

<p>用 d3 生成 dom 元素:</p> <pre class="brush:js">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 文件中的相關 dom 元素和 css 文件中相關的 css 變量。

最后,把圓的數量調整為 30 個:

const COUNT_OF_PARTICLES = 30; ```

大功告成!

原文地址:https://segmentfault.com/a/1190000016047889

總結

以上是生活随笔為你收集整理的如何用 CSS 和 D3 创作一个抽象的黑白交叠动画的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。