|
在天氣預(yù)報(bào)類的Web移動(dòng)應(yīng)用中,常常需要實(shí)現(xiàn)屏幕的雨滴效果,表示陰雨天氣。在天氣預(yù)報(bào)類的Web移動(dòng)應(yīng)用中,常常需要實(shí)現(xiàn)屏幕的雨滴效果,表示陰雨天氣。 
感覺上比較神奇,其實(shí)想通了,這個(gè)效果的實(shí)現(xiàn)只需要一點(diǎn)物理知識(shí)和CSS3的簡(jiǎn)單變換。
實(shí)現(xiàn)一個(gè)小雨滴首先雨滴是一個(gè)個(gè)小的橢圓形元素: - .raindrop {
- width: 8px;
- height: 7px;
- border-radius: 100%;
- }
其次雨滴是一個(gè)個(gè)凸透鏡,能折射出遠(yuǎn)處的景色,遠(yuǎn)景所處位置遠(yuǎn)大于2倍焦距,成倒立、縮小的實(shí)像。“倒立”的效果可以通過旋轉(zhuǎn)180°來實(shí)現(xiàn),“縮小”的效果我們這里通過設(shè)置背景圖片的尺寸來達(dá)到(下面把背景圖縮小到全屏的5%并居中)。 - .raindrop {
- position: absolute;
- background-image: url("http://i./xQdYC7x.jpg");
- background-size: 5vw 5vh;
- background-position: 50%;
- transform: rotate(180deg) rotateY(0);
- }
這樣我們就得到了一個(gè)小雨點(diǎn)。隨機(jī)雨滴接著我們要?jiǎng)?chuàng)建一些隨機(jī)分布的雨點(diǎn)對(duì)象,假如只有幾個(gè),我們可以手動(dòng)編寫CSS代碼,但如果有幾十個(gè),直接寫CSS代碼的效率和可維護(hù)性就很差了。 我們使用SCSS的random方法,來隨機(jī)微調(diào)雨點(diǎn)對(duì)象的尺寸和絕對(duì)位置。 - @for $i from 1 through $raindrops{
-
- // 生成0到1之間的隨機(jī)數(shù)
- $x:random();
- $y:random();
-
- // 隨機(jī)尺寸和位置
- $drop-width:5px+random(11);
- $drop-stretch:0.7+(random()*0.5);
- $drop-height:$drop-width*$drop-stretch;
- .raindrop:nth-child(#{$i}){
- // multiply the random position value by the container's size
- left:$x * $width;
- top:$y * $height;
- width:$drop-width;
- height:$drop-height;
- background-position:percentage($x) percentage($y);
- }
- }
效果增強(qiáng)我們還可以給雨滴添加一點(diǎn)閃光的視覺效果,通過CSS3濾鏡來實(shí)現(xiàn): - .raindrop {
- filter: brightness(1.2);
- -webkit-filter: brightness(1.2);
- }
最后我們還可以給每個(gè)雨滴添加邊界效果。這里略過不詳述。
在線試試你可以通過踏得網(wǎng)的在線實(shí)例自己試試看(編譯CSS時(shí)需稍等一會(huì)兒)。 你還可以基于該作品添加CSS3動(dòng)畫(添加一些@keyframes即可),實(shí)現(xiàn)下雨的效果。 但是如果要實(shí)現(xiàn)大量雨滴動(dòng)畫,考慮到性能,你應(yīng)該使用Canvas,并需要處理碰撞檢測(cè)、雨滴融合,你可以閱讀如下文章: 如何基于Canvas來模擬真實(shí)雨景 注意:如果離線測(cè)試以上代碼,請(qǐng)自行添加瀏覽器前綴或prefixfree腳本。
|