<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、JS實現浪漫流星雨動畫

        來源:懂視網 責編:小采 時間:2020-11-27 16:50:21
        文檔

        CSS、JS實現浪漫流星雨動畫

        CSS、JS實現浪漫流星雨動畫:本篇文章給大家帶來的內容是關于CSS 、JS實現浪漫流星雨動畫,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果如下:HTML由于節點很多,并且我想盡量做得逼真有趣有點,還給節點加了隨機位置。所以節點的輸出都是用JS控制的,HTML這
        推薦度:
        導讀CSS、JS實現浪漫流星雨動畫:本篇文章給大家帶來的內容是關于CSS 、JS實現浪漫流星雨動畫,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果如下:HTML由于節點很多,并且我想盡量做得逼真有趣有點,還給節點加了隨機位置。所以節點的輸出都是用JS控制的,HTML這
        本篇文章給大家帶來的內容是關于CSS 、JS實現浪漫流星雨動畫,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果如下:

        微信截圖_20181113172841.png

        HTML

        由于節點很多,并且我想盡量做得逼真有趣有點,還給節點加了隨機位置。所以節點的輸出都是用JS控制的,HTML這邊只寫了幾個父元素盒子,加上相應的ID名和類類名,結構相對簡單。

        CSS

        CSS部分的難點就是流星的樣式和用圈圈畫云層,然后將云層堆疊出立體效果?!就扑]閱讀:CSS堆疊上下文是什么?有什么作用?】

        首先說一下流星的樣式:

        #sky .star { position:absolute;
         不透明度:0 ;
         z-index:10000 ;
         }
         
         .star :: after { content:“” ;
         顯示:塊;
         邊界:堅固; border-width:2px 0 2px 80px ;
         / *流星隨長度逐漸縮小* / 
         border-color:透明透明透明rgba(255,255,255,1); border-radius:2px 0 0 2px ; transform:rotate(-45deg); transform-origin:0 0 0 ;
         盒子陰影:0 0 20px rgba(255,255,255,.3);
         }

        先提取了公共樣式,添加定位屬性;

        然后在星后通過后偽類添加流星,用邊界特性畫:

        1)模型繪制:border-width的順序為四邊top,right,bottom,left,同理border-color的順序也為四邊top,right,bottom,left。這樣將border-width與border-color一一對應后,就能看出2px的是流星的寬度,80px是流星的長度,而0像素流星就是尾巴的這樣就形成了一個。頭部2px的寬,尾部0像素,長度80px的流星模型 ;

        2)稍微逼真:通過邊界半徑?給流星的頭部增加個圓角,讓它看起來更逼真最后通過roteta旋轉一個角度,讓它看起來像是往下掉;

        3)增加閃光:通過箱陰影給流星增加一點光暈,讓它看起來有閃光的效果;

        通過以上3步,一個流星就畫好了。

        然后是畫云:

        因為云的代碼比較長,這里就不貼出來了方法無非是通過一個一個的圓,相互疊加覆蓋,完成一個云朵的形狀。
        完成一個云層之后,copy一個,然后多個云層通過rotate,opacity,left定位等,做出一個漸隱疊加的立體效果;

        JS

        JS部分以流星舉例說明:

        setInterval(function() {
         const obj = addChild(“#sky”,“div”,2,“star”); //插入流星
         for(let i = 0 ; i <obj.children.length; i ++){ //隨機位置
         const top = -50 + Math .random()* 200 + “px”,
         left = 200 + Math .random()* 1200 + “px”,
         scale = 0.3 + Math .random()* 0.5 ;
         const timer = 1000 + Math .random()* 1000 ;
         obj.children [i] .style.top = top;
         obj.children [i] .style.left = left;
         obj.children [i] .style.transform = `scale($ {scale})` ; 
         //添加動畫
         requestAnimation({
         ele:obj.children [i],
         attr:[ “top”,“left”,“opacity” ],
         值:[ 150,-150,.8 ],
         time:timer,
         flag:false,
         fn:function() {
         requestAnimation({
         ELE:obj.children [I],
         ATTR:“頂”,“左”,“不透明” ],
         值:[ 150,-150,0 ],
         時間:定時器,
         標志:假,
         FN:() => {
         obj.parent.removeChild(obj.children [I]); //動畫結束刪除節點
         }
         })
         }
         });
         }
        },1000);

        這里邊用到了我自己封裝的兩個方法,一個是基于requestAnimationFrame的requestAnimation,以及基于appendChild的addChild。

        為了達成星星位置隨機的效果,通過定時器的setInterval的不停插入與刪除流星:

        首先,每次添加2個流星到頁面,但是定時器的間隔時間小于流星的動畫時間,這樣就能保證頁面中的流星的數量不是一個固定值,但肯定是大于2的。不然一次2個流星略顯冷清;

        然后,通過對循環(也可以用為式,換的,都行。對于-的最簡單)給每個新添加到頁面中的流星一個隨機的位置(頂部,左側),隨機的大?。ㄒ幠#S機的動畫執行時間(定時器);

        最后,在用于循環中,給每個新添加到頁面中的流星加上動畫,并通過回調函數在執行完動畫后刪除節點。這里要注意的是,要動畫分成兩個階段(出現與消失,主要是opacity控制)。另外我這里的處理,每個流星都移動相同的距離300px,這個距離我覺得也可以通過隨機數控制,但我犯了個懶,就沒有做。

        附上代碼:

        HTML:

        < body > 
         < div class = “container” > 
         < div id = “mask” > </ div > 
         < div id = “sky” > </ div > 
         < div id = “moon” > </ div > 
         < div id = “stars” > </ div > 
         < div class = “cloud cloud-1” ></ div > 
         <div class = “cloud cloud-2” > </ div > 
         < div class = “cloud cloud-3” > </ div > 
         </ div > 
        </ body >

        css:

        /* - - - - - - 重啟 - - - - - - */
         
         * {
         保證金:0 ;
         填充:0 ;
         }
         
         html,
         body { width:100% ;
         最小寬度:1000px ;
         身高:100% ;
         最小高度:400px ;
         溢出:隱藏;
         }
         / * ------------畫布------------ * / 
         .container { position:relative;
         身高:100% ;
         }
         / *遮罩層* /
         
         #mask { position:absolute;
         寬度:100% ;
         身高:100% ; background:rgba(0,0,0,.8);
         z-index:900 ;
         }
         / *天空背景* /
         
         #sky { width:100% ;
         身高:100% ; background:線性漸變(rgba(0,150,255,1),rgba(0,150,255,.8),rgba(0,150,255,.5));
         }
         / *月亮* /
         
         #moon { position:absolute;
         上:50px ;
         右:200px ;
         寬度:120px ;
         身高:120px ;
         背景:rgba(251,255,25,0.938); border-radius:50% ; box-shadow:0 0 20px rgba(251,255,25,0.5);
         z-index:9999 ;
         }
         / *閃爍星星* /
         
         .blink { position:absolute; background:rgb(255,255,255); border-radius:50% ; box-shadow:0 0 5px rgb(255,255,255);
         不透明度:0 ;
         z-index:10000 ;
         }
         / *流星* /
         
         .star { position:absolute;
         不透明度:0 ;
         z-index:10000 ;
         }
         
         .star :: after { content:“” ;
         顯示:塊;
         邊界:堅固; border-width:2px 0 2px 80px ;
         / *流星隨長度逐漸縮小* / 
         border-color:透明透明透明rgba(255,255,255,1); border-radius:2px 0 0 2px ; transform:rotate(-45deg); transform-origin:0 0 0 ;
         盒子陰影:0 0 20px rgba(255,255,255,.3);
         }
         / *云* /
         
         .cloud { position:absolute;
         寬度:100% ;
         身高:100px ;
         }
         
         .cloud-1 {
         bottom: - 100px ;
         z-index:1000 ;
         不透明度:1 ;
         變換:規模(1.5);
         -webkit-transform:scale(1.5);
         -moz-transform:scale(1.5);
         -ms-transform:scale(1.5);
         -o-transform:scale(1.5);
         }
         
         .cloud-2 {
         left: - 100px ;
         底部: - 50px ;
         z-index:999 ;
         不透明度:。5 ;
         變換:旋轉(7deg);
         -webkit-transform:rotate(7deg);
         -moz-transform:rotate(7deg);
         -ms-transform:rotate(7deg);
         -o-transform:rotate(7deg);
         }
         
         .cloud-3 {
         left:120px ;
         底部: - 50px ;
         z-index:999 ;
         不透明度:。1 ; transform:rotate(-10deg);
         -webkit-transform:rotate(-10deg);
         -moz-transform:rotate(-10deg);
         -ms-transform:rotate(-10deg);
         -o-transform:rotate(-10deg);
         }
         
         .circle { position:absolute; border-radius:50% ;
         背景:#fff ;
         }
         
         .circle-1 { width:100px ;
         身高:100px ;
         上: - 50px ;
         左:10px ;
         }
         
         .circle-2 { width:150px ;
         身高:150px ;
         上: - 50px ;
         左:30px ;
         }
         
         .circle-3 { width:300px ;
         身高:300px ;
         上: - 100px ;
         左:80px ;
         }
         
         .circle-4 { width:200px ;
         身高:200px ;
         上: - 60px ;
         左:300px ;
         }
         
         .circle-5 { width:80px ;
         身高:80px ;
         上: - 30px ;
         左:450px ;
         }
         
         .circle-6 { width:200px ;
         身高:200px ;
         上: - 50px ;
         左:500px ;
         }
         
         .circle-7 { width:100px ;
         身高:100px ;
         上: - 10px ;
         左:650px ;
         }
         
         .circle-8 { width:50px ;
         身高:50px ;
         上:30px ;
         左:730px ;
         }
         
         .circle-9 { width:100px ;
         身高:100px ;
         上:30px ;
         左:750px ;
         }
         
         .circle-10 { width:150px ;
         身高:150px ;
         上:10px ;
         左:800px ;
         }
         
         .circle-11 { width:150px ;
         身高:150px ;
         上: - 30px ;
         左:850px ;
         }
         
         .circle-12 { width:250px ;
         身高:250px ;
         上: - 50px ;
         左:900px ;
         }
         
         .circle-13 { width:200px ;
         身高:200px ;
         上: - 40px ;
         左:1000px ;
         }
         
         .circle-14 { width:300px ;
         身高:300px ;
         上: - 70px ;
         左:1100px ;

        JS:

        //流星動畫 
        setInterval(function() {
         const obj = addChild(“#sky”,“div”,2,“star”); for(let i = 0 ; i <obj.children.length; i ++){
         const top = -50 + Math .random()* 200 + “px”,
         left = 200 + Math .random()* 1200 + “px”, scale = 0.3 + Math .random()* 0.5 ;
         const timer = 1000 + Math .random()* 1000 ;
         obj.children [i] .style.top = top;
         obj.children [i] .style.left = left;
         obj.children [i] .style.transform = `scale($ {scale})` ;
         requestAnimation({
         ele:obj.children [i],
         attr:[ “top”,“left”,“opacity” ],
         值:[ 150,-150,.8 ], time:timer,
         flag:false,
         fn:function() {
         requestAnimation({
         ELE:obj.children [I],
         ATTR:“頂”,“左”,“不透明” ],
         值:[ 150,-150,0 ],
         時間:定時器,
         標志:假,
         FN:() => {
         obj.parent.removeChild(obj.children [I]);
         }
         })
         }
         });
         }
        },1000);
        //閃爍星星動畫 
        setInterval(function() {
         const obj = addChild(“#stars”,“div”,2,“blink”); for(let i = 0 ; i <obj.children.length; i ++){
         const top = -50 + Math .random()* 500 + “px”,
         left = 200 + Math .random()* 1200 + “px”, round = 1 + Math .random()* 2 + “px” ;
         const timer = 1000 + Math .random()* 4000 ;
         obj.children [i] .style.top = top;
         obj.children [i] .style.left = left;
         obj.children [i] .style.width = round;
         obj.children [i] .style.height = round;
         requestAnimation({
         ele:obj.children [i],
         attr:“opacity”,
         值:.5, time:timer,
         flag:false,
         fn:function() {
         requestAnimation({
         ele:obj.children [i],
         attr:“opacity”,
         value:0, time:timer,
         flag:false,
         fn:function() {
         obj.parent.removeChild(obj.children [I]);
         }
         });
         }
         });
         }
        },1000);
        //月亮移動
        requestAnimation({
         ele:“#moon”,
         attr:“right”,
         值:1200,
         時間:10000000,
        });
        //添加云
        const clouds = addChild(“。cloud”,“div”,14,“circle”,true);for(let i = 0 ; i <clouds.children.length; i ++){ for(let j = 0 ; j <clouds.children [i] .length;){
         clouds.children [i] [j] .classList.add(`circle- $ {++ j} `);
         }
        }
        //云動畫let flag = 1 ;
        的setInterval(
         功能() {
         const clouds = document .querySelectorAll(“。cloud”);
         const left = Math .random()* 5 ;
         bottom = Math .random()* 5 ; let timer = 0 ; for(let i = 0 ; i <clouds.length; i ++){
         requestAnimation({
         ele:clouds [i],
         attr:[ “left”,“bottom” ],
         value:flag%2?[-left,-bottom]:[left,bottom], time:timer + = 500,
         flag:false,
         fn:function() {
         requestAnimation({
         ele:clouds [i],
         attr:[ “left”,“bottom” ],
         value:flag%2?[left,bottom]:[ - left,-bottom], time:timer,
         flag:false
         })
         }
         });
         }
         標志++;
         },2000)

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

        文檔

        CSS、JS實現浪漫流星雨動畫

        CSS、JS實現浪漫流星雨動畫:本篇文章給大家帶來的內容是關于CSS 、JS實現浪漫流星雨動畫,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。效果如下:HTML由于節點很多,并且我想盡量做得逼真有趣有點,還給節點加了隨機位置。所以節點的輸出都是用JS控制的,HTML這
        推薦度:
        標簽: 動畫 js 流星
        • 熱門焦點

        最新推薦

        猜你喜歡

        熱門推薦

        專題
        Top
        主站蜘蛛池模板: 亚洲中文无码永久免费| 91精品国产免费| 免费真实播放国产乱子伦| 亚洲精品无码久久| 免费一级国产生活片| yy一级毛片免费视频| 亚洲美女又黄又爽在线观看| 国产一二三四区乱码免费| 亚洲AV永久无码精品一百度影院| 成人A片产无码免费视频在线观看| 亚洲AV人无码激艳猛片| 久久久久久精品成人免费图片| 亚洲入口无毒网址你懂的| 午夜一区二区免费视频| 亚洲AV无码一区二区三区性色| 亚洲 国产 图片| 伊人免费在线观看高清版| 日韩精品亚洲人成在线观看| 性短视频在线观看免费不卡流畅| 亚洲性色AV日韩在线观看| 亚洲 国产 图片| 久操免费在线观看| 亚洲乱码一区二区三区国产精品| 国产一级一片免费播放i| 国产精品永久免费视频| 亚洲综合一区二区国产精品| 我要看免费的毛片| 一级毛片完整版免费播放一区| 久久精品国产亚洲av麻| 韩国18福利视频免费观看| 中文字幕版免费电影网站| 亚洲国产精品线观看不卡| yy6080亚洲一级理论| 99蜜桃在线观看免费视频网站| 亚洲丶国产丶欧美一区二区三区| 国产日韩成人亚洲丁香婷婷| 中文字幕免费在线看线人 | 亚洲成av人片在线观看无码不卡| 18禁男女爽爽爽午夜网站免费| 美女视频黄频a免费大全视频| 亚洲2022国产成人精品无码区|