美文网首页
D3它能提供什么?【上】

D3它能提供什么?【上】

作者: 狂菜飞 | 来源:发表于2018-06-03 17:45 被阅读0次

在上一篇“D3究竟是什么?”中,我们把D3比作画笔,这次我们说说这支画笔能为你提供什么,这也是D3最核心的内容。

能力

在D3的官方说明中已经提到,它主要是为你提供现代浏览器所支持的全部功能,而且不用引入什么专有框架。这些功能其实就是可以使用HTML、SVG和CSS(v4已经可以支持Canvas)来绘制和控制图表,让其更加生动。这些是显而易见的,但往往越简单、越显而易见的东西却越容易被忽视。所以我们现在应该记住,只要我们在使用D3.js,我们就可以使用任何浏览器所支持的功能(HTML、SVG、CSS以及Canvas)来展现我们想要的图表。
换句话说就是D3为我们提供了操作DOM的功能,即增加、修改、删除。这些功能与jQuery十分相似,如果你用过jQuery,那么绝对不会对它陌生。我们在页面中引入D3的js文件(下载地址https://github.com/d3/d3/releases,文章所说内容均为v4版本)后,就可以使用全局变量d3来访问D3的所有内容。下面我们来具体介绍一下比较核心的操作DOM的API。

d3.selection

首先说一下D3里很重要的一个东西,它就是D3的选择--d3.selection。这个选择是个名词(并不是绝对的名词,也可以当“动词”用),你可以把它当成一个类,D3所有操作DOM的API几乎都是它的。它是对DOM元素的一种再包装,可以让你方便的使用其提供的方法进行操作,就好像使用jQuery一样。当我们需要操作DOM时(这也是使用D3最主要的工作内容),首先必须要把我们需要操作的DOM元素“变成”d3.selection对象。方法很简单,只要使用d3.select()d3.selectAll()方法即可。顾名思义,就是需要先让D3选中你要操作的元素。

// 选择第一个符合条件的dom元素
var selection = d3.select(selector);
// 选择所有符合条件的dom元素
var multiSelection = d3.selectAll(selector);

selector:一个css选择器字符串,只要是符合W3C标准的选择器D3都支持。如div表示div元素,.node表示类名中含有node的所有元素,div.node表示类名中含有node的div元素

d3.select()selector参数还可以是一个DOM元素对象,这种使用方式非常有用,在后面的文章中会讲到。这两个方法查找元素的范围是整个document

d3.select()d3.selectAll()返回的结果都是d3.selection对象--即使没有符合条件的元素,也会返回一个空的selection。它们两个的区别之一在上面代码的注释里已经说明了,它们还有一个非常重要的区别,这里先不说,留待下一篇再讲。

d3.selection同样有select()selectAll()方法,它们是在自己的元素中进行查找,比如d3.selectAll('div.node').select(':last-child')

添加

添加元素有两个方法,一个是

  • selection.append()
    d3-append.png
/**
 * 为selection里的每个元素添加指定的元素作为其最后一个子元素,
 * 并返回由新元素组成的新selection.
 */
var newSelection = selection.append(type)

type:可以是字符串,也可以是函数。当它是字符串时,必须是某类元素的名字,如divp等;当它是函数时,这个函数必须返回一个DOM元素实例。

例如我们需要在所有的div中添加一个span元素:

var spanSelection = d3.selectAll('div').append('span');

或者

var spanSelection = d3.selectAll('div').append(function(){ 
    return document.createElement('span')
});

另一个添加元素的方法是

  • selection.insert()
    d3-insert.png
/**
 *  在selection中的每个元素里插入一个新元素,
 *  新元素会放到`before`指定的元素前面
 */
var newSelection = selection.insert(type, [before]);

type:与selection.append()方法的type参数一样
before:一个css选择器,新元素会被插入到匹配它的第一个元素之前
before的默认值是null,当它是nullinsert()的结果与append()一样。

修改

在操作DOM的API中,最常用的是修改DOM的属性--元素标签里可用的属性,以及修改style的内容--即css。

  • selection.attr()
/**
 * 设置或获得属性值
 */
selection.attr(name, [value])

name:属性名
value:属性值,可以是数字、字符串等常量值,也可以是函数,当它是null时删除属性
当指定value时,设置属性值并返回当前selection;当不指定value时,返回selection中第一个元素的属性的当前值。如果value是一个函数,会使用该函数的返回值设置属性。

  • selection.style
/**
 * 设置或获取样式的值
 */
selection.style(name[, value[, priority]])

name:样式的属性名,如positiondisplay
value:样式的值,可以是数字、字符串等常量值,也可以是函数,当它是null时会移除属性--不是设置为空,而是把属性删除掉
priority:优先级,只能是null或字符串importantimportant即表示css规则中的!important

其他修改DOM的方法还有:

  • selection.classed(names[, value]):增加、获取或删除CSS类名
  • selection.text([value]):设置或获取文本内容
    还有其他一些方法,在这里就不一一列出了,大家可以到官方文档(https://github.com/d3/d3/blob/master/API.md)查看。

删除

把DOM元素从document中删除掉,只有一个方法

  • selection.remove()

    从document中删除selection里的所有DOM元素并返回当前selection,这时的selection是空的

小结

今天介绍了如何使用D3操作DOM元素,这是D3中非常基础且核心的内容,而且非常简单易于掌握。下一篇我们会介绍D3最核心的内容--数据驱动。
我在codepen上有一个简单的示例,有兴趣的朋友可以在浏览器中看一下:
https://codepen.io/guofei0723/pen/KqYOwp/left


欢迎大家关注我的微信公众号


var_web

相关文章

  • D3它能提供什么?【上】

    在上一篇“D3究竟是什么?”中,我们把D3比作画笔,这次我们说说这支画笔能为你提供什么,这也是D3最核心的内容。 ...

  • D3它能提供什么?【下】

    通过前两篇的介绍,我们已经了解了D3.js最为核心的东西--使用数据驱动的方式操作DOM元素,并且我们说,只要掌握...

  • Storm Trident 之 Trident API介绍

    Trident是什么 Trident是Storm上的高层次抽象,它能够在提供高吞吐量的能力同时(每秒几百万消息),...

  • d3.js 进阶

    2016-04-14 本篇文章谈谈 d3 的动画、svg 图形生成器以及 d3 提供的 layout 一、动画 1...

  • 五、postman使用

    5.1.1 什么是Postman Postman 提供功能强大的 Web API 和 HTTP 请求的调试,它能...

  • d3.js

    D3是什么? D3: 是Data-Driven Documents(数据驱动文档)的简称。 D3(或D3.js) ...

  • vue中import d3报错

    报错内容如下: github上的解释是: 通过import * as d3 from 'd3',报错已经解决,报错...

  • 熟悉的陌生人,揭开 d3 transition 的面纱

    d3是一个Js库,它是基于Svg来绘图,提供丰富的Api接口,国产的Echarts和HeightChart能提供的...

  • AppStore预览视频AppPreviews制作心得总结

    在去年的WWDC 2014上,苹果为开发者提供了一项新特性——AppPreviews(应用预览视频)。它能够让用户...

  • D3

    D3 是一个很不错的软件, 它能帮你生成和操作带数据的文档。 为此, 要 经历以下几步: • 把数据加载到浏览器的...

网友评论

      本文标题:D3它能提供什么?【上】

      本文链接:https://www.haomeiwen.com/subject/qggjsftx.html