数据可视化基础 - canvas进阶篇(四):线条样式

189 阅读3分钟

内容整理承接:

《数据可视化基础 - canvas进阶篇(三):绘制环境》

3.8 了解:线条样式(了解)

  • lineCap 设置或返回线条的结束端点(线头、线冒)样式

    • butt : 默认。向线条的每个末端添加平直的边缘。

    • round : 向线条的每个末端添加圆形线帽。

    • square: 向线条的每个末端添加正方形线帽。

  • lineJoin 设置或返回两条线相交时,所创建的拐角类型

    • bevel: 创建斜角。

    • round: 创建圆角。

    • miter: 默认。创建尖角

  • lineWidth 设置或返回当前的线条宽度

  • miterLimit 设置或返回最大斜接长度

    • 意思: 斜接 英 ['maɪtə]
    • 斜接长度指的是在两条线交汇处内角和外角之间的距离。

一般用默认值:10就可以了。除非需要特别长的尖角时,使用此属

3.9 了解贝塞尔曲线(知道有)

3.9.1 绘制一条二次方曲线。

  • 微软的画图板中的曲线的颜色。

  • quadratic:二次方的意思, 英 [kwɒ'drætɪk] 美 [kwɑ'drætɪk]

  • Curve:曲线的意思, 英 [kɜːv] 美 [kɝv]

  • 语法: context.quadraticCurveTo(cpx,cpy,x,y);

  • 参数:

    • cpx: 贝塞尔控制点的 x 坐标
    • cpy: 贝塞尔控制点的 y 坐标
    • x : 结束点的 x 坐标
    • y : 结束点的 y 坐标

1  ctx.beginPath();
2     ctx.moveTo(20,20);
3     //绘制2次方曲线,贝赛尔曲线
4     ctx.quadraticCurveTo(20,100,200,20);
5     ctx.stroke();

3.9.2 绘制贝塞尔曲线(知道有)

  • 绘制一条三次贝塞尔曲线

  • 语法:context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);

  • 提示:三次贝塞尔曲线需要三个点。前两个点是用于三次贝塞尔计算中的控制点,第三个点是曲线的结束点。曲线的开始点是当前路径中最后一个点。如果路径不存在,那么请使用beginPath()moveTo() 方法来定义开始点。

  • 参数说明:

    • cp1x: 第一个贝塞尔控制点的 x 坐标
    • cp1y: 第一个贝塞尔控制点的 y 坐标
    • cp2x: 第二个贝塞尔控制点的 x 坐标
    • cp2y: 第二个贝塞尔控制点的 y 坐标
    • x: 结束点的 x 坐标
    • y: 结束点的 y 坐标

 1 //绘制复杂的贝塞尔曲线
 2 ctx.beginPath();
 3 ctx.moveTo(400,400);
 4 //参数说明:context.bezierCurveTo(cp1x,cp1y,cp2x,cp2y,x,y);
 5 // cp1x: 第一个贝塞尔控制点的 x 坐标
 6 // cp1y: 第一个贝塞尔控制点的 y 坐标
 7 // cp2x: 第二个贝塞尔控制点的 x 坐标
 8 // cp2y: 第二个贝塞尔控制点的 y 坐标
 9 // x: 结束点的 x 坐标
10 // y: 结束点的 y 坐标
11 ctx.bezierCurveTo(500, 200, 600, 600, 700, 300);
12 ctx.stroke();  

复制

3.10了解创建两条切线的弧(知道有)

  • 在画布上创建介于当前起点和两个点形成的夹角的切线之间的弧

  • 语法: context.arcTo(x1,y1,x2,y2,r) ; //类比:css3中的圆角。

  • 例如: ctx.arcTo(240, 100, 240, 110, 40);

  • 参数:

    • x1: 弧的端点1的 x 坐标
    • y1: 弧的端点1的 y 坐标
    • x2: 弧的端点2(终点)的 x 坐标
    • y2: 弧的端点2(终点)的 y 坐标
    • r : 弧的半径
1 //代码demo:
2 ctx.beginPath();
3 ctx.moveTo(100,100);
4 ctx.lineTo(200,100);
5 //context.arcTo(x1,y1,x2,y2,r); //类比:css3中的圆角。
6 ctx.arcTo(240, 100, 240, 110, 40);
7 ctx.lineTo(240, 300);
8 ctx.stroke();   

3.11了解判断点是否在路径中(知道有)

context.isPointInPath(x,y);

//isPointInPath() 方法返回 true,如果指定的点位于当前路径中;否则返回 false。

//判断x,y坐标的点是否在当前的路径中。

3.12了解文本宽度计算(知道有)

context.measureText(text).width;