日韩性视频-久久久蜜桃-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 创作一个抽象的黑白交叠动画的全部內容,希望文章能夠幫你解決所遇到的問題。

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

主站蜘蛛池模板: 国产精品欧美亚洲 | 亚洲色婷婷久久精品av蜜桃 | 欧美日韩国产一区二区 | se94se欧美 | 古装做爰无遮挡三级聊斋艳谭 | 日本午夜啪啪 | 精品毛片 | 亚洲特黄毛片 | av手机天堂网 | 成人精品在线播放 | 色激情网 | 篠田优在线观看 | 日本三级韩国三级三级a级中文 | 亚洲a∨无码无在线观看 | 91天天色 | 综合激情av| 久久国产激情 | 国语粗话呻吟对白对白 | 欧美一区国产一区 | 亚洲免费观看高清在线观看 | 黄色一区二区三区 | 国产精品福利网站 | 欧美精品片 | 国产无遮挡又黄又爽 | 欧美日韩女优 | 国色天香一区二区 | 国产传媒视频 | 国产一级做a爱片久久毛片a | 亚洲精品综合在线 | 国产精品一区在线 | 亚洲欧美色视频 | 午夜精品三级久久久有码 | 成年人视频在线看 | 麻豆chinese新婚xxx | 亚洲综合激情另类小说区 | 国产精品羞羞答答在线观看 | 国产精品福利在线观看 | 国精无码欧精品亚洲一区蜜桃 | 亚洲免费观看高清完整版在线 | 国产黄色影院 | 成人毛片大全 | 免费人妻一区二区三区 | 亚洲色在线视频 | 99久久精品免费看国产四区 | 欧美一级xxx | 波多野在线播放 | 都市乱淫 | 91插插插永久免费 | 日本在线免费视频 | 久热精品在线观看视频 | 蘑菇福利视频一区播放 | caoporn视频在线观看 | 韩国伦理电影免费在线 | 一区二区三区在线免费观看视频 | 一级高清毛片 | 国产第4页 | 久久网av| 逼逼av网站| 操操综合| 咪咪色影院 | 可以看av的网址 | 国产日韩欧美高清 | 破处视频在线观看 | 国产一国产二国产三 | 亚洲图片综合网 | 成年人毛片视频 | 久久精品国产99久久不卡 | 91久操 | 可以免费看的av | 国产精品扒开腿做爽爽爽视频 | wwyoujizzcom| 亚洲影视精品 | 日韩成人高清在线 | 印度午夜性春猛xxx交 | 国产一区亚洲二区 | 国产精品91视频 | 成人无码一区二区三区 | 国产福利一区二区三区视频 | 欧美特级黄 | 国产视频第二页 | 亚洲免费精品视频 | 婷婷国产成人精品视频 | 国产一级二级三级在线观看 | 99久| 国产熟妇久久777777 | 另类激情综合 | 无码国内精品人妻少妇蜜桃视频 | 麻豆一区二区99久久久久 | www.好吊色 | 91插插插插 | 五月天激情综合 | 国产91在线播放九色 | 国产又粗又猛 | 国产做受高潮漫动 | 激情五月婷婷综合网 | av一区二区免费 | 亚洲成在线观看 | 亚洲av久久久噜噜噜熟女软件 | 成人精品久久久午夜福利 |