最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何使用less實現(xiàn)隨機下雪動畫詳解

 更新時間:2019年01月02日 11:44:57   作者:白樹  
這篇文章主要給大家介紹了關(guān)于如何使用less實現(xiàn)隨機下雪動畫的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

元旦在公司擼碼,想起圣誕節(jié)的搖搖樂項目有段代碼挺有意思的,借著空閑的時間把代碼抽出來,沉淀下經(jīng)驗。

冬天來了,設(shè)計師說搖搖樂的場景需要隨機下落的雪花動畫,第一時間就想到的方法是canvas比較好,項目非常緊急,然而小程序?qū)anvas支持不夠友好,容易在項目中出現(xiàn)無法預(yù)估的兼容性問題 ,馬上又否定了這種想法,想了想用javascript來寫隨機動畫成本又高。既不用canvas也不用javascript來實現(xiàn),最終決定使用css預(yù)處理器less來實現(xiàn)隨機雪花,less怎么可能實現(xiàn)隨機雪花?對于喜歡寫css的人來說,這非常有趣。

上圖的雪花效果還蠻炫酷吧,怎么實現(xiàn)呢?less因為有以下的2個特點,可以嘗試使用它來實現(xiàn)我們的場景

1.遞歸調(diào)用

實際上less并沒有自帶類似javascript的for循環(huán)的功能,但less可以用過引導(dǎo)when來實現(xiàn)條件判斷,簡單的方法也可以讓聰明的程序員簡單實現(xiàn)遞歸調(diào)用

.snow(@n) when (@n > 0) {

 fn()//生成雪花函數(shù)fn()

 .snow((@n - 1));//再次執(zhí)行函數(shù)fn()

}
.snow(60);//執(zhí)行次數(shù)

2.避免編譯JavaScript 表達式

雪花需要生成的隨機數(shù),我們需要運用javascript表達式嵌入到less代碼,同時也要避免javascript表達式被less錯誤的編譯,我們需要了解兩個點。

  • 一些 LESS不認(rèn)識的專有語法,可以在字符串前加上一個 ~,
  • JavaScript 表達式在less 文件中使用,可以通過反引號的方式使用

于是有了如下隨機位移、隨機時間、隨機大小的代碼

left: ~"`Math.round(Math.random() * @{windowWidth})`px";
animation: ~"snowani_@{n} `(-Math.random() * 4 + 8).toFixed(2)`s linear infinite";
transform: ~"scale(`(Math.random() * 0.7 + 0.5).toFixed(2)`)";

于是有了如下的Less代碼,具體怎么實現(xiàn)請留意詳細(xì)的代碼注釋

以下less代碼使用構(gòu)建后可生產(chǎn)一份隨機css固定雪花文件,決定了每一個雪花有不同的大小、水平位移、垂直位移、出場位置、出場時間,不同的雪花大小,不同的下落速度,用肉眼看到的雪花就像是隨機的,可以在項目上線前嘗試多構(gòu)建幾次,得到一份均勻分布在窗口的隨機雪花。

* {
 padding: 0;
 margin: 0;
}
html, body {
 height: 100%;
}

//瀏覽器窗口寬度
@windowWidth: 750;
//雪花
.snow {
 &_wrap{
 position: relative;
 width: ~"@{windowWidth}px";
 height: 100%;
 overflow: hidden;
 background: rgba(14,99,69,1);
 margin: 0 auto;
 }
 //雪花初始化大小
 position: absolute;
 width:20px;
 height: 20px;
 &:after{
 content: '';
 position: absolute;
 left:0;
 top:0;
 width:20px;
 height: 20px;
 background-color:#fff;
 opacity:1;
 border-radius: 100%;
 filter:blur(5px);//此處使用css3濾鏡來畫雪花
 }
}
//隨機雪花函數(shù)
.snow(@n) when (@n > 0) {
 .snow_@{n}{
 //水平方向上的位移
 left: ~"`Math.round(Math.random() * @{windowWidth})`px";
 //動畫運行時間8~12秒,保證雪花有不同的移動速度
 animation: ~"snowani_@{n} `(-Math.random() * 4 + 8).toFixed(2)`s linear infinite";
 //動畫提前出場時間,也就是垂直方向上位移
 animation-delay: ~"`(-Math.random() * 8 + 0.2).toFixed(2)`s";
 &:after{
  //雪花大小隨機,0.5~1.2
  transform: ~"scale(`(Math.random() * 0.7 + 0.5).toFixed(2)`)";
 }
 }
 @keyframes ~"snowani_@{n}" {
 0%{
  transform: translateY(0);
 }
 100%{
  //垂直方向上高度,保證雪花有不同的移動速度
  transform: ~"translateY(`Math.round(Math.random() * 200 + 1600)`px)";
 }
 }
 .snow((@n - 1));
}
.snow(60);//生成雪花的數(shù)量

把上面的雪花的代碼構(gòu)建后如下:

還有HTML,一行代碼的事情

在編輯器中安裝好emmet或webstorm開啟emmet后,輸入下面代碼按下ctrl+e快捷鍵即可生成60個不同命名的雪花標(biāo)簽。

.snow_wrap>.snow.snow_$*60


軟件開發(fā)沒有銀彈,不要讓經(jīng)驗固化了我們的思維,相信還有更多更好的實現(xiàn)方式,來提升我們的開發(fā)效率。

新年第一彈,新的開始,豬大家元旦快樂,抽中搖搖樂免單,身體健康,大吉大利。

總結(jié)

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。

相關(guān)文章

最新評論

广灵县| 县级市| 昭苏县| 武穴市| 尼勒克县| 西城区| 会东县| 中西区| 盘锦市| 淳安县| 宜兴市| 会同县| 渭南市| 阿拉尔市| 元谋县| 永胜县| 怀化市| 闽清县| 杂多县| 安乡县| 普安县| 泸定县| 克东县| 竹山县| 平江县| 临武县| 红安县| 金山区| 喀什市| 枣阳市| 南靖县| 新绛县| 彰化县| 进贤县| 秦安县| 秭归县| 惠东县| 庄浪县| 博白县| 阿图什市| 绥芬河市|