<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
        問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
        當前位置: 首頁 - 科技 - 知識百科 - 正文

        如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果

        來源:懂視網 責編:小采 時間:2020-11-27 18:47:48
        文檔

        如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果

        如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果:這篇文章給大家介紹的內容是關于如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果預覽代碼解讀定義 dom,spacecraft 表示飛船,容器中包含 1 個表示尾冀的元素 fins:<div class=
        推薦度:
        導讀如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果:這篇文章給大家介紹的內容是關于如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果預覽代碼解讀定義 dom,spacecraft 表示飛船,容器中包含 1 個表示尾冀的元素 fins:<div class=
        這篇文章給大家介紹的內容是關于如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

        效果預覽

        904199386-5b6219ad4ab13_articlex.gif

        代碼解讀

        定義 dom,spacecraft 表示飛船,容器中包含 1 個表示尾冀的元素 fins

        <div class="spacecraft">
         <div class="fins"></div>
        </div>

        居中顯示:

        body {
         margin: 0;
         height: 100vh;
         display: flex;
         align-items: center;
         justify-content: center;
         background: linear-gradient(black, midnightblue);
        }

        畫出飛船的船艙:

        .spacecraft {
         width: 7em;
         height: 11em;
         font-size: 16px;
         background: 
         linear-gradient(whitesmoke, darkgray);
         border-radius: 50% / 70% 70% 5% 5%;
        }

        用偽元素畫出飛船尾部的火焰:

        .spacecraft::before {
         content: '';
         position: absolute;
         width: 6em;
         height: 2em;
         background-color: #444;
         border-radius: 20%;
         top: 10em;
         left: 0.5em;
         z-index: -1;
        }
        
        .spacecraft::after {
         content: '';
         position: absolute;
         box-sizing: border-box;
         width: 4em;
         height: 4em;
         background: gold;
         top: 10em;
         left: 1.5em;
         border-radius: 80% 0 50% 45% / 50% 0 80% 45%;
         transform: rotate(135deg);
         border: 0.5em solid orange;
         z-index: -2;
        }

        畫出飛船兩側的尾冀:

        .fins::before,
        .fins::after {
         content: '';
         position: absolute;
         width: 2em;
         height: 6em;
         background: linear-gradient(tomato, darkred);
         top: 7em;
        }
        
        .fins::before {
         left: -2em;
         border-radius: 3em 0 50% 100%;
        }
        
        .fins::after {
         right: -2em;
         border-radius: 0 3em 100% 50%;
        }

        用徑向漸變畫出飛船的舷窗:

        .spacecraft {
         background: 
         radial-gradient(
         circle at 3.5em 5em,
         transparent 1.5em,
         lightslategray 1.5em, lightslategray 2em,
         transparent 2em
         ),
         radial-gradient(
         circle at 3.3em 5.2em,
         deepskyblue 1.4em,
         transparent 1.6em
         ),
         radial-gradient(
         circle at 3.5em 5em,
         white 1.5em,
         transparent 1.5em
         ),
         linear-gradient(whitesmoke, darkgray);
        }

        增加飛船火焰噴射的動畫效果:

        .spacecraft::after {
         animation: flame-spout 0.3s infinite;
        }
        
        @keyframes flame-spout {
         0%, 100% {
         filter: opacity(0.1);
         }
        
         50% {
         filter: opacity(1);
         }
        }

        接下來畫星空。
        在 dom 中增加 stars 容器,其中包含表示星星的 4 個子元素:

        <div class="stars">
         <span></span>
         <span></span>
         <span></span>
         <span></span>
        </div>
        <div class="rocket">
         <div class="fins"></div>
        </div>

        定義星星的樣式:

        .stars span {
         position: absolute;
         width: 2px;
         height: 8px;
         border-radius: 50%;
         background-color: white;
         top: calc(50% - 7em);
        }

        用變量使星星分布在水平方向的不同位置:

        .stars span {
         left: calc(var(--left) * 1vw);
        }
        
        .stars span:nth-child(1) {
         --left: 20;
        }
        
        .stars span:nth-child(2) {
         --left: 40;
        }
        
        .stars span:nth-child(3) {
         --left: 60;
        }
        
        .stars span:nth-child(4) {
         --left: 80;
        }

        用變量設置星星的尺寸和不透明度,使每顆星星看起來稍有差異:

        .stars span {
         width: calc(var(--size) * 1px);
         height: calc(var(--size) * 4px);
         filter: opacity(var(--opacity));
        }
        
        .stars span:nth-child(1) {
         --size: 0.8;
         --opacity: 0.5;
        }
        
        .stars span:nth-child(2) {
         --size: 1.25;
         --opacity: 0.6;
        }
        
        .stars span:nth-child(3) {
         --size: 1.5;
         --opacity: 0.7;
        }
        
        .stars span:nth-child(4) {
         --size: 2;
         --opacity: 0.8;
        }

        定義星星從太空中飄過的動畫效果:

        .stars span {
         top: -5vh;
         animation: star-move linear infinite;
        }
        
        @keyframes star-move {
         to {
         top: 100vh;
         }
        }

        用變量設置動畫的時長和延時時間:

        .stars span {
         animation-duration: calc(var(--duration) * 1s);
         animation-delay: calc(var(--delay) * 1s);
        }
        
        .stars span:nth-child(1) {
         --duration: 1;
         --delay: -0.05;
        }
        
        .stars span:nth-child(2) {
         --duration: 1.5;
         --delay: -0.1;
        }
        
        .stars span:nth-child(3) {
         --duration: 2;
         --delay: -0.15;
        }
        
        .stars span:nth-child(4) {
         --duration: 2.5;
         --delay: -0.2;
        }

        隱藏屏幕外的內容:

        body {
         overflow: hidden;
        }

        接下來用 d3 批量處理表示星星的 dom 元素和 css 變量。
        引入 d3 庫:

        <script src="https://d3js.org/d3.v5.min.js"></script>

        用 d3 創(chuàng)建表示星星的 dom 元素:

        const COUNT_OF_STARS = 4;
        
        d3.select('.stars')
         .selectAll('span')
         .data(d3.range(COUNT_OF_STARS))
         .enter()
         .append('span');

        用 d3 為 css 變量 --left, --size, --opacity 賦值,--left 的取值范圍是 1 到 100,--size 的取值范圍是 1 到 2.5,'--opacity' 的取值范圍是 0.5 到 0.8:

        d3.select('.stars')
         .selectAll('span')
         .data(d3.range(COUNT_OF_STARS))
         .enter()
         .append('span')
         .style('--left', () => Math.ceil(Math.random() * 100))
         .style('--size', () => Math.random() * 1.5 + 1)
         .style('--opacity', () => Math.random() * 0.3 + 0.5);

        用 d3 為 css 變量 --duration--delay 賦值,--duration 的取值范圍是 1 到 3,--delay 的取值是依次減少 0.05:

        d3.select('.stars')
         .selectAll('span')
         .data(d3.range(COUNT_OF_STARS))
         .enter()
         .append('span')
         .style('--left', () => Math.ceil(Math.random() * 100))
         .style('--size', () => Math.random() * 1.5 + 1)
         .style('--opacity', () => Math.random() * 0.3 + 0.5)
         .style('--duration', () => Math.random() * 2 + 1)
         .style('--delay', (d) => d * -0.05);

        刪除掉 html 文件中相關的 dom 聲明和 css 文件中的變量聲明。

        最后,把星星的數(shù)量增加到 30 顆:

        const COUNT_OF_STARS = 30;

        大功告成!

        相關文章推薦:

        如何使用純CSS實現(xiàn)一顆土星的效果

        如何使用CSS和D3實現(xiàn)無盡六邊形空間的效果

        聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯(lián)系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果

        如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果:這篇文章給大家介紹的內容是關于如何用CSS和D3實現(xiàn)宇宙飛船的動態(tài)效果,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果預覽代碼解讀定義 dom,spacecraft 表示飛船,容器中包含 1 個表示尾冀的元素 fins:<div class=
        推薦度:
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 人妻仑乱A级毛片免费看| 99精品国产成人a∨免费看| 无码日韩人妻AV一区免费l| 久久精品女人天堂AV免费观看| 亚洲国产午夜中文字幕精品黄网站| 亚洲ⅴ国产v天堂a无码二区| 亚洲老熟女五十路老熟女bbw| 中文字幕无码日韩专区免费 | 91av免费在线视频| 一个人免费观看www视频在线| 区久久AAA片69亚洲| 亚洲色在线无码国产精品不卡| 免费观看一区二区三区| 亚洲AV永久纯肉无码精品动漫| 免费激情网站国产高清第一页| 青青久在线视频免费观看| 亚洲不卡影院午夜在线观看| 小日子的在线观看免费| 亚洲国产精品一区二区九九| 亚洲国产精品精华液| 亚洲一级免费视频| 亚洲AV中文无码字幕色三| 久久久高清日本道免费观看| 亚洲国产精品无码久久九九| 男女一边桶一边摸一边脱视频免费 | 亚洲综合精品一二三区在线| 国产伦精品一区二区免费| 亚洲中文字幕无码一区二区三区| 久操视频免费观看| 亚洲第一区二区快射影院| 国产伦精品一区二区三区免费迷| 国产成+人+综合+亚洲专| 1000部无遮挡拍拍拍免费视频观看| 亚洲熟妇无码AV在线播放| 国产无限免费观看黄网站| 91亚洲精品视频| 51在线视频免费观看视频| 亚洲精品无码你懂的| 国产A在亚洲线播放| 黄网站色视频免费在线观看的a站最新 | 无码国产精品一区二区免费3p|