前端/h5/React D3.js实现根据数据动态更新图形/类似进度实时变化效果
最近接到一个需求,在满足规则下,实现类似这种展示效果,其实就是用图形反映数据(NK,一种干扰值)


运行后,它其实是不断在动的,每格都可能显示灰色或者彩色
这里一共是10个格子,每格代表一个范围边界,说明如下
规则:颜色条設定,共十格 N = 1 - 10,边界值 max value = 2^(N/2) 并取小数点第一位进行四舍五入,得到一组边界值:1/2/3/4/6/8/11/16/23/32,最后一格沒有上限=24~无限大
即是說,数值等于或大于24,到无限大,属于第十級(格)。另外,达到的格显示彩色,未达到的显示灰色
这里要解决2个问题
1.绘制图形
2.动态更新
技术栈:React+d3 v4
<svg className="barChart1" ></svg>
1.绘制图形
print = () => {
const colors = [
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
'#eeeeee',
]
// 定义svg图形宽高,以及柱状图间距
const svgWidth = 7 * colors.length
const svgHeight = 20
const barPadding = 2
// 通过图形计算每个柱状宽度
const barWidth = (svgWidth / colors.length)
const svg = d3.select('.barChart1')
.attr('width', svgWidth)
.attr('height', svgHeight)
const barChart = svg.selectAll('rect')
.data(colors) // 绑定数组
.enter() // 指定选择集的enter部分
.append('rect') // 添加足够数量的矩形
.attr('y', d => 0) // d为数据集每一项的值, 取y坐标
.attr('height', 20) // 设定高度
.attr('width', barWidth - barPadding) // 设定宽度
.attr('transform', (d, i) => {
const translate = [barWidth * i, 0];
return `translate(${translate})`
}) // 实际是计算每一项值的x坐标
.style('fill', (d, i) => d)
}
2.动态更新
update = nkNum => {
const colors = [
'#40cc80',
'#40cc80',
'#40cc80',
'#40cc80',
'#FFFF00',
'#FFFF00',
'#FFFF00',
'#f64b5d',
'#f64b5d',
'#f64b5d',
]
console.log(nkNum, "nkNum")
// NK顏色橫條設定,共十格 N = 1-10,max value = 2^(N/2) round to first digit,1/2/3/4/6/8/11/16/23/32,最後一格沒有上限=24~無限
// 即是說,數值等於或大於24,到無限大,屬第十級
// 没达到的,用#eeeeee表示,达到的用彩色表示
colors.map((t, i) => {
if (nkNum < Math.round(Math.pow(2, (i + 1) / 2))) {
colors[i] = '#eeeeee'
}
})
const svg = d3.select('.barChart1')
const barChart = svg
.selectAll('rect')
.data(colors)
.style('fill', (d, i) => d)
}
值得注意的是,这里我巧妙的利用了循环的索引来计算那一组数 1/2/3/4/6/8/11/16/23/32
Math.round(Math.pow(2, (i + 1) / 2)
3.调用
componentDidMount() {
this.print();
}
componentDidUpdate(prevProps, prevState) {
const {
home: { nkNum },
} = this.props;
const {
home: { nkNum: nkNumOld },
} = prevProps;
if (nkNum !== nkNumOld) {
this.update(nkNum);
}
}
前端/h5/React D3.js实现根据数据动态更新图形/类似进度实时变化效果的更多相关文章
- d3.js 之关联数据:data操作符
数据可视化 在可视化工作中,一个基本出发点是将不同的数值映射到不同的可视化 元素的属性上,使其表现出各自不同的视觉特征. 比如:以数组中的每一个值为直径分别创建一个圆,我们得到三个圆: 在d3中,可视 ...
- 初探原生js根据json数据动态创建table
初探原生js根据json数据动态创建table 小生以实习生的职位进入了一家非纯软件的公司做asp.net开发,大半个月下来发现公司里居然没有前端工程师,这令我很诧异,跟着公司做项目,发现前端后台没有 ...
- Js多国时间动态更新
Js多国时间动态更新 点击下载
- Android零基础入门第44节:ListView数据动态更新
原文:Android零基础入门第44节:ListView数据动态更新 经过前面几期的学习,关于ListView的一些基本用法大概学的差不多了,但是你可能发现了,所有ListView里面要填充的数据都是 ...
- Android零基础入门第67节:RecyclerView数据动态更新
列表的数据往往会跟随业务逻辑不断刷新,所呈现出来的数据需要动态更新,那么RecyclerView是如何动态更新数据的呢? 之前在学习ListView的时候如果数据改变,需要调用notifyDataSe ...
- MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新
MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...
- js将json数据动态生成表格
今天开发中遇到需要展示动态数据的问题, 具体要求是后端传来的json字符串,要在前端页面以table表格的形式展示, 其实没啥难的,就是拼接table标签,纯属体力活,于是自己写了个呆萌,保存起来,以 ...
- highChart数据动态更新
highChart官网上通过ajax加载数据的例子 上面是第一次生成图表的时候使用 我想动态更新,在已经生成的图表上动态更新 chartBS.series[0].setData(sugarListDa ...
- ngx-echarts 图表数据动态更新
使用echarts绘制图表时,初次赋值数据正常展示,重新获取数据之后,图表没有跟着动态刷新.解决的办法是: html文件 <div echarts [options]="chartOp ...
随机推荐
- 2019.10.18模拟赛T3
题目大意: 求$\sum\limits_{i=1}^n\sum\limits_{j=1}^n[lcm(i,j)>n](n\leq 10^{10})$的值. 题解: 这题貌似有n多种做法... 为 ...
- springboot+jpa分库分表项目实例
分库分表场景 关系型数据库本身比较容易成为系统瓶颈,单机存储容量.连接数.处理能力都有限.当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库.优化索引,做很多操作时性能仍下降严 ...
- 实用小工具:VNC的安装
安装xen时,需要使用vnc工具来进行图形化安装,安装好后启动失败,试了很多办法,最终解决. 1.使用yum安装:yum install tigervnc-server tigervnc-server ...
- C++ day01-C++的函数和对象
C++的函数和对象 1.1 1 混合型语言 c++以.cpp为文件扩展名,有且只有一个名为main的主函数,因保留了这个面向过程的主函数,所以被称为混合语言 2 注释方式 . C++的注释方式有两种, ...
- Java正则表达式验证IP,邮箱,电话
引言 java中我们会常用一些判断如IP.电子邮箱.电话号码的是不是合法,那么我们怎么来判断呢,答案就是利用正则表达式来判断了,废话不多说,下面就是上代码. 1:判断是否是正确的IP 1 ...
- win10下mysql5.7的安装与配置
Win10下MySql5.7的安装与配置 下载 官网下载地址 选择免安装版即可, 解压 将下载的压缩包解压到你想要放置MySQL的目录,避免中文空格. 示例:D:\devtools\mysql-5.7 ...
- HikariCP监控指标介绍和应用
概述 HikariCP提供了一些监控指标,他的监控指标都是基于MicroMeter提供出来的,然后支持Prometheus和Dropwizard.本次我们将讨论一下HikariCp的监控指标有哪些,为 ...
- PLC与外接按钮开关接线方法图解
一个电机控制电路如图1所示,电路中使用常开按钮启动电机,用常闭按钮停止电机运行,图1中KM是控制电机电源的继电器.这样的电路若是使用PLC时的外接线图如图2所示.同时为使PLC运行,在PLC中输入由图 ...
- MVC模式和Spring MVC初识
概述 传统的Model1和Model2 在Model1的模式下,整个Web应用几乎全部是由JSP页面组成,接受和处理用户请求,并对请求处理后直接做出响应:JSP身兼View和Controller两个角 ...
- C++ static静态成员
01 基本概念 静态成员:在定义前面加了static关键词的成员. class A { public: A(int a, int b):m_a(a),m_b(b) { num += m_a + m_b ...