css animation配合SVG制作能量流动效果


Posted in HTML / CSS onMarch 24, 2021

最终效果如下:

css animation配合SVG制作能量流动效果

动画分成两步

  • 制定运行轨迹
  • 创建DOM并按照轨迹动画

制定运行轨迹

我们先要画一条底部的淡蓝色半透明路劲做为能量流动的管道
这里用SVG的path去做(其实这里可以直接用背景图), 代码如下:

<!-- 代码是用react写的, 删除了遍历以及部分代码 -->
 
<svg>
    <!-- 工具描述提示符,被用在fill里做过滤等操作,这里是小球底部的发光 -->
    <defs>
        <radialGradient id="grad1" cx="50%" cy="50%" r="50%" fx="50%" fy="50%">
            <stop offset="0%" style={{ stopColor: "rgba(2,246,255,.5)" }} />
            <stop offset="100%" style={{ stopColor: "rgba(2,246,255,0)" }} />
        </radialGradient>
    </defs>
    <!-- 这里遍历N个淡蓝色线条路径 d为路径-->
    <path d={item.path} stroke="rgba(29,159,167,0.4)" fill="transparent" strokeWidth={5}></path>
    ...
    <!-- 这里是发光小球 通过两个圆叠加形成 -->
    <g>
        <circle cx={cx} cy={cy} r="15" fill="url(#grad1)"></circle>
        <circle cx={cx} cy={cy} r="5" fill="rgba(2,246,255)"></circle>
    </g>
</svg>

创建DOM并按照轨迹动画

这里的核心原理通过offset-path这个属性设置运动偏移路径,再通过offset-distance来设置偏移量,这样通过css3 animation就可以让元素按照一定的轨迹运动

<!-- 这里要保证盒子跟SVG的盒子位置重合,宽高一致,这样路径点才能一致 -->
<div className={styles.animate}>
    <!-- 这里遍历N个div,让每一个div都按照offsetPath也就是svg内path的d的值进行流动 -->
    <!-- animationDelay 负数表示渲染前就已经执行, 渲染时就可以铺满整个路径 -->
    <div key={index} className={styles.point3} style={{ "offsetPath": "path('M 105 34 L 5 34')", "animationDelay": `-${index * 1}s`, "animationDuration": '5s', 'animationPlayState': `${stop ? 'paused' : 'running'}` }}></div>
    ...
</div>
.point3 {
    width: 10px;
    height: 2px;
    // offset-path: path('M 248 108 L 248 172 L 1510 172');
    offset-distance: 0%;
    animation: flow 20s linear normal infinite;
    background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 10%, #FEFE02);
    position: absolute;
    left: 0;
    right: 0;
}
}
 
@keyframes flow {
    from {
        offset-distance: 0%;
    }
 
    to {
        offset-distance: 100%;
    }
}

 

HTML / CSS 相关文章推荐
CSS3 渐变(Gradients)之CSS3 线性渐变
Jul 08 HTML / CSS
CSS3对图片照片进行边缘模糊处理的实现
Aug 08 HTML / CSS
CSS3 calc()会计算属性详解
Feb 27 HTML / CSS
CSS实现限制字数功能当对象内文本溢出时显示省略标记
Aug 20 HTML / CSS
使用CSS3来实现滚动视差效果的教程
Aug 24 HTML / CSS
CSS3制作缩略图的详细过程
Jul 08 HTML / CSS
html5组织文档结构_动力节点Java学院整理
Jul 11 HTML / CSS
HTML5注册表单的自动聚焦与占位文本示例代码
Jul 19 HTML / CSS
html5本地存储 localStorage操作使用详解
Sep 20 HTML / CSS
Canvas多边形绘制的实现方法
Aug 05 HTML / CSS
HTML+CSS+JS实现图片的瀑布流布局的示例代码
Apr 22 HTML / CSS
html2 canvas svg不能识别的解决方案
Jun 03 HTML / CSS
如何通过 CSS 写出火焰效果
Html5移动端div固定到底部实现底部导航条的几种方式
Mar 09 #HTML / CSS
HTML5拖拽文件上传的示例代码
Mar 04 #HTML / CSS
html5使用window.postMessage进行跨域实现数据交互的一次实战
Feb 24 #HTML / CSS
Canvas在超级玛丽游戏中的应用详解
Feb 06 #HTML / CSS
Html5移动端网页端适配(js+rem)
Feb 03 #HTML / CSS
使用HTML和CSS实现的标签云效果(附demo)
Feb 03 #HTML / CSS
You might like
php操作excel文件 基于phpexcel
2010/07/02 PHP
献给php初学者(入门学习经验谈)
2010/10/12 PHP
PHP 快速排序算法详解
2014/11/10 PHP
php技术实现加载字体并保存成图片
2015/07/27 PHP
php实现登陆模块功能示例
2016/10/20 PHP
php中的抽象方法和抽象类
2017/02/14 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
PHP获取访问设备信息的方法示例
2019/02/20 PHP
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
小议JavaScript中Generator和Iterator的使用
2015/07/29 Javascript
AngularJS手动表单验证
2016/02/01 Javascript
jquery UI Datepicker时间控件冲突问题解决
2016/12/16 Javascript
又一款MVVM组件 构建自己的Vue组件(2)
2017/03/13 Javascript
微信小程序movable view移动图片和双指缩放实例代码
2017/08/08 Javascript
bootstrap table实现x-editable的行单元格编辑及解决数据Empty和支持多样式问题
2017/08/10 Javascript
如何实现一个webpack模块解析器
2018/10/24 Javascript
原生JS实现的跳一跳小游戏完整实例
2019/01/27 Javascript
vue-router的钩子函数用法实例分析
2019/10/26 Javascript
使用PreloadJS加载图片资源的基础方法详解
2020/02/03 Javascript
element 中 el-menu 组件的无限极循环思路代码详解
2020/04/26 Javascript
python引入不同文件夹下的自定义模块方法
2018/10/27 Python
python 接收处理外带的参数方法
2018/12/03 Python
Python eval的常见错误封装及利用原理详解
2019/03/26 Python
Python多线程多进程实例对比解析
2020/03/12 Python
Django 解决distinct无法去除重复数据的问题
2020/05/20 Python
Python脚本打包成可执行文件过程解析
2020/10/20 Python
Python监听键盘和鼠标事件的示例代码
2020/11/18 Python
基于CSS3实现的漂亮Menu菜单效果代码
2015/09/10 HTML / CSS
HTML5图片预览实例分享
2014/06/04 HTML / CSS
Java面试题:请说出如下代码的输出结果
2013/04/22 面试题
销售行业个人求职自荐信
2013/09/25 职场文书
社区矫正工作方案
2014/06/04 职场文书
个人授权委托书范文
2014/09/21 职场文书
学校清洁工岗位职责
2015/04/15 职场文书
给numpy.array增加维度的超简单方法
2021/06/02 Python
用python修改excel表某一列内容的操作方法
2021/06/11 Python