如下图所示的波浪动画效果,实现方法有很多,比如CSS或者是js等方法都可以实现。不过,要是使用SVG来实现的,我觉得比其它两种方法都要简单。这篇文章就来讲讲使用SVG来实现类似这样的波浪动画效果是多么的简单。

先来分析下这个波浪效果的实现原理。

波浪效果主要是由两个动画构成,一个是波浪上下位置的变化即改变元素的Y轴的值;另外一个波浪滚动的效果,其实是改变一个大的由SVG绘制的波浪的X轴的变化形成的。

整个效果的一个关键是使用矢量设计软件比如AI来设计一个波浪的形状:

类似的波浪形状使用AI中的钢笔工具很轻松就能绘制出来,SVG代码如下:

<svg class="wave-svg" xmlns="http://www.w3.org/2000/svg" data-name="3-waves" viewBox="0 0 600 215.43"><title>wave shape</title><path class="871c1787-a7ef-4a54-ad03-3cd50e05767a" d="M639,986.07c-17-1-27.33-.33-40.5,2.67s-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06S456,987.07,439,986.07s-27.33-.33-40.5,2.67-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06S256,987.07,239,986.07s-27.33-.33-40.5,2.67-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06v205.06h600V996S656,987.07,639,986.07Z" </path></svg>

SVG默认路经填充是黑色的,可以在AI中直接定义路经的颜色,也可以通过样式来定义填充颜色。

波浪形状有了,下面来实现动画效果,先来定义基本的HTML效果:

<div class="wrapper">
<h3>animated svg</h3>
<div>
<div class="wave-svg-shape">
<svg class="wave-svg" xmlns="http://www.w3.org/2000/svg" id="738255fe-a9fa-4a5e-963a-8e97f59370ad" data-name="3-waves" viewBox="0 0 600 215.43"><title>wave shape</title><path class="871c1787-a7ef-4a54-ad03-3cd50e05767a" d="M639,986.07c-17-1-27.33-.33-40.5,2.67s-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06S456,987.07,439,986.07s-27.33-.33-40.5,2.67-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06S256,987.07,239,986.07s-27.33-.33-40.5,2.67-24.58,11.84-40.46,15c-13.56,2.69-31.27,2.9-46.2,1.35-17.7-1.83-35-9.06-35-9.06v205.06h600V996S656,987.07,639,986.07Z" transform="translate(-76 -985)"></path></svg>
</div>
</div>
</div>

类名为wave-svg-shape用来实现波浪在Y轴位置变化的动画效果;类名为wave-svg用来实现波浪在X轴变化的动画效果。

定义基本的CSS:

body > .wrapper {
margin: 50px auto;
text-align: center;
}
h3 {
margin-bottom: 50px;
}
body > .wrapper > div {
width: 100px;
height: 100px;
overflow: hidden;
display: block;
margin: 0 auto;
position: relative;
}
.wave-svg-shape {
position: absolute;
top: 0;
left: 0;
width: 300px;
height: 100%;
overflow: hidden;
transform: translateX(-100px);
}
.wave-svg-shape .wave-svg {
width: 100%;
height: auto;
overflow: hidden;
float: left;
fill: #00A1DF;
margin: 0;
}

在样式中,使用transform定义了波浪在X轴的初始位置,并且改变了波浪形状的填充颜色。

接下来是来编写两个动画效果的animation的keyframe,首先是类名为wave-svg-shape的动画效果,主要是transform来实现:

@keyframes fillUpSvg {
0% {
transform: translateY(calc(100px/2)) scaleY(0);
}
50% {
transform: translateY(0) scaleY(1);
}
100% {
transform: translateY(calc(100px/2)) scaleY(0);
}
}

从上面代码中可以看出主要是用来translateY和scaleY这两个属性,在初始的0%的点,元素在Y轴的位置为50px并且在Y轴的方向上的缩小为0,这样元素刚好是在可视范围之外。然后再改变元素的值为默认的值,就实现了波浪上下滚动的动画效果。

上下效果实现了,接下来是类名wave-svg元素在X轴上的滚动动画效果:

@keyframes waveSvgAnim {
0% {
transform: translateX(calc(-100px * 2));
}
100% {
transform: translateX(100px * 2);
}
}

这里就简单了,就是移动元素在X轴上的位置。整体CSS代码如下:

body > .wrapper {
margin: 50px auto;
vertical-align: top;
text-align: center;
}
h3 {
margin-bottom: 50px;
}
body > .wrapper > div {
width: 100px;
height: 100px;
overflow: hidden;
display: block;
margin: 0 auto;
position: relative;
}
.wave-svg-shape {
position: absolute;
top: 0;
left: 0;
width: 300px;
height: 100%;
overflow: hidden;
transform: translateX(-100px);
animation: fillUpSvg 10s ease-in-out infinite;
}
.wave-svg-shape .wave-svg {
width: 100%;
height: auto;
overflow: hidden;
float: left;
fill: #00A1DF;
margin: 0;
animation: waveSvgAnim 1s linear infinite;
}
@keyframes fillUpSvg {
0% {
transform: translateY(calc(100px/2)) scaleY(0);
}
50% {
transform: translateY(0) scaleY(1);
}
100% {
transform: translateY(calc(100px/2)) scaleY(0);
}
}
@keyframes waveSvgAnim {
0% {
transform: translateX(calc(-100px * 2));
}
100% {
transform: translateX(100px * 2);
}
}

一个优雅的波浪滚动动画效果就实现了。这样类似的效果在一些加载动画上面用的比较多。

demo地址

现在浏览器对SVG的支持越来越好了,特别是移动端可以大胆的使用。好好的使用SVG这一利器,不仅能提高动画开发的效率,还可以大大提升动画的趣味性。

使用 SVG 来实现波浪 (wave) 动画效果的更多相关文章

  1. 使用SVG生成的奔跑吧兄弟的动画效果

    在线演示 本地下载 缩放一下在线演示效果窗口,看看不同大小下的动画是不是都显示的非常完美? 体验一下SVG的强大之处吧!

  2. 纯CSS实现帅气的SVG路径描边动画效果(转载)

    本文转载自: 纯CSS实现帅气的SVG路径描边动画效果

  3. SVG的路径动画效果

    使用SVG animateMotion实现的一个动画路径效果,相关代码如下. 在线调试唯一地址:http://www.gbtags.com/gb/debug/c88f4099-5056-4ad7-af ...

  4. 如何使用SVG生成超酷的页面预加载素描动画效果

    在线演示 本地下载 1 SVG简介 可缩放矢量图形是基于可扩展标记语言(标准通用标记语言的子集),用于描述二维矢量图形的一种图形格式.它由万维网联盟制定,是一个开放标准. 2 SVG的特点 与其他图像 ...

  5. iOS CAShapeLayer、CADisplayLink 实现波浪动画效果

    iOS CAShapeLayer.CADisplayLink 实现波浪动画效果 效果图 代码已上传 GitHub:https://github.com/Silence-GitHub/CoreAnima ...

  6. 用HTML和CSS实现WWDC 2015上的动画效果

    用HTML和CSS实现WWDC 2015上的动画效果 动画效果WWDC 2015   原文:https://cssanimation.rocks/wwdc15/ 译者:周晓楷(@Helkyle) 每年 ...

  7. 赞!15个来自 CodePen 的酷炫 CSS 动画效果

    CodePen 是一个在线的前端代码编辑和展示网站,能够编写代码并即时预览效果.你在上面可以在线分享自己的 Web 作品,也可以欣赏到世界各地的优秀开发者在网页中实现的各种令人惊奇的效果. 今天这篇文 ...

  8. 12个来自 Codrops 的创新交互和动画效果

    产品的用户体验是否被用户所接受,很大一部分取决于交互界面的设计,交互界面设计是整个产品设计中的核心,对于产品品质有着决定性的影响.这里集合了12个来自 Codrops 的创新的界面交互和动画效果,值得 ...

  9. 运动曲线提升CSS动画效果

    原文链接 译文\译者鞠大宝 先有UI动画,然后才会有好的UI动画.好的动画会让人惊叹“哇哦!”——因为页面看上去很流畅.很漂亮,最重要的是,自然,一点都不会让人觉得不和谐或者僵硬死板.如果你经常逛Dr ...

随机推荐

  1. Android记事本06

    昨天: activity的生命周期 今天: activity横竖屏切换的生命周期 遇到的问题: 为了匹配ADK,下载了更旧的版本SDK,布局文件仍然无法显示.

  2. Java API操作ZooKeeper

    创建会话 package org.zln.zk; import org.apache.zookeeper.WatchedEvent; import org.apache.zookeeper.Watch ...

  3. linux shell常用语法

    特殊变量 $0 当前脚本的文件名$n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2.$# 传递给脚本或函数的参数个数.$* 传递给脚本或函数的所有参 ...

  4. VMware ESXI 5.5 注册码

    VMware ESXI 5.5 注册码 ESXI 注册码0A42V-8M182-3ZZ88-R21N6-32K5H ESXi Server许可证类型产品: Mware vSphere 5 Enterp ...

  5. 洛谷 P2329 [SCOI2005]栅栏 解题报告

    P2329 [SCOI2005]栅栏 题目描述 农夫约翰打算建立一个栅栏将他的牧场给围起来,因此他需要一些特定规格的木材.于是农夫约翰到木材店购买木材.可是木材店老板说他这里只剩下少部分大规格的木板了 ...

  6. uoj169:元旦老人与数列

    题意:http://uoj.ac/problem/169 sol  :线段树..........蜜汁TLE了一个点,不管了..... 代码抄snowMyDream的,orz........... 线段 ...

  7. VS debug 简记

    近两日使用VS2013 Professional版本调试一个c源文件,过程中发现有几个bug,不知是IDE的问题还是我设置有问题,记在这里 1.下面的程序段A和B,区别只是for是否加花括号(标准C规 ...

  8. fastjson对json字符串JSONObject和JSONArray互相转换操作示例

    2017-03-25 直接上代码: package com.tapt.instance; import com.alibaba.fastjson.JSON; import com.alibaba.fa ...

  9. linxu安装方式

    安装Linux操作系统的5种方法以及心得这几天没有调别的东西,想起自己还不太会在没有安装光盘的时候安装Linux,于是试了一下Linux的五种安装方法,下面是我的一些 篇一:安装Linux操作系统的5 ...

  10. .h 和 .cpp 切换快捷键设置(转)

    原文转自 https://blog.csdn.net/t163361/article/details/51859274 打开VS后依次选择如下 工具-> 选项-> 环境-> 键盘-& ...