• canvas画布绘制线条样式:粗细,圆角,拐角等


    线条的粗线

    lineWidth是改变线条的粗线的,默认是一个像素:

    1. context.beginPath();
    2. context.moveTo(20, 50);
    3. context.lineTo(280, 50);
    4. context.lineWidth=1;
    5. context.stroke();
    6. // 如果这里没有beginPath 你猜猜这三条线的宽度分别是多少
    7. context.beginPath();
    8. context.moveTo(20, 75);
    9. context.lineTo(280, 75);
    10. context.lineWidth=5;
    11. context.stroke();
    12. context.beginPath();
    13. context.moveTo(20, 100);
    14. context.lineTo(280, 100);
    15. context.lineWidth=10;
    16. context.stroke();

    如果上面没有beginPath那么后面线描边的时候也会把之前的绘制一下,那么三条先最终的宽度就都是10了。
    lineWidth也可用于矩形和圆弧上,只要画线的地方都可以,如下:

    1. context.beginPath();
    2. context.rect(20, 20, 60, 60);
    3. context.lineWidth=20;
    4. context.stroke();

    我们可以看到改变lineWidth,矩形的大小也变了,目前的宽度是矩形的宽度 + lineWidth(左边多了一半,右边也多了一半)。

    线帽样式

    线帽样式由lineCap来定义,它有三个值butt | round | square分别对应无线帽 | 圆角 | 方形,默认是butt(无线帽),如下:

    1. context.beginPath();
    2. context.moveTo(20, 50);
    3. context.lineTo(280, 50);
    4. context.lineWidth=10;
    5. context.lineCap='butt';// 无线帽 默认值
    6. context.stroke();
    7. context.beginPath();
    8. context.moveTo(20, 75);
    9. context.lineTo(280, 75);
    10. context.lineWidth=10;
    11. context.lineCap='round'; // 圆角
    12. context.stroke();
    13. context.beginPath();
    14. context.moveTo(20, 100);
    15. context.lineTo(280, 100);
    16. context.lineWidth=10;
    17. context.lineCap='square'; // 方形
    18. context.stroke();

    线帽样式对于越宽的线条效果越明显,所以上面线宽给了一个10。同时可以看到线帽给的不一样,宽度其实也是有点不同的
    线帽只是对线条2端点的样式做了处理,如果是线条中间的那么就不生效了:

    1. context.beginPath();
    2. context.moveTo(100, 50);
    3. context.lineTo(200, 50);
    4. context.lineTo(200, 100);
    5. context.lineWidth=20;
    6. context.lineCap='round';
    7. context.stroke();

     

    如果要改变中间的样子那该怎么办?那么就是用lineJoin

    线条交界处样式

    线条交界处样式由lineJoin来决定,它有三个值miter | bevel | round分别是尖角 | 斜角 | 圆角,默认是miter。斜角时如下:

    1. context.beginPath();
    2. context.moveTo(100, 50);
    3. context.lineTo(200, 50);
    4. context.lineTo(200, 100);
    5. context.lineWidth=20;
    6. context.lineCap='round';
    7. context.lineJoin='bevel';
    8. context.stroke();

     

    如果context.lineJoin='bevel';改为context.lineJoin='round';时,结果如下: 

    绘制虚线

    虚线是由细小的实线和空白组成,绘制虚线使用setLineDash方法,它接收一个数组作为参数,数组是实线和空白的长度:

    1. context.beginPath();
    2. context.arc(150, 75, 60, Math.PI / 180 * 0, Math.PI / 180 * 360);
    3. // 实线和空白比例是10px : 5px
    4. context.setLineDash([10,5]);
    5. context.stroke();

     

    值的一提的是,如果不传数组的话,那么就会报错;传一个空数组的话,会按照实线去绘制;如果数组只有一个元素的话,那么就是实线和空白依次按这个元素大小来绘制;如果多个元素的时候就是交替循环来间隔。 

     

  • 相关阅读:
    Ubuntu系统自动清理系统内存脚本和使用方法
    基于ssm的图书商城
    Numpy 逻辑函数和位处理函数
    阿里云/腾讯云国际站代理:腾讯云国际站开户购买EdgeOne发布,安全加速一体化方案获业内认可
    外贸公司职业保密协议
    理解subplots, ax.imshow, FuncAnimation
    买卖股票的最佳时机(系列)
    深耕语音输入12载:讯飞输入法走向万物智能新世界
    python语句如何换行和字符串太长如何换行
    【广州华锐互动】全屋智能家电VR虚拟仿真演示系统
  • 原文地址:https://blog.csdn.net/weixin_44786530/article/details/133922874