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图片边框border-image的用法
Jun 30 HTML / CSS
CSS3实现自定义Checkbox特效实例代码
Apr 24 HTML / CSS
CSS3田字格列表的样式编写方法
Nov 22 HTML / CSS
CSS3 animation ? steps 函数详解
Aug 30 HTML / CSS
关于HTML5的安全问题开发人员需要牢记的
Jun 21 HTML / CSS
HTML5+CSS3应用详解
Feb 24 HTML / CSS
2014年圣诞节倒计时网页的制作过程
Dec 05 HTML / CSS
html5如何在Canvas中实现自定义路径动画示例
Sep 18 HTML / CSS
HTML5 source标签:媒介元素定义媒介资源
Jan 29 HTML / CSS
Canvas 帧动画吃苹果小游戏
Aug 05 HTML / CSS
canvas小画板之平滑曲线的实现
Aug 12 HTML / CSS
HTML5超文本标记语言的实现方法
Sep 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
Smarty安装配置方法
2008/04/10 PHP
windows下开发并编译PHP扩展的方法
2011/03/18 PHP
PHP实现的DES加密解密实例代码
2016/04/06 PHP
PHP实现简单ajax Loading加载功能示例
2016/12/28 PHP
PHP实现在数据库百万条数据中随机获取20条记录的方法
2017/04/19 PHP
javascript 网页跳转的方法
2008/12/24 Javascript
JavaScript 高级语法介绍
2009/06/15 Javascript
基于JQuery的数字改变的动画效果--可用来做计数器
2010/08/11 Javascript
js判断输入是否为正整数、浮点数等数字的函数代码
2010/11/17 Javascript
jquery焦点图片切换(数字标注/手动/自动播放/横向滚动)
2013/01/24 Javascript
JS去除右边逗号的简单方法
2013/07/03 Javascript
Javascript字符串对象的常用方法简明版
2014/06/26 Javascript
jQuery中$.click()无效问题分析
2015/01/29 Javascript
jQuery EasyUI实现右键菜单变灰不可用效果
2015/09/24 Javascript
理解javascript异步编程
2016/01/27 Javascript
微信小程序中显示html格式内容的方法
2017/04/25 Javascript
vue2.0+SVG实现音乐播放圆形进度条组件
2019/09/21 Javascript
微信小程序实现多行文字超出部分省略号显示功能
2019/10/23 Javascript
js实现聊天对话框
2020/02/08 Javascript
小程序websocket心跳库(websocket-heartbeat-miniprogram)
2020/02/23 Javascript
JavaScript数组排序的六种常见算法总结
2020/08/18 Javascript
Python用Pillow(PIL)进行简单的图像操作方法
2017/07/07 Python
Python通过Django实现用户注册和邮箱验证功能代码
2017/12/11 Python
Python实现修改文件内容的方法分析
2018/03/25 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
python实现多张图片拼接成大图
2019/01/15 Python
大家都说好用的Python命令行库click的使用
2019/11/07 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
css3 边框、背景、文本效果的实现代码
2018/03/21 HTML / CSS
详解HTML5 LocalStorage 本地存储
2016/12/23 HTML / CSS
HTML5+CSS3模仿优酷视频截图功能示例
2017/01/05 HTML / CSS
Nike澳大利亚官网:Nike.com (AU)
2019/06/03 全球购物
俄罗斯奢侈品牌衣服、鞋子和配饰的在线商店:INTERMODA
2020/07/17 全球购物
普通党员个人整改措施
2014/10/27 职场文书
Python 实现定积分与二重定积分的操作
2021/05/26 Python