Canvas之绘制图形

Canvas之绘制图形

绘制矩形

js 复制代码
(() => {
    const canvas = document.createElement('canvas');
    document.body.append(canvas);
    canvas.width = 400;
    canvas.height = 400;
    const ctx = canvas.getContext('2d');
    ctx.fillRect(100, 100, 200, 100);
})();
(() => {
    const canvas = document.createElement('canvas');
    document.body.append(canvas);
    canvas.width = 400;
    canvas.height = 400;
    const ctx = canvas.getContext('2d');
    ctx.strokeRect(100, 100, 200, 100);
})();
(() => {
    const canvas = document.createElement('canvas');
    document.body.append(canvas);
    canvas.width = 400;
    canvas.height = 400;
    const ctx = canvas.getContext('2d');
    ctx.rect(100, 100, 200, 100);
    //画之前要设置好属性,画好之后就无法设置了
    ctx.fillStyle = 'rgba(255,0,0,0.8)';
    ctx.strokeStyle = '#00f';
    ctx.lineWidth = 10;
    ctx.fill()
    ctx.stroke();
})()

这是绘制矩形的方式。可以绘制填充矩形,描边矩形,以及混合矩形。使用立即执行函数使得各个部分不会相互影响,不会出现变量冲突。

混合矩形的时候先设置好 rect 基本信息,然后选择填充或者描边。

可以设置填充颜色,描边颜色,描边粗细。注意,一定要在画笔画之前进行属性设置,一旦画好之后再进行设置,属性设置就会无效了。

beginPath 方法

js 复制代码
 ctx.strokeStyle = '#0f0';//绿色
ctx.lineWidth = 10;
ctx.beginPath();
ctx.rect(20, 20, 100, 100);
ctx.stroke()

ctx.fillStyle = '#f00';//红色
ctx.beginPath();
ctx.rect(20, 200, 100, 100);
ctx.fill()
// ctx.stroke();
js 复制代码
ctx.strokeStyle = '#f00';
ctx.lineWidth = 10;
ctx.strokeRect(20, 20, 100, 100);

ctx.fillStyle = '#0f0';
ctx.fillRect(20, 200, 100, 100);

当我们不需要对所有绘画路径进行处理,需要把它们进行分割。因为 fill() 或者 stroke() 会将所有路径重画一遍。当我们绘制只对当前路径生效的时候就可以使用 beginPath() 方法。它可以将下面的路径分割到一个部分,可以是多个路径,直到下一个 beginPath() 方法处。属性可以写在外面,不影响结果。它会自动对紧邻的路径进行绘制。

前面说的是 rect 模式,使用 strokeRect 和 fillRect 可以独立成一个部分进行绘制,不需要使用 beginPath() 方法。

绘制圆角矩形

js 复制代码
const canvas = document.createElement('canvas');
document.body.append(canvas);
canvas.width = 400;
canvas.height = 400;
const ctx = canvas.getContext('2d');
ctx.roundRect(20, 20, 100, 100, [10]);//所有半径
ctx.stroke();
ctx.roundRect(200, 20, 100, 100, [10, 20]);//对角线
ctx.stroke();
ctx.roundRect(20, 200, 100, 100, [10, 20, 30]);//左上,对角线,右下
ctx.stroke();
ctx.roundRect(200, 200, 100, 100, [10, 20, 30, 40]);//左上,右上,右下,左下
ctx.stroke();

圆角矩形和之前绘制矩形类似,只是最后增加一个半径的参数,可以为数组。具体情况可以看上面的代码。注意 roundRect() 只是一个路径,不会显示,需要进行描边或者填充。

绘制直线&折线

js 复制代码
const canvas = document.createElement('canvas');
document.body.append(canvas);
canvas.width = 400;
canvas.height = 400;
const ctx = canvas.getContext('2d');
ctx.moveTo(100, 100);
ctx.lineTo(200, 200);
ctx.lineTo(300, 100);
ctx.stroke();

直线是两点相连,多条直线相连成折线。可以使用 moveTo() 传入起始点的坐标,可以跟多个 lintTo() 。不需要一个 moveTo() 跟一个 lineTo() 。

相关推荐
亿元程序员3 分钟前
为什么游戏公司现在都喜欢用protobuf?
前端
鹏多多5 分钟前
React瀑布流Masonry-Layout插件全方位指南:从基础到进阶实践
前端·javascript·react.js
fruge11 分钟前
前端数据可视化实战:Chart.js vs ECharts 深度对比与实现指南
前端·javascript·信息可视化
卓码软件测评20 分钟前
借助大语言模型实现高效测试迁移:Airbnb的大规模实践
开发语言·前端·javascript·人工智能·语言模型·自然语言处理
IT_陈寒26 分钟前
SpringBoot 3.0实战:这套配置让我轻松扛住百万并发,性能提升300%
前端·人工智能·后端
♡喜欢做梦27 分钟前
Spring Web MVC 入门秘籍:从概念到实践的快速通道(上)
前端·spring·mvc
Dragon Wu34 分钟前
Taro 自定义tab栏和自定义导航栏
前端·javascript·小程序·typescript·前端框架·taro
艾小码41 分钟前
2025年前端菜鸟自救指南:从零搭建专业开发环境
前端·javascript
namekong86 小时前
清理谷歌浏览器垃圾文件 Chrome “User Data”
前端·chrome
开发者小天7 小时前
调整为 dart-sass 支持的语法,将深度选择器/deep/调整为::v-deep
开发语言·前端·javascript·vue.js·uni-app·sass·1024程序员节