【D3.js 学习总结】2、D3数据绑定

简介: 我们从Hello World示例代码来看D3如何做数据绑定 ``` var demo = d3.select('body') .selectAll('p') .data(data, function (d) { return d; }); ``` 这段代码执行了以下步骤: 1、通过 d3.sele

我们从Hello World示例代码来看D3如何做数据绑定

    var demo = d3.select('body')
        .selectAll('p')
        .data(data, function (d) {
          return d;
        });

这段代码执行了以下步骤:

1、通过 d3.select('body’) 将页面上的body标签选中;
2、selectAll('p’) 返回了一个p标签的空选集(selection);
3、空选集通过 data() 方法将数据和p标签绑定,并产生三个虚拟的子集: enter, update, exit,其中enter()包含了待绑定数据及相应的p标签的占位符,update()包含了已绑定数据的p标签, exit ()包含了待移除数据p标签,我们通过一张图来形象的理解 enter, update , exit;

enter数据

    demo.enter()
        .append('p')
        .style('width', 0+'px')
        .style('background', '#eee')

这段代码为 enter() 中的占位符创建p标签,绑定相应的数据,并初始化样式;

update数据

    demo
        .text(function (d) {
          return d;
        })
        .transition()
        .duration(1000)
        .style('width', function (d) {
          return d+'px';
        })

这段代码为 update() 中的p标签写入数字文本,并绑定transition动画,使它以动画形式展现;
是不是没看到 update() 的影子,没关系,update()会被隐式调用,之所以前面要提到 update 是为了更好的理解这三种状态;

exit数据

    demo.exit()
        .transition()
        .duration(1000)
        .style('width', 0+'px')
        .remove();

这段代码为 exit() 中的p标签绑定transition动画,使它以动画形式移除;

D3的这种数据绑定方式的设计,使enter()里只是专心处理新增的元素,而update 和 exit分别专注于处理更新和待删除部分,这意味着你不用把所有DOM元素删了重绘,因此得以轻松应对实时变化的数据,甚至支持一些交互(如拖动)与渐变的效果!

目录
相关文章
|
28天前
|
JavaScript 前端开发 开发者
VUE 开发——Node.js学习(一)
VUE 开发——Node.js学习(一)
47 3
|
19天前
|
JavaScript
js学习--制作猜数字
js学习--制作猜数字
35 4
js学习--制作猜数字
|
19天前
|
JavaScript
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
这篇文章介绍了如何将webpack的配置文件分离成开发环境和生产环境的配置文件,以提高打包效率。
31 1
webpack学习五:webpack的配置文件webpack.config.js分离,分离成开发环境配置文件和生产环境配置文件
|
19天前
|
JavaScript
js学习--制作选项卡
js学习--制作选项卡
33 4
|
19天前
|
JavaScript
js学习--商品列表商品详情
js学习--商品列表商品详情
13 2
|
19天前
|
JavaScript
js学习--九宫格抽奖
js学习--九宫格抽奖
14 2
|
19天前
|
JavaScript
js学习--开屏弹窗
js学习--开屏弹窗
31 1
|
19天前
|
JavaScript
js学习--抽奖
js学习--抽奖
11 1
|
19天前
|
JavaScript
js学习--隔行换色
js学习--隔行换色
26 1
|
18天前
|
JavaScript 前端开发 容器
js之dom学习
js之dom学习
26 0