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实现粒子旋转伸缩加载动画
Apr 22 HTML / CSS
css3.0 图形构成实例练习二
Mar 19 HTML / CSS
CSS3绘制不规则图形的一些方法示例
Nov 07 HTML / CSS
CSS3中几个新增加的盒模型属性使用教程
Mar 01 HTML / CSS
可自定义箭头样式的CSS3气泡提示框
Mar 16 HTML / CSS
CSS3实现3D翻书效果
Jun 20 HTML / CSS
CSS3制作酷炫的三维相册效果
Jul 01 HTML / CSS
css3一个简易的 LED 数字时钟实现方法
Jan 15 HTML / CSS
CSS实现进度条和订单进度条的示例
Nov 05 HTML / CSS
html5 touch事件实现页面上下滑动效果【附代码】
Mar 10 HTML / CSS
HTML块级标签汇总(小篇)
Jul 13 HTML / CSS
详解flex:1什么意思
Jul 23 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
ip签名探针
2006/10/09 PHP
PHP中删除变量时unset()和null的区别分析
2011/01/27 PHP
php字符串分割函数explode的实例代码
2013/02/07 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
PHP封装的MSSql操作类完整实例
2016/05/26 PHP
thinkphp ajaxfileupload实现异步上传图片的示例
2017/08/28 PHP
dojo 之基础篇(二)之从服务器读取数据
2007/03/24 Javascript
奇妙的js
2007/09/24 Javascript
javascript,jquery闭包概念分析
2010/06/19 Javascript
基于JQuery实现的Select级联
2014/01/27 Javascript
js this函数调用无需再次抓获id,name或标签名
2014/03/03 Javascript
JS实现根据当前文字选择返回被选中的文字
2014/05/21 Javascript
JS实现进入页面时渐变背景色的方法
2015/02/25 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
使用jquery如何获取时间
2016/10/13 Javascript
微信小程序 地图map详解及简单实例
2017/01/10 Javascript
Bootstrap table使用方法总结
2017/05/10 Javascript
Vue.extend构造器的详解
2017/07/17 Javascript
浅谈vue-cli加载不到dev-server.js的解决办法
2017/11/24 Javascript
详解Vue.js中.native修饰符
2018/04/24 Javascript
微信小程序js文件改变参数并在视图上及时更新【推荐】
2018/06/11 Javascript
Python 字典dict使用介绍
2014/11/30 Python
python中字典dict常用操作方法实例总结
2015/04/04 Python
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
python解决js文件utf-8编码乱码问题(推荐)
2018/05/02 Python
Python走楼梯问题解决方法示例
2018/07/25 Python
Django数据库类库MySQLdb使用详解
2019/04/28 Python
python 多进程共享全局变量之Manager()详解
2019/08/15 Python
澳大利亚优惠网站:Deals.com.au
2019/07/02 全球购物
Jowissa官方网站:瑞士制造的手表,优雅简约的设计
2020/07/29 全球购物
仓库组长岗位职责
2014/01/29 职场文书
职工年度考核评语
2014/12/31 职场文书
毕业论文答辩开场白
2015/05/27 职场文书
MySQL 重命名表的操作方法及注意事项
2021/05/21 MySQL
浅析Django接口版本控制
2021/06/26 Python