一、简介D3.js是什么

  1. 一款基于JavaScript的函数库
  2. 借助HTML、SVG和CSS等实现可视化
  3. 组件强大,通过数据驱动的方式来操作DOM

    D3.js堪称SVG中的jQuery

二、vue引入D3.js

1. 安装d3

  1. npm install d3 --save-dev
  2. 或者
  3. cnpm install d3 --save-dev

2. 引入d3

  1. <template>
  2. <div></div>
  3. </template>
  4. <script>
  5. import * as d3 from 'd3'; //引入d3
  6. export default {
  7. data() {
  8. return {}
  9. },
  10. }
  11. </script>

三、绘制线条

  1. drawPath(pathArr) {
  2. var body = d3.select('body'); //选择文档中的body元素
  3. var svg = body.select('svg'); //选择body中的svg元素
  4. var Gen = d3.line(); //线条
  5. var pathOfLine; //path的坐标
  6. // 循环出pathArr每根线条的坐标
  7. pathArr.forEach(item => {
  8. // 将坐标点转化为path所需要的格式
  9. pathOfLine = Gen(item);
  10. svg
  11. .append('path') //增加<path>
  12. .attr('d', pathOfLine) //d属性为path所需坐标点(具体字母对应如下所示)
  13. .attr('stroke', '#0F4E8A') //线条颜色
  14. .attr('stroke-width', '2') //线条粗细
  15. .attr('fill', 'transparent') //填充颜色
  16. .attr('class', 'path'); //类型为'path'
  17. });
  18. },

pathArr的样例数据格式

  1. this.pathArr = [
  2. [
  3. [0, 100],
  4. [500, 100],
  5. [500, 200],
  6. ],
  7. [
  8. [0, 200],
  9. [500, 100],
  10. [500, 200],
  11. ],
  12. ];

pathOfLine的样例数据格式

  1. M1,3 L5,10 L10,0

四、SVG中d属性详解

标准的指令字母

M moveto 移动到 (x y)+
Z closepath 关闭路径 (none)
L lineto 画线到 (x y)+
H horizontal lineto 水平线到 x+
V vertical lineto 垂直线到 y+
C curveto 三次贝塞尔曲线到 (x1 y1 x2 y2 x y)+
S smooth curveto 光滑三次贝塞尔曲线到 (x2 y2 x y)+
Q quadratic Bézier curveto 二次贝塞尔曲线到 (x1 y1 x y)+
T smooth quadratic Bézier curveto 光滑二次贝塞尔曲线到 (x y)+
A elliptical arc 椭圆弧 (rx ry x-axis-rotation large-arc-flag sweep-flag x y)+
R Catmull-Rom curveto
* Catmull-Rom曲线
x1 y1 (x y)+

基础指令

M 移动到(moveTo) x,y 路径起始点坐标
Z 闭合路径(closepath) 将路径的开始和结束点用直线连接
L 直线(lineTo) x,y 当前节点到指定(x,y)节点,直线连接
H 水平直线 x 保持当前点的y坐标不变,x轴移动到x, 形成水平线
V 垂直直线 y 保持当前点的x坐标不变,y轴移动到y, 形成垂直线