从0开始的Canvas生活(二)

77 阅读2分钟

Canvas.png

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 2 天,点击查看活动详情

上一篇文章写到了fillStyle属性,接下来我们了解一下与fillStyle相类似的strokeStyle属性。


strokeStyle(行程样式)

strokeStyle与fillStyle不同的是其用arc方法是来画圆,设置图形轮廓的颜色。

<canvas id="canvas"></canvas>
    <script>
        const canvas = document.getElementById("canvas")
        const ctx = canvas.getContext("2d")
        ctx.lineWidth=2;
        ctx.strokeStyle="orange";
        ctx.beginPath();
        // 绘制
        ctx.arc(75, 75, 50, 0, Math.PI * 2, true);
        ctx.moveTo(110, 75);
        // 口 (顺时针)
        ctx.arc(75, 75, 35, 0, Math.PI, false);
        ctx.moveTo(65, 65);
        // 左眼
        ctx.arc(60, 65, 5, 0, Math.PI * 2, true);
        ctx.moveTo(95, 65);
        // 右眼
        ctx.arc(90, 65, 5, 0, Math.PI * 2, true);
        ctx.stroke();
    </script>

如上述代码是设计一个橙色的😊,页面显示如下:

2023-02-02 16 59 33.png

在这里 strokeStyle="orange" 便是设计笑脸的轮廓颜色;用 arc()方法 来绘制圆形。

详解:

  1. ctx.lineWidth=2;
    这行代码是控制笑脸线条轮廓的粗细。
  2. beginPath()
    moveTo()
    stroke()
    以上都是绘制路径时所需要的函数。

绘制路径

  1. 首先,你需要创建路径起始点。
  2. 然后你使用画图命令去画出路径。
  3. 之后你把路径封闭。
  4. 一旦路径生成,你就能通过描边或填充路径区域来渲染图形。
需要用到的函数

beginPath()

新建一条路径,生成之后,图形绘制命令被指向到路径上生成路径

closePath()

闭合路径之后图形绘制命令又重新指向到上下文中

stroke()

通过线条来绘制图形轮廓

fill()

通过填充路径的内容区域生成实心的图形

moveTo(x,y)

将笔触移动到指定的坐标 x 以及 y 上

lineTo(x,y)

绘制一条从当前位置到指定 x 以及 y 位置的直线

arc(x, y, radius, startAngle, endAngle, anticlockwise)

画一个以(x,y)为圆心的以 radius 为半径的圆弧(圆),从 startAngle 开始到 endAngle 结束,按照 anticlockwise 给定的方向(默认为顺时针)来生成

!!! 该方法有六个参数:x,y为绘制圆弧所在圆上的圆心坐标。radius为半径。startAngle以及endAngle参数用弧度定义了开始以及结束的弧度。这些都是以 x 轴为基准。参数anticlockwise为一个布尔值。为 true 时,是逆时针方向,否则顺时针方向。

案例

<body onload="draw()">
    <canvas id="canvas"></canvas>
    <script>
        function draw() {
            var canvas = document.getElementById('canvas');
            if (canvas.getContext) {
                var ctx = canvas.getContext('2d');

                // 填充三角形
                ctx.beginPath();
                ctx.moveTo(25, 25);
                ctx.lineTo(105, 25);
                ctx.lineTo(25, 105);
                ctx.fill();

                // 描边三角形
                ctx.beginPath();
                ctx.moveTo(125, 125);
                ctx.lineTo(125, 45);
                ctx.lineTo(45, 125);
                ctx.closePath();
                ctx.stroke();
            }
        }

    </script>
</body>

页面输出如下:
2023-02-02 21 36 31.png

上述案例简单的展示了各函数的详细作用以及 fill() 函数 和 stroke() 函数的对比