如何使用CSS3/SCSS实现逼真的车窗雨滴效果

techbrood 发表于 2016-05-06 13:13:45

标签: web, html5, css3, scss

- +

在天气预报类的Web移动应用中,常常需要实现屏幕的雨滴效果,表示阴雨天气。

d4ca075023f827d8.png

感觉上比较神奇,其实想通了,这个效果的实现只需要一点物理知识和CSS3的简单变换。

实现一个小雨滴

首先雨滴是一个个小的椭圆形元素:

.raindrop {  
  width: 8px;  
  height: 7px;  
  border-radius: 100%;    
}

其次雨滴是一个个凸透镜,能折射出远处的景色,远景所处位置远大于2倍焦距,成倒立、缩小的实像

“倒立”的效果可以通过旋转180°来实现,“缩小”的效果我们这里通过设置背景图片的尺寸来达到(下面把背景图缩小到全屏的5%并居中)。

.raindrop {  
  position: absolute;  
  background-image: url("http://i.imgur.com/xQdYC7x.jpg");  
  background-size: 5vw 5vh;  
  background-position: 50%;  
  transform: rotate(180deg) rotateY(0);  
}

这样我们就得到了一个小雨点。

随机雨滴

接着我们要创建一些随机分布的雨点对象,假如只有几个,我们可以手动编写CSS代码,但如果有几十个,直接写CSS代码的效率和可维护性就很差了。

我们使用SCSS的random方法,来随机微调雨点对象的尺寸和绝对位置。

@for $i from 1 through $raindrops{  
  
    // 生成0到1之间的随机数  
    $x:random();  
    $y:random();  
  
    // 随机尺寸和位置  
    $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);  
    }  
}
效果增强

我们还可以给雨滴添加一点闪光的视觉效果,通过CSS3滤镜来实现:

.raindrop {  
    filter: brightness(1.2);  
    -webkit-filter: brightness(1.2);  
}

最后我们还可以给每个雨滴添加边界效果。这里略过不详述。

在线试试

你可以通过踏得网的在线实例自己试试看(编译CSS时需稍等一会儿)。

你还可以基于该作品添加CSS3动画(添加一些@keyframes即可),实现下雨的效果。

注意:如果离线测试以上代码,请自行添加浏览器前缀或prefixfree脚本。

possitive(16) views8576 comments1

发送私信

最新评论

iefreer 2016-05-06 13:27:34

moved from my csdn blog to techbrood


请先 登录 再评论.
相关文章
  • 增强现实引擎ARToolKit工作原理简介

    ARToolkit是一个基于CV(计算机视觉)和Marker(标识)的开源增强现实引擎。其具备如下功能特性:A. 鲁棒跟踪,包括基于标记的跟踪与基于特征的跟踪;

  • 谷歌ARCore技术特性简介

    谷歌美国时间2017.8.29号刚发布了ARCore预览版,这是一个类似于苹果ARKit的增强现实SDK,在此之前,谷歌虽然已投资AR平台Tango,但由于需要特定的硬件和传感器,...

  • HTTP1.1协议现状、问题和解决方案

    HTTP的现状最早的HTTP协议非常简单,只能用来传送文本,方法也只有GET,后来逐步发展到1.1,能够支持多种MIME格式数据(如文本、文件),支持GET,POST,HEAD,OPTI...

  • HTML5、Hybrid APP、Native APP对比和技术选型

    HTML5和Native APP都很容易理解。为了获得HTML5的移植性和移动本地应用的高性能,搞出来一些混合APP的解决方案。比如Apache的Cordova(也就是以前的PhoneGap),...

  • 深度贴图(depth map)概念简介和生成流程

    Depth map 深度图是一张2D图片,每个像素都记录了从视点(viewpoint)到遮挡物表面(遮挡物就是阴影生成物体)的距离,这些像素对应的顶点对于观察者而言是“可...

  • WebGL入门教程6 - 光照效果和Phong光照模型

    正是因为有了光,世界才能被我们看见,在3D的世界里,光照给物体带来真实的视觉感受。当光照射在某一表面上时,它可能被吸收、反射或投射。其中入射到表面上的一...

  • WebGL入门教程5 - 详解纹理滤镜(Texture Filter)

    WebGL中使用纹理贴图来实现细腻的物体表面观感,其中一个重要的参数是纹理滤镜(Texture Filter)。
    这个参数用来处理当对象出现缩放时,纹理如何处理中间...

  • 如何使用WebGL创建一个逼真的下雨动画

    之前写过文章来分别讲解如何使用CSS3和Canvas2D实现过雨滴和下雨动画。通过背景处理看起来也有视觉上的3D效果,但并非真正的3D场景,如果要加入用户交互,进行36...

  • Three.js 开发基础知识 - 绘制3D对象

    Three.js是一个用来简化WebGL开发的JavaScript库,比如绘制一个三维立方体,使用WebGL需要100多行,那Three.js只要10几行就能够完成。本文通过创建一个立方体来...

  • SVG过滤器feColorMatrix矩阵变换效果用法详解

    在计算机图形学(数学)中,矩阵乘法可用于把空间向量进行几何变换。我们可以把颜色的值(RGBA)表示成一个四维空间向量:color = (r, g, b, a);那么就可以应用...

  • 如何使用纯CSS3实现一个3D泡沫

    要实现一个逼真的泡沫,涉及到比较复杂的光学/物理学知识。我们这里先简化下问题,实现一个相对简单而足够实用的泡沫元素。我们可以把基础的泡沫元素应用在很多场景中,比如水景、泡咖啡、啤酒甚至火焰特效中。泡沫首先是一个圆形元素.bubble

  • 更多...