canvas-01

一、canvas绘图步骤:

1.建立canvas画布;

 <canvas id="canvas" width="700" height="700"></canvas>

2.通过canvas画布获取上下文对象,即画笔;

 let canvas = document.querySelector("#canvas");

 const ctx = canvas.getContext("2d");

3.设置画笔颜色;

 ctx.fillStyle = "red";

4.设置图形形状;

ctx.fillRect(100,100,300,200);

5.绘制图形。

二、canvas:画布的坐标系和栅格:

1.坐标系是二维直角坐标系,由x轴和y轴组成;

2.横向x轴,越往右越大;竖向y轴,越往下越大;

3.以像素的宽高为基底;

4.下图的四个格子,就是栅格(一堆像素):每一个格子就是一个像素,像素具有rgba数据;

5.像素的数量等于canvas画布的宽度乘以高度。

栅格

三、矩形的绘制方法:

填充矩形方法:fillRect(x,y,w,h)

描边矩形方法:strokeRect(x,y,w,h)

清理矩形方法:clearRect(x,y,w,h)

3种方法

描边矩形:(居中描边)

       let canvas = document.querySelector("#canvas");

        /**获取画笔*/

        const ctx = canvas.getContext("2d"); //2维

        ctx.fillStyle = "gray";

        //描边宽度

        ctx.lineWidth = 20;

        // 描边色

        ctx.strokeStyle = "pink";

        ctx.fillRect(50,50,300,200);

        ctx.strokeRect(50,50,300,200);

事例

清理矩形:

       // 清理矩形(不会清理全部矩形,只会清除内部矩形,外部描边不会被清除)

        ctx.clearRect(50,50,300,200);

事例

四、绘制路径的步骤:

1.开始建立路径:beginPath();

2.向路径集合中添加子路径

[

    moveTo(x,y);形状;closePath()可选,

    moveTo(x,y);形状;closePath()可选,

    moveTo(x,y);形状;closePath()可选,

]

3.显示路径:填充fill() , 描边stroke() 

五、子路径的形状:

1.直线:lineTo(x,y);lineTo(x,y);lineTo(x,y);

        let canvas = document.querySelector("#canvas");

        const ctx = canvas.getContext("2d"); 

        ctx.beginPath();   //开始建立路径

        ctx.moveTo(50,100);  //向路径集合中添加子路径

        ctx.lineTo(200,100);

        ctx.lineTo(250,50);  // 追加lineTo 变成折线

        ctx.closePath(); //路径闭合

        ctx.stroke(); //描边

直线

2.圆弧:arc(x,y,半径,开始弧度,结束弧度,方向)

        let canvas = document.querySelector("#canvas");

        const ctx = canvas.getContext("2d"); 

        ctx.lineWidth = 4;

        ctx.beginPath();

        // 360度 = Math.PI*2 ; 1度 = Math.PI*2 / 360度 

        // ctx.arc(100,100,50,0,Math.PI*3/2);

        ctx.arc(100,100,50,0,Math.PI*2);

        ctx.stroke();

圆弧

3.切线圆弧:arcTo(x1,y1,x2,y2,半径)

        let canvas = document.querySelector("#canvas");

        const ctx = canvas.getContext("2d"); 

        ctx.beginPath();

        ctx.moveTo(50,100);

        ctx.arcTo(200,100,200,200,50);

        ctx.stroke(); 

        // 直线:

        ctx.beginPath();

        ctx.moveTo(50,100);

        ctx.lineTo(200,100);

        ctx.lineTo(200,200);

        ctx.stroke(); 

切线圆弧1


切线圆弧2

4.二次贝塞尔曲线:quadraticCurveTo(cpx1,cpy1,x,y)

        let canvas = document.querySelector("#canvas");

        const ctx = canvas.getContext("2d"); 

        // 直线:

        // ctx.beginPath();

        // ctx.moveTo(50,100);

        // ctx.lineTo(200,100);

        // ctx.lineTo(200,200);

        // ctx.stroke();

        ctx.beginPath();

        ctx.moveTo(50,100);

        ctx.quadraticCurveTo(200,100,200,200);

        ctx.stroke(); 

二次贝塞尔曲线1
二次贝塞尔曲线2

5.三次贝塞尔曲线:bezierCurveTo(cpx1,cpy1,cpx2,cpy2,x,y)

       let canvas = document.querySelector("#canvas");

       const ctx = canvas.getContext("2d"); 

        // 直线:

        // ctx.beginPath();

        // ctx.moveTo(50,100);

        // ctx.lineTo(200,100);

        // ctx.lineTo(200,200);

        // ctx.lineTo(400,200);

        // ctx.stroke();

        ctx.beginPath();

        ctx.moveTo(50,100);

        ctx.bezierCurveTo(200,100,200,200,400,200);

        ctx.stroke(); 

三次贝塞尔曲线1
三次贝塞尔曲线2

6.矩形:rect(x,y,w,h)

        let canvas = document.querySelector("#canvas");

        const ctx = canvas.getContext("2d"); 

        ctx.beginPath();

        ctx.rect(50,50,200,100)

        ctx.stroke();

矩形路径
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。