react+d3.js (v3) 认识选择集和如何绘制一个矢量图

时间:2022-09-17 06:52:41

首先需要下载安装d3.js  :  yarn add d3 

然后在组建中引入 :  import * as d3 from 'd3' 

然后定义一个方法,在componentDidMount()这个钩子函数中调用即可。

 

然后如何绘制一个矢量图 : 

1 render() { 2         return ( 3             <div id="drawSVG" ></div>
4  ); 5     }

先定义一个id为drawSVG的div标签。然后写一个方法,来在这个div中绘制矢量图。

 1   oneMethod() { //定义一个方法
 2         var width = 400;    //定义svg的宽度
 3         var height = 400;   //定义svg的高度
 4         var svg = d3.select("#drawSVG") //选择容器
 5             .append('svg')  //将svg放入容器里面
 6             .attr("width", width)   //设置svg的宽度
 7             .attr("height", height) //设置svg的高度
 8             .style("background-color", "red")    //设置svg的背景颜色
 9             .style("border-radius", "50%")   //设置svg的圆角
10 
11 
12         svg.append("circle")    //在<svg>中添加<circle>标签
13             .attr("cx", "200px")    //设置圆形的x坐标
14             .attr("cy", "200px")    //设置圆形的y坐标
15             .attr("r", "100px")     //设置圆形的半径
16             .attr("fill", "yellow")     //设置圆形的填充色
17     }

然后在componentDidMount()中调用。

1  componentDidMount() {
2         this.oneMethod()
3     }

最后来看看会显示出什么样的矢量图行呢。。。

react+d3.js (v3) 认识选择集和如何绘制一个矢量图

 

全部代码 :

 

 1 import React, { Component } from 'react';  2 import * as d3 from 'd3';  3 class Demo extends Component {  4  constructor(props) {  5  super(props);  6         this.state = {}  7  }  8 
 9  componentDidMount() { 10         this.oneMethod() 11  } 12 
13     oneMethod() {   //定义一个方法
14         var width = 400;    //定义svg的宽度
15         var height = 400;   //定义svg的高度
16         var svg = d3.select("#drawSVG") //选择容器
17             .append('svg')  //将svg放入容器里面
18             .attr("width", width)   //设置svg的宽度
19             .attr("height", height) //设置svg的高度
20             .style("background-color", "red")    //设置svg的背景颜色
21             .style("border-radius", "50%")   //设置svg的圆角
22 
23 
24         svg.append("circle")    //在<svg>中添加<circle>标签
25             .attr("cx", "200px")    //设置圆形的x坐标
26             .attr("cy", "200px")    //设置圆形的y坐标
27             .attr("r", "100px")     //设置圆形的半径
28             .attr("fill", "yellow")     //设置圆形的填充色
29  } 30     
31 
32     
33 
34 
35  render() { 36         return ( 37             <div id="drawSVG" ></div>
38  ); 39  } 40 } 41 
42 export default Demo;

 

什么是选择集 : 

  d3.select和d3.selectAll返回的对象称为选择集(selection), 添加、删除、设定网页中的元素, 都得使用选择集.

详解select与selectAll:
1  selsect : 返回匹配选择器的第一个元素 2             d3.select("body")   //选择body元素
3             d3.select("#drawSVG") //选择id为drawSVG的元素
4             d3.select(".xxx")   //选择class为xxx的第一个元素
5 
6  selectAll: 返回匹配选择器的所有元素 7             d3.selectAll("p")  //选择所有的p元素
8             d3.selectAll(".xxx")  //选择class为xxx的所有元素
9             d3.selectAll("ul li")  //选择ul中所有的li元素  

 

 查看选择集的状态有三个函数 : 

 

1 查看选择集的状态,有三个函数 : 2  selection.empty() : 如果选择集为空,则返回true。如果不为空,返回false; 3  selection.node() : 返回第一个非空元素,如果选择集为空,返回null; 4             selection.size()  : 返回选择集中的元素个数;

 

 举例子 : 

 

 1 render() {  2         return (  3             <div id="drawSVG" >
 4                 <p>窗前明月光</p>
 5                 <p>疑是地上霜</p>
 6                 <p>举头望明月</p>
 7                 <p>低头思故乡</p>
 8             </div>
 9  ); 10     }

 

 

1  oneMethodAgain(){ 2         var paragraphs = d3.selectAll("p") 3         console.log(paragraphs.empty())   //false
4         console.log(paragraphs.node())    //<p>窗前明月光</p>
5         console.log(paragraphs.size())    //4
6     }

 

以上就是查看选择集的状态。

 

对于选择集如何添加、插入和删除元素 :

 

1  对于选择集 , 添加、插入和删除元素  : 
2  selection.append(name) : 3  在选择集的末尾添加一个元素,name为元素名称。 4  selection.insert(name,[,before]) : 5  在选择集中的指定元素之前插入一个元素,name是被插入的元素名称,before是css选择器名称。 6  selection.remove() : 7 删除选择集中的元素。

 

 举例子 : 

 

 1  render() {  2         return (  3             <div id="drawSVG" >
 4                 <p>窗前明月光</p>
 5                 <p>疑是地上霜</p>
 6                 <p id="plane" >举头望明月</p>
 7                 <p>低头思故乡</p>
 8             </div>
 9  ); 10     }

 

 还是这些内容来举例 。

 1 oneMethodAgains() {  2         var body = d3.select("#drawSVG")  3 
 4 
 5         //在id为drawSVG的div中的最末尾添加一个p元素
 6         body.append("p")  7             .text("静夜思")//内容
 8             .style("color", "red")//字体颜色
 9 
10         //在id为plane的p元素前添加一个p元素
11         body.insert("p", "#plane") 12             .text("~~~~") //内容
13             .style("color", "yellow") //字体颜色
14 
15         //删除id为plane的元素
16         var plane = d3.select("#plane") 17 
18  plane.remove() 19 
20     }

 

显示效果分别为 :

react+d3.js (v3) 认识选择集和如何绘制一个矢量图react+d3.js (v3) 认识选择集和如何绘制一个矢量图react+d3.js (v3) 认识选择集和如何绘制一个矢量图

 

如何设定和获取属性 : 

  

 1 设定和获取属性 :  2  selection.attr(name[,value]) :  3  设置或获取选择集的属性,name是属性名称,value是属性值。如果省略value,则返回当前的属性值。  4  selection.classed(name[,value]) :  5  设定或获取选择集的css类,name是类名,value是一个布尔值。表示是否开启。  6                     d3.select("p")  7                         .classed("xxx",true) //开启xxx类
 8                         .classed("sss",false) //不开启sss类
 9  selection.style(name[,value[,priority]]) : 10  设定或获取选择集的样式,name是样式名,value是样式值; 11  selection.property(name[,value]) : 12  设定或获取选择集的属性,name是属性名,value是属性值。如果省略value,则返回属性名。 13  有部分属性不能用attr()设定和获取,最经典的是文本输入框的value属性,此属性不会再标签中显示。 14  selection.text([value]) : 15  设定或获取选择集的文本内容,如果省略value,则返回当前的文本内容。文本内容相当于DOM的innerText,不包括元素内部的标签。 16  selection.html([value]) : 17                     设定或获取选择集的内部HTML内容,相当于DOM的innerHTML。包括元素内部的标签。

 

 

这里就不给大家举例子了,大家有时间可以自己试一下。

希望可以帮到大家~ 谢谢。