真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

CSS、JS中怎么弄浪漫流星雨動畫

這篇文章主要介紹CSS 、JS中怎么弄浪漫流星雨動畫,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

創(chuàng)新互聯(lián)長期為1000+客戶提供的網(wǎng)站建設(shè)服務(wù),團(tuán)隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務(wù);打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為平陸企業(yè)提供專業(yè)的網(wǎng)站建設(shè)、成都做網(wǎng)站,平陸網(wǎng)站改版等技術(shù)服務(wù)。擁有10余年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

HTML

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

CSS

CSS部分的難點(diǎn)就是流星的樣式和用圈圈畫云層,然后將云層堆疊出立體效果。

首先說一下流星的樣式:

#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一一對應(yīng)后,就能看出2px的是流星的寬度,80px是流星的長度,而0像素流星就是尾巴的這樣就形成了一個。頭部2px的寬,尾部0像素,長度80px的流星模型 ;

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

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

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

然后是畫云:

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

JS

JS部分以流星舉例說明:

setInterval(function() {
     const obj = addChild(“#sky”,“div”,2,“star”); //插入流星
    for(let i = 0 ; i  {
                        obj.parent.removeChild(obj.children [I]); //動畫結(jié)束刪除節(jié)點(diǎn)
                    }
                })
            }
        });
    }
},1000);

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

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

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

然后,通過對循環(huán)(也可以用為式,換的,都行。對于-的最簡單)給每個新添加到頁面中的流星一個隨機(jī)的位置(頂部,左側(cè)),隨機(jī)的大?。ㄒ?guī)模),隨機(jī)的動畫執(zhí)行時間(定時器);

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

附上代碼:

HTML:

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

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 ;
     變換:規(guī)模(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 ;
     變換:旋轉(zhuǎn)(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.parent.removeChild(obj.children [I]);
                    }
                })
            }
        });
    }
},1000);
//閃爍星星動畫 
setInterval(function() {
     const obj = addChild(“#stars”,“div”,2,“blink”);    for(let i = 0 ; i 

以上是CSS 、JS中怎么弄浪漫流星雨動畫的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!


本文標(biāo)題:CSS、JS中怎么弄浪漫流星雨動畫
文章網(wǎng)址:http://weahome.cn/article/jjeopj.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部