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动画按钮的实例教程
Nov 21 HTML / CSS
CSS3制作酷炫的三维相册效果
Jul 01 HTML / CSS
简单几步用纯CSS3实现3D翻转效果
Jan 17 HTML / CSS
移动端适配 使px自动转换rem
Aug 26 HTML / CSS
基于 HTML5 的 WebGL 3D 版俄罗斯方块的示例代码
May 28 HTML / CSS
HTML5 本地存储之如果没有数据库究竟会怎样
Apr 25 HTML / CSS
html5菜单折纸效果
Apr 22 HTML / CSS
多视角3D逼真HTML5水波动画
Mar 03 HTML / CSS
HTML5添加禁止缩放功能
Nov 03 HTML / CSS
浅析canvas元素的html尺寸和css尺寸对元素视觉的影响
Jul 22 HTML / CSS
使用SVG实现提示框功能的示例代码
Jun 05 HTML / CSS
css中z-index: 0和z-index: auto的区别
Aug 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
阿拉伯的咖啡与水烟
2021/03/03 咖啡文化
PHP 生成的XML以FLASH获取为乱码终极解决
2009/08/07 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
js获取单元格自定义属性值的代码(IE/Firefox)
2010/04/05 Javascript
js实现addClass,removeClass,hasClass的函数代码
2011/07/13 Javascript
jquery ajax return没有返回值的解决方法
2011/10/20 Javascript
javascript返回顶部效果(自写代码)
2013/01/06 Javascript
常用的JavaScript模板引擎介绍
2015/02/28 Javascript
freemarker判断对象是否为空的方法
2015/08/13 Javascript
学习javascript的闭包,原型,和匿名函数之旅
2015/10/18 Javascript
js中实现字符串和数组的相互转化详解
2016/01/24 Javascript
Bootstrap 粘页脚效果
2016/03/28 Javascript
微信小程序 教程之数据绑定
2016/10/18 Javascript
jQuery EasyUI 为Combo,Combobox添加清除值功能的实例
2017/04/13 jQuery
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
解决vue+webpack打包路径的问题
2018/03/06 Javascript
JavaScript实现的鼠标跟随特效示例【2则实例】
2018/12/22 Javascript
微信小程序实现bindtap等事件传参
2019/04/08 Javascript
在vue中获取微信支付code及code被占用问题的解决方法
2019/04/16 Javascript
ant design pro中可控的筛选和排序实例
2020/11/17 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[31:47]夜魇凡尔赛茶话会 第三期01:选手知多少
2021/03/11 DOTA
在Python中使用列表生成式的教程
2015/04/27 Python
Python autoescape标签用法解析
2020/01/17 Python
python urllib和urllib3知识点总结
2021/02/08 Python
Canvas 文字碰撞检测并抽稀的方法
2019/05/27 HTML / CSS
Under Armour澳大利亚官网:美国知名的高端功能性运动品牌
2018/02/22 全球购物
中东最大的在线宠物店:Dubai Pet Food
2020/06/11 全球购物
银行演讲稿范文
2014/01/03 职场文书
乔迁之喜主持词
2014/03/27 职场文书
客运企业隐患排查工作方案
2014/06/06 职场文书
超市周年庆活动方案
2014/08/16 职场文书
2015年妇幼保健工作总结
2015/05/19 职场文书
Element实现动态表格的示例代码
2021/08/02 Javascript
TV动画《政宗君的复仇》第二季制作决定PV公布
2022/04/02 日漫