欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何使用less實(shí)現(xiàn)隨機(jī)下雪動(dòng)畫(huà)詳解

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

前言

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

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

上圖的雪花效果還蠻炫酷吧,怎么實(shí)現(xiàn)呢?less因?yàn)橛幸韵碌?個(gè)特點(diǎn),可以嘗試使用它來(lái)實(shí)現(xiàn)我們的場(chǎng)景

1.遞歸調(diào)用

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

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

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

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

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

2.避免編譯JavaScript 表達(dá)式

雪花需要生成的隨機(jī)數(shù),我們需要運(yùn)用javascript表達(dá)式嵌入到less代碼,同時(shí)也要避免javascript表達(dá)式被less錯(cuò)誤的編譯,我們需要了解兩個(gè)點(diǎn)。

  • 一些 LESS不認(rèn)識(shí)的專(zhuān)有語(yǔ)法,可以在字符串前加上一個(gè) ~,
  • JavaScript 表達(dá)式在less 文件中使用,可以通過(guò)反引號(hào)的方式使用

于是有了如下隨機(jī)位移、隨機(jī)時(shí)間、隨機(jī)大小的代碼

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代碼,具體怎么實(shí)現(xiàn)請(qǐng)留意詳細(xì)的代碼注釋

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

* {
 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濾鏡來(lái)畫(huà)雪花
 }
}
//隨機(jī)雪花函數(shù)
.snow(@n) when (@n > 0) {
 .snow_@{n}{
 //水平方向上的位移
 left: ~"`Math.round(Math.random() * @{windowWidth})`px";
 //動(dòng)畫(huà)運(yùn)行時(shí)間8~12秒,保證雪花有不同的移動(dòng)速度
 animation: ~"snowani_@{n} `(-Math.random() * 4 + 8).toFixed(2)`s linear infinite";
 //動(dòng)畫(huà)提前出場(chǎng)時(shí)間,也就是垂直方向上位移
 animation-delay: ~"`(-Math.random() * 8 + 0.2).toFixed(2)`s";
 &:after{
  //雪花大小隨機(jī),0.5~1.2
  transform: ~"scale(`(Math.random() * 0.7 + 0.5).toFixed(2)`)";
 }
 }
 @keyframes ~"snowani_@{n}" {
 0%{
  transform: translateY(0);
 }
 100%{
  //垂直方向上高度,保證雪花有不同的移動(dòng)速度
  transform: ~"translateY(`Math.round(Math.random() * 200 + 1600)`px)";
 }
 }
 .snow((@n - 1));
}
.snow(60);//生成雪花的數(shù)量

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

還有HTML,一行代碼的事情

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

.snow_wrap>.snow.snow_$*60


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

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

總結(jié)

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

相關(guān)文章

  • JS實(shí)現(xiàn)微信

    JS實(shí)現(xiàn)微信"炸屎"大作戰(zhàn)功能

    這篇文章主要介紹了JS實(shí)現(xiàn)微信 "炸屎"大作戰(zhàn),本文通過(guò)實(shí)例代碼圖文展示給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-07-07
  • 如何在JavaScript中使用localStorage詳情

    如何在JavaScript中使用localStorage詳情

    這篇文章主要介紹了如何在JavaScript中使用localStorage,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • javascript中Number的方法小結(jié)

    javascript中Number的方法小結(jié)

    本文介紹javascript中Number的使用方法,并對(duì)其進(jìn)行了匯總,希望對(duì)大家有所幫助
    2016-11-11
  • javascript 異常處理使用總結(jié)

    javascript 異常處理使用總結(jié)

    javascript 異常處理使用總結(jié)try…catch…finally window.onerror
    2009-06-06
  • JavaScript實(shí)現(xiàn)在頁(yè)面間傳值的方法

    JavaScript實(shí)現(xiàn)在頁(yè)面間傳值的方法

    這篇文章主要介紹了JavaScript實(shí)現(xiàn)在頁(yè)面間傳值的方法,涉及javascript傳值的技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-04-04
  • 深入了解JavaScript 私有化

    深入了解JavaScript 私有化

    有人認(rèn)為Javascript缺乏隱藏對(duì)象細(xì)節(jié)信息的特性,因?yàn)镴avascript的對(duì)象沒(méi)有私有變量和私有方法。這其實(shí)是個(gè)誤解,Javascript對(duì)象是可以有這些私有成員的。下面我們來(lái)詳細(xì)了解一下吧
    2019-05-05
  • JS獲取文本框,下拉框,單選框的值的簡(jiǎn)單實(shí)例

    JS獲取文本框,下拉框,單選框的值的簡(jiǎn)單實(shí)例

    本篇文章主要是對(duì)JS獲取文本框,下拉框,單選框值的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過(guò)來(lái)參考下,希望對(duì)大家有所幫助
    2014-02-02
  • js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫(huà)效果

    js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫(huà)效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)盒子滾動(dòng)動(dòng)畫(huà)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • JavaScript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器小程序

    JavaScript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器小程序

    這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)簡(jiǎn)單計(jì)算器小程序,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-01-01
  • javascript中數(shù)組的定義及使用實(shí)例

    javascript中數(shù)組的定義及使用實(shí)例

    這篇文章主要介紹了javascript中數(shù)組的定義及使用方法,實(shí)例分析了數(shù)組的定義及使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2015-01-01

最新評(píng)論