D3.js 动态数据刷新视图详解
来源:互联网 发布:淘宝联盟app推广教程 编辑:程序博客网 时间:2024/05/18 03:51
在官网有着丰富demo的基础上,使用d3绘制一副静态图表并不是难事。但我们更多的需求是:根据用户操作动态获取数据库中数据,进而刷新视图。
最生硬的方法:删除element,重新绘制;
d3.select('#svgID').remove(); //删除整个SVGd3.select('#svgID') .selectAll('*') .remove(); //清空SVG中的内容
此方法的确可以做到刷新视图的效果。
优点:快准狠!
缺点:
1. 不能实现友好的动画切换效果
2. 不能保留之前用户操作的状态
正确打开方式:利用enter/exit更新视图
先理解enter/exit 二者的作用
如上图所示,简而言之,enter()是数据超出部分,exit()是图形多余部分。
值得注意的是,var div = d3.selectAll('div');
其中div是当前存在的div。
所以更新步骤为:
- 对已存在的div我们要做的是update操作。
- 对空缺的enter()部分做补充操作。
- 对多余的exit()部分执行
.remove()
。 - 对更改的动作添加动画效果,使刷新更酷炫!
ps: update操作是指根据数据刷新视图中的图形以及文字。
问题1:如果是从DATA(数组)中删除数据,其他数据不变,那么是否需要刷新操作。
问题同:在删除数据的时候,为什么界面中的图形在“乱跑”o(╯□╰)o。
解答:必须要!下文介绍一下d3的data()
#正确理解d3.js中.data()
,数据与视图绑定原理。
d3.js中的.data()
是元素集合与数据集合的映射。如下图所示:
我们可以看到图中的div2此时对应的数据应该是data3,视图与数据不一致,所以需要更新视图。
假设我们做的是如下代码的数据更新
var data = [1,2,3,4];var div = d3.selectAll('div').data(data);div.enter() .append('div') .text(function(d){return d;});
//删除2var newData = [1,3,4]div = d3.selectAll('div').data(newData);//删除多余元素div.exit().remove();
可以发现元素被删除的不是我们所期望被删除的元素。我们删除数据2的时候,使用exit()删除的元素却是队列的最后一个元素。
所以建议将刷新视图封装为方法,方便随时调用。
0 0
- D3.js 动态数据刷新视图详解
- D3.js--动态树
- D3.js 动态散点图
- d3.js d3.scale.ordinal() --详解 rangeBands
- d3.js制作动态图表
- d3.js 实时刷新折线图
- 数据可视化与D3.js
- 一.d3.js 数据可视化
- d3.js检索mysql数据
- d3.js之数据绑定
- 了解D3.js-数据可视化
- 【 D3.js 选择集与数据详解 — 1 】 使用datum()绑定数据
- 【 D3.js 选择集与数据详解 — 2 】 使用data()绑定数据
- 【 D3.js 选择集与数据详解 — 3 】 绑定数据的顺序
- 【D3.JS数据可视化实战记录】绘制动态状态变化趋势图
- D3.js 数据可视化学习笔记——Hello D3!
- 【d3.js教程03】动态初探索
- d3.js——绘制动态中国地图
- 增强现实贺卡项目展示
- 微信颤抖了,马云的又一个反人类的社交梦来了
- 在html中调用QQ,MSN,旺旺,Skype,Email的方法
- 一代狙神是Johnny.R
- 排序算法-选择排序
- D3.js 动态数据刷新视图详解
- leetcode-- Reverse Integer
- Matlab保存图像过程中遇到的问题和一些解决办法
- iOS9 class dump header
- 【数据库】sql解释执行顺序
- python解析xml文件
- java中线程安全提现在两个方面
- 2016,我们继续前行
- 一个表图的网站, KPI