摘要:引入庫(kù)用為表示圓數(shù)量的變量賦值用生成元素用為表示子元素下標(biāo)的變量賦值刪除掉文件中的相關(guān)元素和文件中相關(guān)的變量。最后,把圓的數(shù)量調(diào)整為個(gè)大功告成
效果預(yù)覽
按下右側(cè)的“點(diǎn)擊預(yù)覽”按鈕可以在當(dāng)前頁(yè)面預(yù)覽,點(diǎn)擊鏈接可以全屏預(yù)覽。
https://codepen.io/comehope/pen/Yjomyd
可交互視頻此視頻是可以交互的,你可以隨時(shí)暫停視頻,編輯視頻中的代碼。
請(qǐng)用 chrome, safari, edge 打開觀看。
https://scrimba.com/p/pEgDAM/cydZrfr
源代碼下載每日前端實(shí)戰(zhàn)系列的全部源代碼請(qǐng)從 github 下載:
https://github.com/comehope/front-end-daily-challenges
代碼解讀定義 dom,容器中包含 3 個(gè)子元素,每個(gè)子元素代表一個(gè)圓:
居中顯示:
body { margin: 0; height: 100vh; display: flex; align-items: center; justify-content: center; background-color: black; }
定義容器尺寸:
.circles { width: 60vmin; height: 60vmin; }
畫出容器中的1個(gè)圓:
.circles { position: relative; } .circles span { position: absolute; box-sizing: border-box; width: 50%; height: 50%; background-color: white; border-radius: 50%; left: 25%; }
定義變量,畫出多個(gè)圓,每個(gè)圓圍繞著第 1 個(gè)圓的底部中點(diǎn)旋轉(zhuǎn),圍成一個(gè)更大的圓形:
.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; }
為子元素增加動(dòng)畫效果:
.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); } }
設(shè)置子元素混色模式,使子元素間交疊的部分顯示成黑色:
.circles span { mix-blend-mode: difference; }
為容器增加動(dòng)畫效果,抵銷子元素放大,使動(dòng)畫流暢銜接:
.circles { animation: zoom 5s linear infinite; } @keyframes zoom { to { transform: scale(0.5) translateY(-50%); } }
接下來用 d3 批量處理 dom 元素和 css 變量。
引入 d3 庫(kù):
用 d3 為表示圓數(shù)量的變量賦值:
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 為表示子元素下標(biāo)的變量賦值:
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 文件中的相關(guān) dom 元素和 css 文件中相關(guān)的 css 變量。
最后,把圓的數(shù)量調(diào)整為 30 個(gè):
const COUNT_OF_PARTICLES = 30;
大功告成!
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/113737.html
摘要:引入庫(kù)用為表示圓數(shù)量的變量賦值用生成元素用為表示子元素下標(biāo)的變量賦值刪除掉文件中的相關(guān)元素和文件中相關(guān)的變量。最后,把圓的數(shù)量調(diào)整為個(gè)大功告成 showImg(https://segmentfault.com/img/bVbfvrc?w=400&h=301); 效果預(yù)覽 按下右側(cè)的點(diǎn)擊預(yù)覽按鈕可以在當(dāng)前頁(yè)面預(yù)覽,點(diǎn)擊鏈接可以全屏預(yù)覽。 https://codepen.io/comeho...
摘要:過往項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份發(fā)布的項(xiàng)目前端每日實(shí)戰(zhàn)專欄每天分解一個(gè)前端項(xiàng)目,用視頻記錄編碼過程,再配合詳細(xì)的代碼解讀,是學(xué)習(xí)前端開發(fā)的活的參考書 過往項(xiàng)目 2018 年 8 月份項(xiàng)目匯總(共 29 個(gè)項(xiàng)目) 2018 年 7 月份項(xiàng)目匯總(共 29 個(gè)項(xiàng)目) 2018 年 6 月份項(xiàng)目匯總(...
摘要:過往項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份項(xiàng)目匯總共個(gè)項(xiàng)目年月份發(fā)布的項(xiàng)目前端每日實(shí)戰(zhàn)專欄每天分解一個(gè)前端項(xiàng)目,用視頻記錄編碼過程,再配合詳細(xì)的代碼解讀,是學(xué)習(xí)前端開發(fā)的活的參考書 過往項(xiàng)目 2018 年 8 月份項(xiàng)目匯總(共 29 個(gè)項(xiàng)目) 2018 年 7 月份項(xiàng)目匯總(共 29 個(gè)項(xiàng)目) 2018 年 6 月份項(xiàng)目匯總(...
閱讀 711·2021-11-22 13:54
閱讀 3077·2021-09-26 10:16
閱讀 3502·2021-09-08 09:35
閱讀 1584·2019-08-30 15:55
閱讀 3434·2019-08-30 15:54
閱讀 2082·2019-08-30 10:57
閱讀 502·2019-08-29 16:25
閱讀 882·2019-08-29 16:15