d3.js 实现烟花鲜果

今天在d3.js官网上看到了一个烟花的DEMO,是canvas制作的,于是我想用d3.js来实现它,js代码只有几行。好了废话不多说,先上图。

1 js 类

因为烟花要有下落的效果,所以里面用到了一些简单的数学和物理知识来模拟重力,

class Firework {constructor() {this._heightLimit = [100,200];this._width = 1288;this._svg = null;this._tempObj = {};this._colors = d3.scaleLinear().domain([0,1,2,3,4,5]).range(['#f00','#ff0','#f0f','#0ff','#0f0'])this.initSvg();}initSvg() {this._svg = d3.select('body').append('svg');this._width = window.innerWidth;}randomPosition() {setInterval(() => {let x = Math.floor(Math.random() * (this._width - 200) + 100);let y = Math.floor(Math.random() * (this._heightLimit[1] - this._heightLimit[0]) + this._heightLimit[0]);let v = Math.random() * 20 + 40;let c = Math.random() * 4;this.renderFire(x,y,v,c)}, Math.floor(Math.exp(-Math.random()) * 800))}renderFire(x,y,v,c) {let stamp = new Date().getTime();let temp = d3.range(18).map(d => {return {cx: x + 1 * Math.sin(Math.PI * d / 9),cy: y - 1 * Math.cos(Math.PI * d / 9),vx: v * Math.sin(Math.PI * d / 9),vy: - v *  Math.cos(Math.PI * d / 9)}})let t = 0;this._tempObj[stamp] = setInterval(() => {let cutStamp = new Date().getTime();for(var i=0; i<18; i++) {this._svg.append('circle').attr('cx', temp[i].cx + temp[i].vx * t / 8).attr('cy', t * t / 16 + temp[i].vy * t / 8 + temp[i].cy).attr('r', 6).attr('fill', this._colors(c)).attr('fill-opacity', 1).transition().duration(300).attr('fill-opacity', 0).on('end', function() {d3.select(this).remove();})}if(cutStamp - stamp > 2000){clearInterval(this._tempObj[stamp])}t ++;}, 40)}start() {this.randomPosition();}
}

2 css 代码

* {padding: 0;margin: 0;
}
body {width: 100vw;height: 100vh;background: #000000;
}
.container {width: 100vw;height: 100vh;position: relative;
}
img {width: 100vw;height: 80vh;
}
svg {position: absolute;top: 0;left: 0;width: 100vw;height: 100vh;
}

3 html 代码

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>$Title$</title><link rel="stylesheet" type="text/css" href="css/base.css"/><script type="text/javascript" src="js/d3.v4.js"></script><script type="text/javascript" src="js/base.js"></script>
</head>
<body><div class="container"><img src="img/bg.jpg"></div>
<script>
var firework = new Firework();
firework.start()
</script>
</body>
</html>

是不是很简单

想预览或者下载demo的人请移步至原文

原文地址 1

 

转载于:https://www.cnblogs.com/vadim-web/p/11505868.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/248135.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里Sentinel控制台源码修改-对接Apollo规则持久化

改造背景 前面我们讲解了如何对接Apollo来持久化限流的规则&#xff0c;对接后可以直接通过Apollo的后台进行规则的修改&#xff0c;推送到各个客户端实时生效。 但还有一个问题就是Sentinel控制台没有对接Apollo&#xff0c;Sentinel控制台本来就可以修改限流的规则&#xff0…

第八节:EF Core连接MySql和Sqlite数据库

。。。 转载于:https://www.cnblogs.com/yaopengfei/p/11507557.html

Flask--WebSocket

flask websocket websocket原理 Socket&#xff1a; FTP - 文件服务 Django Flask Http - TCP: 1.一次请求 一次响应 断开 2.客户端永远处于主动状态 3.服务器永远处于被动状态 4.Http无状态 - 在服务器不保存客户端的信息 5.服务器无法主动找到客户端 1.轮询 客户端向服务器…

jQuery第一天

课程回顾&#xff1a; ​ 正则&#xff1a;匹配字符组合模式; ​ 创建&#xff1a;var reg1 new RegExp(/abc/); var reg2 /abc/; ​ 测试&#xff1a;reg1.test(‘abc’); ​ 特殊字符&#xff1a;元字符 ​ 边界符&#xff1a;^&#xff0c;$ ​ 字符类&#xff1a;[…

Python学习(一)

一、版本&#xff1a; Python2.X /Python3.x 官方宣布2020 年 1 月 1 日&#xff0c; 停止 Python 2 的更新。 Python3.x不兼容Python2.x  二、安装&#xff08;以mac 为例&#xff09; MAC 系统一般都自带有 Python2.x版本 的环境&#xff0c;你也可以在链接 https://www.py…

jQuery—淘宝精品服饰案例

<body><div class"wrapper"><ul id"left"><li><a href"#">女靴</a></li><li><a href"#">雪地靴</a></li><li><a href"#">冬裙</a>&l…

Python机器学习实践:决策树判别汽车金融违约用户

文章发布于公号【数智物语】 &#xff08;ID&#xff1a;decision_engine&#xff09;&#xff0c;关注公号不错过每一篇干货。 转自 | 法纳斯特&#xff08;公众号ID:walker398&#xff09; 作者 | 小F 决策树呈树形结构&#xff0c;是一种基本的回归和分类方法。 决策树模型的…

Python学习(二)语言基础

一、变量与类型 在程序设计中&#xff0c;变量是一种存储数据的载体 整型&#xff1a;Python中可以处理任意大小的整数浮点型&#xff1a;浮点数也就是小数字符串型&#xff1a;字符串是以单引号或双引号括起来的任意文本布尔型&#xff1a;布尔值只有True、False两种值&#x…

jQuery—tab栏切换

<div class"tab"><div class"tab_list"><ul><li class"current">商品介绍</li><li>规格与包装</li><li>售后保障</li><li>商品评价&#xff08;50000&#xff09;</li><l…

MongoDB分组查询,聚合查询,以及复杂查询

准备数据 from pymongo import MongoClient import datetimeclientMongoClient(mongodb://localhost:27017) tableclient[db1][emp]l[ (张飞,male,18,20170301,,7300.33,401,1), #以下是教学部 (张云,male,78,20150302,teacher,1000000.31,401,1), (刘备,male,81,20130305,teac…

Python学习(三)基础

一、函数与模块 定义函数&#xff1a; 函数代码块以 def 关键词开头&#xff0c;后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间&#xff0c;圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以…

操作系统原理之I/O设备管理(第六章上半部分)

一、I/O系统的组成 I/O系统不仅包括各种I/O设备&#xff0c;还包括与设备相连的设备控制器&#xff0c;有些系统还配备了专⻔⽤ 于输⼊/输出控制的专⽤计算机&#xff0c;即通道。此外&#xff0c;I/O系统要通过总线与CPU、内存相连。 I/O系统的结构&#xff1a; I/O设备的分类…

js控制a标签点击事件 触发下载

问题背景&#xff0c;动态获取data把url赋值到a标签的url中&#xff0c;让a标签自动下载 首先想到的应该是$(xxx).click(), 查资料明白&#xff1a;js中的$(...).click()事件只能触发绑定的onClick方法&#xff0c;不能跳转到href。 第二种方法&#xff1a;获取到url之后locat…

操作系统原理之I/O设备管理(第六章下半部分)

五、I/O软件原理 输入输出软件的总体目标是将软件组织成一种层次结构 低层软件用来屏蔽硬件的具体细节高层软件则主要是为用户提供一个简洁、规范的界面设备管理的4个层次&#xff1a; 用户层软件 -》向系统发出I/O请求&#xff0c;显示I/O操作的结果&#xff0c;提供⽤户与设备…

jQuery第二天

课程回顾&#xff1a; ​ jQuery&#xff1a;JavaScript库 ​ 入口函数&#xff1a;$(function () {}); ​ jQuery&#xff1a;jQuery对象&#xff0c;DOM对象 ​ jQuery转成DOM&#xff1a;$(‘元素’)[索引值] ​ DOM转成jQuery&#xff1a;$(DOM对象); ​ 筛选方法&am…

切换Debug/Release编译模式和Archive的作用

&#xfeff;在学这个之前&#xff0c;以为很难&#xff0c;也起不到什么作用&#xff0c;但是等真正运用到工程里面&#xff0c;才发现&#xff0c;这个能帮你省下很多工作量。 1&#xff0c;Debug和Release版本区别&#xff1f; 进行iOS开发&#xff0c;在Xcode调试程序时&am…

Linux 防火墙:Netfilter iptables

一、Netfilter 简介 (1) Netfilter 是 Linux 内置的一种防火墙机制&#xff0c;我们一般也称之为数据包过滤机制&#xff0c;而 iptables 只是操作 netfilter 的一个命令行工具(2) Netfilter 是 Linux CentOS 6 内置的防火墙机制&#xff0c;Firewall 是 Linux CentOS 7 内置的…

无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。...

无法加载 DLL“SQLite.Interop.DLL”: 找不到指定的模块。 (异常来自 HRESULT:0x8007007E)。 在项目里添加 现有项 把SQLite.Interop.DLL文件添加进来&#xff0c;然后点击属性 修改一个属性 把 属性 复制到输出目录 改为 始终复制 然后打开你的项目属性 进入生成的 页面&a…

jQuery第三天

课程回顾&#xff1a; ​ 动画效果&#xff1a;基本动画&#xff0c;滑动动画&#xff0c;淡入淡出&#xff0c;自定义动画效果(animate) ​ 事件切换&#xff1a;hover(over&#xff0c;out); ​ 停止动画&#xff1a;stop ​ 操作属性&#xff1a;prop&#xff08;固有属…

C语言程序设计II—第八周教学

第八周教学总结&#xff08;15/4-21/4&#xff09; 教学内容 本周的教学内容为&#xff1a;   8.4 电码加密 知识点&#xff1a;指针与字符串&#xff0c;重难点&#xff1a;字符指针与字符串的关联和区别&#xff1b;   8.5 任意个整数求和 知识点&#xff1a;动态内存分配…