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的transform做的动态时钟效果
Sep 21 HTML / CSS
CSS3中Transition动画属性用法详解
Jul 04 HTML / CSS
使用phonegap检测网络状态的方法
Mar 30 HTML / CSS
详解HTML5 canvas绘图基本使用方法
Jan 29 HTML / CSS
HTML5之SVG 2D入门13—svg对决canvas及长处和适用场景分析
Jan 30 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
May 31 HTML / CSS
HTML5 CSS3打造相册效果附源码下载
Jun 16 HTML / CSS
移动端HTML5实现文件上传功能【附代码】
Mar 25 HTML / CSS
详解移动端Html5页面中1px边框的几种解决方法
Jul 24 HTML / CSS
iframe在移动端的缩放的示例代码
Oct 12 HTML / CSS
HTML通过表单实现酒店筛选功能
May 18 HTML / CSS
css3中2D转换之有趣的transform形变效果
Feb 24 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 遍历显示文件夹下所有目录、所有文件的函数,没有分页的代码
2008/11/14 PHP
火车采集器 免费版使出收费版本功能实现原理
2009/09/17 PHP
让PHP开发者事半功倍的十大技巧小结
2010/04/20 PHP
PHP文件上传之多文件上传的实现思路
2016/01/27 PHP
PHP载入图像imagecreatefrom_gif_jpeg_png系列函数用法分析
2016/11/14 PHP
php命令行写shell实例详解
2018/07/19 PHP
Js点击弹出下拉菜单效果实例
2013/08/12 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
jQuery:delegate中select()不起作用的解决方法(实例讲解)
2014/01/26 Javascript
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
js插件YprogressBar实现漂亮的进度条效果
2015/04/20 Javascript
全系IE支持Bootstrap的解决方法
2015/10/19 Javascript
学习使用grunt来打包JavaScript和CSS程序的教程
2016/01/04 Javascript
jquery点击改变class并toggle的实现代码
2016/05/15 Javascript
Vue实现购物车功能
2017/04/27 Javascript
微信小程序实现全国机场索引列表
2018/01/31 Javascript
如何利用@angular/cli V6.0直接开发PWA应用详解
2018/05/06 Javascript
JS实现处理时间,年月日,星期的公共方法示例
2019/05/31 Javascript
js实现多图和单图上传显示
2019/12/18 Javascript
Vue中函数防抖节流的理解及应用实现
2020/04/24 Javascript
利用vue3+ts实现管理后台(增删改查)
2020/10/30 Javascript
python实现查询IP地址所在地
2015/03/29 Python
Python中的特殊语法:filter、map、reduce、lambda介绍
2015/04/14 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
TensorFlow查看输入节点和输出节点名称方式
2020/01/04 Python
Python3开发实例之非关系型图数据库Neo4j安装方法及Python3连接操作Neo4j方法实例
2020/03/18 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
django下创建多个app并设置urls方法
2020/08/02 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
全球摩托车装备领导者:RevZilla
2017/09/04 全球购物
无谷物狗粮:Pooch & Mutt
2018/05/23 全球购物
英国奢侈皮具品牌:Aspinal of London
2018/09/02 全球购物
大学生咖啡店创业计划书
2014/01/21 职场文书
担保书范文
2019/07/09 职场文书
Oracle 数据仓库ETL技术之多表插入语句的示例详解
2021/04/12 Oracle
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python