效果预览

在线演示

按下右侧的“点击预览”按钮可以在当前页面预览,点击链接可以全屏预览。

https://codepen.io/comehope/pen/xJdVxx

可交互视频

此视频是可以交互的,你可以随时暂停视频,编辑视频中的代码。

请用 chrome, safari, edge 打开观看。

https://scrimba.com/p/pEgDAM/cP6LRSk

源代码下载

本地下载

每日前端实战系列的全部源代码请从 github 下载:

https://github.com/comehope/front-end-daily-challenges

代码解读

定义 dom,容器中包含 3 个元素,每个元素代表组成火焰的 1 个火苗:

<div class="flame"><span></span><span></span><span></span>
</div>

居中显示:

body {margin: 0;height: 100vh;display: flex;align-items: center;justify-content: center;background: linear-gradient(black, maroon);
}

定义容器尺寸:

.flame {width: 10em;height: 12em;font-size: 24px;
}

画出火苗:

.flame {position: relative;
}.flame span {position: absolute;width: 5em;height: 5em;background: radial-gradient(orangered 20%,rgba(255, 69, 0, 0) 70%);border-radius: 50%;bottom: 0;
}

用变量画出多个火苗,其中 --particles 是火苗的数量:

.flame {--particles: 3;
}.flame span {left: calc((var(--n) - 1) * 5em / var(--particles));
}.flame span:nth-child(1) {--n: 1;
}.flame span:nth-child(2) {--n: 2;
}.flame span:nth-child(3) {--n: 3;
}

修改混合模式,使火苗重叠的部分变亮:

.flame span {mix-blend-mode: screen;
}

增加火焰升腾的动画效果:

.flame span {animation: rise 1s ease-in infinite;
}@keyframes rise {from {transform: translateY(0) scale(1);filter: opacity(0);}25% {filter: opacity(1);}to {transform: translateY(-10em) scale(0);filter: opacity(0);}
}

用变量设置火苗升起的延时时间,使火苗陆续升起:

.flame span {animation-delay: calc(var(--rnd) * 1s);
}.flame span:nth-child(1) {--n: 1;--rnd: 0.1234;
}.flame span:nth-child(2) {--n: 2;--rnd: 0.3456;
}.flame span:nth-child(3) {--n: 3;--rnd: 0.6789;
}

接下来用 d3 来批量处理 dom。
引用 d3 库:

<script src="https://d3js.org/d3.v5.min.js"></script>

用 d3 为 css 中的 --particles 变量赋值:

const COUNT_OF_PARTICLES = 3;d3.select('.flame').style('--particles', COUNT_OF_PARTICLES);

用 d3 创建 dom 中的火苗元素:

d3.select('.flame').style('--particles', COUNT_OF_PARTICLES).selectAll('span').data(d3.range(COUNT_OF_PARTICLES)).enter().append('span');

用 d3 为火苗元素的 css 中的 --n 和 --rnd 变量赋值:

d3.select('.flame').style('--particles', COUNT_OF_PARTICLES).selectAll('span').data(d3.range(COUNT_OF_PARTICLES)).enter().append('span').style('--n', (d) => d + 1).style('--rnd', () => Math.random());

删除掉 dom 中的火苗元素,删除掉 css 中的变量声明。

最后,把火苗元素设置为 100 个,形成火焰效果:

const COUNT_OF_PARTICLES = 100;

大功告成!

原文地址:https://segmentfault.com/a/1190000015740846

如何用 CSS 和 D3 创作火焰动画 1相关推荐

  1. 如何用 CSS 和 D3 创作火焰动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJdVxx 可交互视频 ...

  2. 前端每日实战:88# 视频演示如何用 CSS 和 D3 创作火焰动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJdVxx 可交互视频 此视频是可 ...

  3. 前端每日实战:108# 视频演示如何用 CSS 和 D3 创作一个抽象的黑白交叠动画

    效果预览 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/Yjomyd 可交互视频 此视频是可 ...

  4. 如何用 CSS 和 D3 创作一个抽象的黑白交叠动画

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/Yjomyd 可交互视频 ...

  5. 如何用 CSS 和 D3 创作一个用文字组成的心形图案

    效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/xJvERW 可交互视频 ...

  6. Creating Fire and Brimstone Type Animation Motion Graphics in After Effects After Effects教程之如何创作火焰动画

    Creating Fire and Brimstone Type Animation Motion Graphics in After Effects 中文字幕 After Effects教程之如何创 ...

  7. html5鱼游动动画,CSS和D3制作小鱼游动的交互动画效果

    CSS和D3制作小鱼游动的交互动画效果 发布时间:2020-05-13 13:54:35 来源:亿速云 阅读:118 作者:Leah 本篇文章主要探讨如何用CSS和D3制作小鱼游动的交互动画效果.有一 ...

  8. 用HTML和CSS3做个鱼,如何使用CSS和D3实现小鱼游动的交互动画(附代码)

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现小鱼游动的交互动画(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://github. ...

  9. css盒心形的代码过程,如何使用CSS和D3实现用文字组成的心形动画效果(附代码)...

    本篇文章给大家带来的内容是关于如何使用CSS和D3实现用文字组成的心形动画效果(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 效果预览 源代码下载 https://gith ...

最新文章

  1. 我的世界服务器ess配置信息,[搬运贴]超详细的Ess基础插件介绍
  2. 2020-12-29 Matlab自动化控制-Adrc自抗扰控制参数调节
  3. github上开箱即用的app之TODO app
  4. Spring Boot Lombok配置
  5. LeetCode(922)——按奇偶排序数组 II(JavaScript)
  6. 你是如何找到自己的第一份测试工作的?
  7. 如何提升数据安全治理能力
  8. 生活,不求深刻,只求简单。
  9. poj 3074 Sudoku
  10. mysql sysbench 1.0.X
  11. Atitit. 提升开发效率与质量DSL ( 3) ----实现DSL的方式总结
  12. linux ruby安装目录,SuseLInux下安装Ruby 及 Rails遇到的问题及解决方法
  13. 安卓自定义Toast的原理及实现
  14. abs链目前在哪个平台_ABS链怎么样?
  15. 2018 ACM-ICPC 北京站 游记
  16. Python字典嵌套
  17. 2014年传智Itcast C++培训3期视频全套
  18. 浅淡测试夹具制作的制作策略
  19. python pandas series想赋予新的值_pandas Series对象创建及常用操作
  20. 如何写模板类?(模板类的简单例子)

热门文章

  1. 精通Git(三)——Git分支机制
  2. 台式电脑怎么调分辨率_电脑分辨率调最大了怎么办【详细介绍】
  3. Jquery换肤效果
  4. 玛森:学python怎么样
  5. 华为p9 android版本,华为P9有几个版本 华为P9各版本区别对比 (全文)
  6. android学习和广告平台赚钱zz
  7. 阿里巴巴客户端开发工程师offer面经
  8. npskins CSGO开箱 | CSGO皮肤直接取回网页开箱子网站
  9. android 判断标点符号,Android文字标点符号错误
  10. 游戏策划学习:乱敏、mmo、跳跃表现