多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
## 第一段d3代码 ``` <script src="/static/js/d3.v5.min.js" charset="utf-8"></script> <script type="text/javascript"> d3.select('body').append('p').text('hello world!'); </script> ``` 运行后,Web审查器里面会多出一行: ``` <p>hello world!</p> ``` 下面对这段代码进行说明: ``` d3 //返回D3对象的引用 .select('body') //返回DOM中与之匹配的第一个元素的引用,参数是CSS选择符 .append('p') //在body元素的末尾新建一个p元素 .text('hello world!') 插入当前选集之间 ; //分号,一行代码结束 </script> ``` ## 绑定数据 数据可以是多种多样的。如下 ``` var dataset = [1, 1, 2, 3, 5, 8, 13, 21]; ``` 也可以是 CSV 格式: year month average 2021 3 10.1 2021 4 11.2 2022 5 12.1 ``` d3.csv("dataset.csv", d => { return { date: new Date(+d.year, (+d.month - 1)), average: parseFloat(d.average) }; }).then(function (d) { //todo }); ``` 上面的代码把year和month合并起来,并转换成日期(date)格式。 也可以是 JSON 格式: ``` d3.json("dataset.json", d => { return { date: new Date(+d.year, (+d.month - 1)), average: parseFloat(d.average) }; }).then(function (d) { //todo }); ``` ## 动态生成的段落 ``` var dataset = [1, 1, 2, 3, 5, 8, 13, 21]; d3.select('body').selectAll('p').data(dataset).enter().append('p').text('Hello world!'); ``` 看看生成的代码: ``` <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> <p>Hello world!</p> ``` 代码解释: ``` var dataset = [1, 1, 2, 3, 5, 8, 13, 21]; d3 .select('body') .selectAll('p') //操作之前要选择,无论是否存在 .data(dataset) //此后的方法都将执行多次 .enter() //创建足够数量的绑定数据的元素,然后返回引用 .append('p') //a取得enter()创建的占位符,并把一个p元素附加到响应的DOM中 .text('Hello world!'); //插入文本 ``` 试着把最后的text方法里面的文本给成下面的看看效果: ``` d3.select('body').selectAll('p').data(dataset).enter().append('p').text((d, i) => d + '|' + 'Hello world!' + '|' + i); ``` 浏览器上的显示如下: ``` 1|Hello world!|0 1|Hello world!|1 2|Hello world!|2 3|Hello world!|3 5|Hello world!|4 8|Hello world!|5 13|Hello world!|6 21|Hello world!|7 ``` ## 添加样式 在之前的操作链后面接着写: ``` var dataset = [1, 1, 2, 3, 5, 8, 13, 21]; d3.select('body').selectAll('p').data(dataset).enter().append('p').text((d, i) => d + '|' + 'Hello world!' + '|' + i).style('color', d => { return d > 10 ? 'red' : 'grey' }); ``` 最后两行会用红色显示。 style 方法用来设置选集的HTML属性,直接给元素添加CSS样式。另外还有attr方法给元素增加类,设置DOM属性的值。 ``` .attr('class', 'bar') ``` 另外classed方法可以快速的添加和删除元素的类。 ``` .classed('bar', true) //添加 .classed('bar', false) //删除 ```