【HTML5】 canvas 绘制图形
文章目录
- 一、基本用法
- 二、用法详见
- 2.0、方法属性
- 2.1、绘制线条
- 2.2、绘制矩形
- 2.3、绘制圆形
- 2.4、绘制文本
- 2.5、填充图像
一、基本用法
canvas标签:可用于在网页上绘制图形(使用 JavaScript 在网页上绘制图像)- 画布是一个矩形区域,通过控制其每一像素绘制路径、矩形、圆形、字符以及添加图像。
- 创建一个
canvas:width 和 height 是必备属性,id 是为了在 js 中获取改元素。
<canvas id="myCanvas" width="200" height="100"></canvas>
- 在 js 中绘制 canvas
<script type="text/javascript">
// 通过 id 查找到 canvas 元素
var c = document.getElementById("myCanvas");
// 创建 context 对象
var cxt = c.getContext("2d");
// 绘制矩形(前2个参数为在canvas里面的矩形左上角起点坐标,第3个参数是宽,第4个参数是高)
cxt.fillRect(0,0,150,75);
// 填充颜色
cxt.fillStyle="#FF0000";
</script>
二、用法详见
2.0、方法属性
- context 对象属性
| 属性 | 描述 |
|---|---|
| fillStyle | 设置或返回用于填充绘图的颜色、渐变或图案。 |
| strokeStyle | 设置或返回用于笔划的颜色、渐变或图案。 |
| shadowColor | 设置或返回用于阴影的颜色。 |
| shadowBlur | 设置或返回阴影的模糊级别。 |
| shadowOffsetX | 设置或返回阴影到形状的水平距离。 |
| shadowOffsetY | 设置或返回阴影到形状的垂直距离。 |
- context 对象方法
| 方法 | 描述 |
|---|---|
| fill() | 填充当前图形(路径)。 |
| stroke() | 实际上绘制您定义的路径。 |
| beginPath() | 开始路径,或重置当前路径。 |
| closePath() | 创建从当前点返回起点的路径。 |
2.1、绘制线条
- 线条方法
| 方法 | 描述 | 绘制 |
|---|---|---|
| moveTo() | 划线起始点 | 否 |
| lineTo() | 画线到另一个点 | 否 |
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
// 通过 id 查找到 canvas 元素
var c = document.getElementById("myCanvas");
// 创建 context 对象
var cxt = c.getContext("2d");
// 线条起点坐标
cxt.moveTo(10,10);
// 折点坐标
cxt.lineTo(150,50);
// 折点坐标
cxt.lineTo(10,50);
// 绘制当前或已经存在的路径的方法
cxt.stroke();
</script>

- 专有属性
| 属性 | 描述 | 值 |
|---|---|---|
| lineWidth | 绘制时要使用的线条宽度 | 像素 |
| lineCap | 定义线的端部样式 | round(圆形) square(方形)、butt(平直,默认值) |
| lineJoin | 设置或返回两条线相交时创建的角的类型 | bevel(斜角)、round(圆角) miter(尖角,默认值) |
ctx.beginPath();
ctx.moveTo(0, 0);
ctx.lineTo(200, 100);
ctx.lineWidth = 10;
ctx.strokeStyle = "red";
ctx.lineCap = "round";
ctx.stroke();
2.2、绘制矩形
fillRect()方法:向路径添加一个填充的矩形context.fillRect(x, y, width, height)strokeRect()方法:向路径添加一个无填充矩形context.fillRect(x, y, width, height)rect()方法:向路径添加一个矩形context.rect(x, y, width, height)
1. strokeRect(30, 30, 50, 50)
等价于:ctx.rect(30, 30, 50, 50);ctx.stroke();
2. fillRect(30, 30, 50, 50)
等价于:ctx.rect(30, 30, 50, 50);ctx.fill();
| 参数 | 描述 |
|---|---|
| x | 矩形左上角的 x 坐标。 |
| y | 矩形左上角的 y 坐标。 |
| width | 矩形的宽度,以像素为单位。 |
| height | 矩形的高度,以像素为单位。 |
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");// 红色矩形
ctx.beginPath();
ctx.lineWidth = "6";
ctx.strokeStyle = "red";
ctx.fillStyle = "yellow" // 在 strokeRect 中不生效
ctx.strokeRect(5, 5, 290, 140);// 绿色矩形
ctx.beginPath();
ctx.lineWidth = "4"; // 在 fillRect 中不生效
ctx.strokeStyle = "green"; // 在 fillRect 中不生效
ctx.fillStyle = "yellow"
ctx.fillRect(30, 30, 50, 50);

2.3、绘制圆形
arc()方法:向路径添加一个圆形context.arc(x,y,r,start,end)
| 参数 | 描述 |
|---|---|
| x | 圆心的x轴坐标 |
| y | 圆心的y轴坐标 |
| r | 圆弧的半径 |
| start | 圆弧的起始点 |
| end | 圆弧的终点 |
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
// 通过 id 查找到 canvas 元素
var c = document.getElementById("myCanvas");
// 创建 context 对象
var cxt = c.getContext("2d");
// 填充颜色
cxt.fillStyle="#FF0000";
// 创建一个新的路径
cxt.beginPath();
// 绘制圆弧路径的方法(圆心的x轴坐标,圆心的y轴坐标,圆弧的半径,圆弧的起始点,圆弧的终点,true逆时针绘制圆弧false顺时针绘制)
cxt.arc(70,18,15,0,Math.PI*2,true);
// 返回到当前路径起始点的方法
cxt.closePath();
// 填充当前或已存在的路径的方法
cxt.fill();
</script>

2.4、绘制文本
fillText(text,x,y):在画布上绘制“填充的”文本
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");ctx.font = "30px Arial";
ctx.fillText("Hello World", 10, 50);

strokeText(text,x,y):在画布上绘制文本(无填充)
const canvas = document.getElementById("myCanvas");
const ctx = canvas.getContext("2d");ctx.font = "30px Arial";
ctx.strokeText("Hello World", 10, 50);

- 专有属性:
| 属性 | 描述 |
|---|---|
| font | 设置或返回文本内容的当前字体属性。 |
| textAlign | 设置或返回文本内容的当前对齐方式。 |
| textBaseline | 设置或返回绘制文本时使用的当前文本基线。 |
-
font 属性:使用的语法与 CSS font 属性相同。
-
textAlign 属性

| 值 | 描述 |
|---|---|
| start | 默认。文本在指定的位置开始。 |
| end | 文本在指定的位置结束。 |
| center | 文本的中心被放置在指定的位置。 |
| left | 文本左对齐。 |
| right | 文本右对齐。 |
- textBaseline 属性

| 值 | 描述 |
|---|---|
| alphabetic | 默认。文本基线是普通的字母基线。 |
| top | 文本基线是 em 方框的顶端。 |
| hanging | 文本基线是悬挂基线。 |
| middle | 文本基线是 em 方框的正中。 |
| ideographic | 文本基线是表意基线。 |
| bottom | 文本基线是 em 方框的底端。 |
2.5、填充图像
<canvas id="myCanvas" width="200" height="100" style="border:1px solid #c3c3c3;"></canvas>
<script type="text/javascript">
// 通过 id 查找到 canvas 元素
var c = document.getElementById("myCanvas");
// 创建 context 对象
var cxt = c.getContext("2d");
var img = document.getElementById("scream");
// 放置图片 (图片,image的左上角在目标画布上X轴坐标,image的左上角在目标画布上Y轴坐标)
ctx.drawImage(img, 10, 10)
</script>
相关文章:
【HTML5】 canvas 绘制图形
文章目录 一、基本用法二、用法详见2.0、方法属性2.1、绘制线条2.2、绘制矩形2.3、绘制圆形2.4、绘制文本2.5、填充图像 一、基本用法 canvas 标签:可用于在网页上绘制图形(使用 JavaScript 在网页上绘制图像)画布是一个矩形区域,…...
【数据结构】二叉树-堆(top-k问题,堆排序,时间复杂度)
🌈个人主页:秦jh__https://blog.csdn.net/qinjh_?spm1010.2135.3001.5343🔥 系列专栏:《数据结构》https://blog.csdn.net/qinjh_/category_12536791.html?spm1001.2014.3001.5482 目录 堆排序 第一种 编辑 第二种 …...
通过浏览器判断是否安装APP
场景 求在分享出来的h5页面中,有一个立即打开的按钮,如果本地安装了我们的app,那么点击就直接唤本地app,如果没有安装,则跳转到下载。 移动端 判断本地是否安装了app 首先我们可以确认的是,在浏览器中无…...
vivado Revision Control
2020.2 只需要git 管理 prj.xpr 和 prj.srcs/ https://china.xilinx.com/video/hardware/ip-revision-control.html Using Vivado Design Suite with Revision Control https://www.xilinx.com/video/hardware/vivado-design-suite-revision-control.html http://www.xi…...
【AI视野·今日Robot 机器人论文速览 第七十三期】Tue, 9 Jan 2024
AI视野今日CS.Robotics 机器人学论文速览 Tue, 9 Jan 2024 Totally 40 papers 👉上期速览✈更多精彩请移步主页 Daily Robotics Papers Digital Twin for Autonomous Surface Vessels for Safe Maritime Navigation Authors Daniel Menges, Andreas Von Brandis, A…...
java解析json复杂数据的第四种思路
文章目录 一、概述二、数据预览1. 接口json数据 三、代码实现1. 核心代码2. 字符串替换结果3. 运行结果 一、概述 接前两篇 java解析json复杂数据的两种思路 java解析json复杂数据的第三种思路 我们已经有了解析json数据的几种思路,下面介绍的方法是最少依赖情况下…...
【不用找素材】ECS 游戏Demo制作教程(1) 1.15
一、项目设置 版本:2022.2.0f1 (版本太低的话会安装不了ECS插件) 模板选择3D URP 进来后移除URP(因为并不是真的需要,但也不是完全不需要) Name: com.unity.entities.graphics Version: 1.0.0-exp.8 点击…...
Mysql的in与exits
Mysql的in与exits IN和EXISTS是MySQL中用于子查询的两种不同的条件操作符。它们在使用和实现上有一些区别。 IN 操作符: IN操作符用于判断一个值是否在一个集合内。它可以用于子查询中,检查主查询的某一列是否在子查询返回的结果集中。 SELECT colum…...
浅谈对Maven的理解
一、什么是Maven Maven——是Java社区事实标准的项目管理工具,能帮你从琐碎的手工劳动中解脱出来,帮你规范整个组织的构建系统。不仅如此,它还有依赖管理、自动生成项目站点等特性,已经有无数的开源项目使用它来构建项目并促进团队…...
【算法实验】实验2
实验2-1 二分搜索 【问题描述】给定一个包含 n 个元素有序的(升序)整型数组 nums 和一个目标值 target,要求实现搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。题目保证nums中的所有元素都不重复。 【…...
杂记:使用 mac 和 windows 以及编辑器的总结
Chrome 扩展 Grammarly 语法检查 DM Integration Module idm 下载扩展 JSON Formatter json 格式化查看 uBlock Origin Ad block 油猴 任意网站都可以使用的脚本管理工具 Mac 快捷键整理 截图到剪贴板 shift command control 4 (不按 shift 存储为文件) 切换输入法…...
vue2使用qiankun微前端(跟着步骤走可实现)
需求:做一个vue2的微前端,以vue2为主应用,其他技术栈为子应用,比如vue3,本文章只是做vue2一套的微前端应用实现,之后解决的一些问题。vue3子应用可以看我另一篇vue3vitets实现qiankun微前端子应用-CSDN博客…...
1.C语言基础知识
这里写目录标题 1.第一个C语言程序2.注释3.标识符4.关键字5.数据类型6.变量7.常量8.运算符9.输入输出输入输出 1.第一个C语言程序 C语言的编程框架 #include <stdio.h> int main() {/* 我的第一个 C 程序 */printf("Hello, World! \n");return 0; }2.注释 单行…...
路由黑洞和黑洞路由的区别
路由黑洞: 路由黑洞是一种现象,一般是在网络边界做汇总回程路由的时候产生的一种不太愿意出现的现象,就是汇总的时候有时会有一些不在内网中存在的网段,但是又包含在汇总后的网段中,如果在这个汇总的边界设备上同时还配…...
Golang 如何基于现有的 context 创建新的 context?
目录 基于现有的 context 创建新的 context 现有创建方法的问题 Go 1.21 中的 context.WithoutCancel 函数 Go 版本低于 1.21 该怎么办? 在 Golang 中,context 包提供了创建和管理上下文的功能。当需要基于现有的 context.Context 创建新的 context …...
【学习笔记】[AGC063E] Child to Parent
提供一个多项式做法。 分别设 f u , i , g u , i f_{u,i},g_{u,i} fu,i,gu,i表示以 u u u为根时, a u i a_ui aui和 a u ≥ i a_u\ge i au≥i的方案数,合并子树 v v v时,转移如下: f u , i ∑ f u , i − k r g v . k…...
sar 运行出错
手机上使用sar 使用sar工具报错 / # sar -I SUM 1 1 Cannot find the data collector (sadc) exec: No such file or directory Inconsistent input data解决方法:需要将 sadc sadf sar 三个bin同时推到/usr/bin/目录下 / # sar -I SUM 1 2 Linux 5.15.104-ab558…...
UE5 C++的TCP服务器与客户端
客户端.h 需要在Build.cs中加入模块:"Networking","Sockets","Json","JsonUtilities" // Fill out your copyright notice in the Description page of Project Settings.#pragma once#include "CoreMinimal.h" #include…...
nginx+lua配置,一个域名配置https,docker集群使用
没安装kua的先安装lua 没有resty.http模块的,许配置 nginxlua配置,一个域名配置https,docker集群使用,一个域名配置https管理整个集群 lua做转发(方向代理) 1、ad_load.lua文件 ngx.header.content_typ…...
jQuery 正则表达式 验证表单
文章目录 简介:什么是正则表达式以及作用:●文本框内容的验证:代码演示示例: 简介: jQuery Form插件是一个优秀的Ajax表单插件,可以非常容易地、无侵入地升级HTML表单以支持Ajax。jQuery Form有两个核心方法…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
土地利用/土地覆盖遥感解译与基于CLUE模型未来变化情景预测;从基础到高级,涵盖ArcGIS数据处理、ENVI遥感解译与CLUE模型情景模拟等
🔍 土地利用/土地覆盖数据是生态、环境和气象等诸多领域模型的关键输入参数。通过遥感影像解译技术,可以精准获取历史或当前任何一个区域的土地利用/土地覆盖情况。这些数据不仅能够用于评估区域生态环境的变化趋势,还能有效评价重大生态工程…...
【7色560页】职场可视化逻辑图高级数据分析PPT模版
7种色调职场工作汇报PPT,橙蓝、黑红、红蓝、蓝橙灰、浅蓝、浅绿、深蓝七种色调模版 【7色560页】职场可视化逻辑图高级数据分析PPT模版:职场可视化逻辑图分析PPT模版https://pan.quark.cn/s/78aeabbd92d1...
LangChain知识库管理后端接口:数据库操作详解—— 构建本地知识库系统的基础《二》
这段 Python 代码是一个完整的 知识库数据库操作模块,用于对本地知识库系统中的知识库进行增删改查(CRUD)操作。它基于 SQLAlchemy ORM 框架 和一个自定义的装饰器 with_session 实现数据库会话管理。 📘 一、整体功能概述 该模块…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
Webpack性能优化:构建速度与体积优化策略
一、构建速度优化 1、升级Webpack和Node.js 优化效果:Webpack 4比Webpack 3构建时间降低60%-98%。原因: V8引擎优化(for of替代forEach、Map/Set替代Object)。默认使用更快的md4哈希算法。AST直接从Loa…...
代码规范和架构【立芯理论一】(2025.06.08)
1、代码规范的目标 代码简洁精炼、美观,可持续性好高效率高复用,可移植性好高内聚,低耦合没有冗余规范性,代码有规可循,可以看出自己当时的思考过程特殊排版,特殊语法,特殊指令,必须…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
MacOS下Homebrew国内镜像加速指南(2025最新国内镜像加速)
macos brew国内镜像加速方法 brew install 加速formula.jws.json下载慢加速 🍺 最新版brew安装慢到怀疑人生?别怕,教你轻松起飞! 最近Homebrew更新至最新版,每次执行 brew 命令时都会自动从官方地址 https://formulae.…...
探索Selenium:自动化测试的神奇钥匙
目录 一、Selenium 是什么1.1 定义与概念1.2 发展历程1.3 功能概述 二、Selenium 工作原理剖析2.1 架构组成2.2 工作流程2.3 通信机制 三、Selenium 的优势3.1 跨浏览器与平台支持3.2 丰富的语言支持3.3 强大的社区支持 四、Selenium 的应用场景4.1 Web 应用自动化测试4.2 数据…...
