当前位置: 首页 > news >正文

canvas的使用方法

<canvas> 元素是HTML5中引入的一种用于在网页上绘制图形的标签。通过使用JavaScript,你可以在画布上绘制各种图形、文本和图像。以下是关于 <canvas> 元素的详细讲解,包括基本用法和一些常见的绘制操作。

1. 创建 <canvas> 元素

首先,在HTML中创建一个 <canvas> 元素,并设置其宽度和高度。

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Canvas Example</title>
</head>
<body><canvas id="myCanvas" width="500" height="500" style="border:1px solid #000000;"></canvas>
</body>
</html>

2. 获取绘图上下文

要在 <canvas> 上绘图,你需要获取其绘图上下文。最常用的是2D上下文。

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

3. 绘制基本图形

3.1 绘制矩形

fillRect(x, y, width, height) 绘制填充矩形。

strokeRect(x, y, width, height) 绘制矩形边框。

clearRect(x, y, width, height) 清除矩形区域。

// 绘制一个填充矩形
ctx.fillStyle = '#FF0000'; // 设置填充颜色
ctx.fillRect(20, 20, 150, 100); // 绘制矩形// 绘制一个矩形边框
ctx.strokeStyle = '#0000FF'; // 设置边框颜色
ctx.strokeRect(200, 20, 150, 100); // 绘制矩形边框// 清除一个矩形区域
ctx.clearRect(25, 25, 140, 90); // 清除区域

3.2 绘制路径

beginPath() 开始路径。

moveTo(x, y) 移动画笔到指定位置。

lineTo(x, y) 绘制一条线。

stroke() 描边路径。

fill() 填充路径。

// 绘制一个三角形
ctx.beginPath();
ctx.moveTo(100, 150);
ctx.lineTo(50, 250);
ctx.lineTo(150, 250);
ctx.closePath(); // 闭合路径
ctx.stroke(); // 描边
ctx.fillStyle = '#00FF00'; // 设置填充颜色
ctx.fill(); // 填充

3.3 绘制圆形和弧线

arc(x, y, radius, startAngle, endAngle, anticlockwise) 绘制弧线或圆。

// 绘制一个圆
ctx.beginPath();
ctx.arc(300, 200, 50, 0, Math.PI * 2, false); // 绘制一个半径为50的圆
ctx.stroke(); // 描边
ctx.fillStyle = '#FFA500'; // 设置填充颜色
ctx.fill(); // 填充

4. 绘制文本

fillText(text, x, y) 绘制填充文本。

strokeText(text, x, y) 绘制文本边框。

// 绘制填充文本
ctx.font = '30px Arial'; // 设置字体
ctx.fillStyle = '#000000'; // 设置填充颜色
ctx.fillText('Hello Canvas', 100, 300); // 绘制文本// 绘制文本边框
ctx.strokeStyle = '#FF0000'; // 设置边框颜色
ctx.strokeText('Hello Canvas', 100, 350); // 绘制文本边框

5. 绘制图像

drawImage(image, x, y) 在指定位置绘制图像。

drawImage(image, x, y, width, height) 在指定位置绘制缩放后的图像。

drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight) 在指定位置绘制图像的某个部分。

const img = new Image();
img.src = 'path/to/image.jpg';
img.onload = function() {ctx.drawImage(img, 50, 400, 200, 100); // 绘制图像,缩放到200x100
};

6. 变换

translate(x, y) 移动画布原点。

rotate(angle) 旋转画布。

scale(x, y) 缩放画布。

// 平移变换
ctx.translate(100, 100);
ctx.fillStyle = '#0000FF';
ctx.fillRect(0, 0, 50, 50); // 绘制一个平移后的矩形// 旋转变换
ctx.rotate(Math.PI / 4); // 旋转45度
ctx.fillStyle = '#FF00FF';
ctx.fillRect(0, 0, 50, 50); // 绘制一个旋转后的矩形// 缩放变换
ctx.scale(2, 2);
ctx.fillStyle = '#00FFFF';
ctx.fillRect(0, 0, 50, 50); // 绘制一个缩放后的矩形

7. 动画

通过循环和重绘实现动画效果。

let x = 0;function draw() {ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除画布ctx.fillStyle = '#FF0000';ctx.fillRect(x, 50, 50, 50); // 绘制矩形x += 1; // 更新位置requestAnimationFrame(draw); // 请求下一帧
}draw();

总结

通过以上内容,你应该掌握了 <canvas> 元素的基本使用方法,包括如何绘制基本图形、路径、文本和图像,以及如何进行变换和实现动画。

1.没仔细了解过,只知道是绘图用的。

2.要在 <canvas> 上绘图,你需要获取其绘图上下文,最常用的是2D上下文。

3. 绘制基本图形

绘制矩形

fillRect(x, y, width, height) 绘制填充矩形。

strokeRect(x, y, width, height) 绘制矩形边框。

clearRect(x, y, width, height) 清除矩形区域。

绘制路径

beginPath() 开始路径。

moveTo(x, y) 移动画笔到指定位置。

lineTo(x, y) 绘制一条线。

stroke() 描边路径。

fill() 填充路径。

绘制圆形和弧线

绘制文本

绘制图像

变换

动画

3. /

4. 和python海龟绘图差不多,需要熟悉api。

相关文章:

  • 【Linux取经路】守护进程
  • vue router中的导航守卫,它的5个使用场景举例
  • 航天科技集团与SPACEX公司的思考与分析
  • vue2+echarts实现简易的2d地图效果
  • 算力巅峰对决,一文读懂CPU、GPU、GPGPU、FPGA、DPU、TPU
  • apache poi 插入“下一页分节符”并设置下一节纸张横向的一种方法
  • Python版本管理器-Miniconda
  • 【Linux】线程(一)
  • 在大数据时代:为何硬盘仍是数据中心存储的核心
  • 基于springboot的人力资源管理系统源码数据库
  • WEB基础--TOMCAT服务器
  • 怎么提高音频的播放速度?提高音频播放速度的四种方法
  • 基于usb通信的鼠标设计
  • Java爬虫——正则表达式应用
  • 超全分析MybatisPlus中的MetaObjectHandler全局字段填充的基本知识(附Demo及实战)
  • [原]深入对比数据科学工具箱:Python和R 非结构化数据的结构化
  • 10个确保微服务与容器安全的最佳实践
  • 5、React组件事件详解
  • 8年软件测试工程师感悟——写给还在迷茫中的朋友
  • canvas实际项目操作,包含:线条,圆形,扇形,图片绘制,图片圆角遮罩,矩形,弧形文字...
  • Material Design
  • React-Native - 收藏集 - 掘金
  • text-decoration与color属性
  • UMLCHINA 首席专家潘加宇鼎力推荐
  • Vim 折腾记
  • yii2权限控制rbac之rule详细讲解
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 开年巨制!千人千面回放技术让你“看到”Flutter用户侧问题
  • 微信开源mars源码分析1—上层samples分析
  • 学习HTTP相关知识笔记
  • 在weex里面使用chart图表
  • 正则表达式小结
  • Hibernate主键生成策略及选择
  • ​油烟净化器电源安全,保障健康餐饮生活
  • !!java web学习笔记(一到五)
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • #我与Java虚拟机的故事#连载10: 如何在阿里、腾讯、百度、及字节跳动等公司面试中脱颖而出...
  • ${ }的特别功能
  • (27)4.8 习题课
  • (二十三)Flask之高频面试点
  • (分类)KNN算法- 参数调优
  • (深入.Net平台的软件系统分层开发).第一章.上机练习.20170424
  • (十六)一篇文章学会Java的常用API
  • (转)C语言家族扩展收藏 (转)C语言家族扩展
  • (转贴)用VML开发工作流设计器 UCML.NET工作流管理系统
  • .Net Attribute详解(上)-Attribute本质以及一个简单示例
  • .NET Core引入性能分析引导优化
  • .NET 设计模式初探
  • .NET6使用MiniExcel根据数据源横向导出头部标题及数据
  • .netcore 6.0/7.0项目迁移至.netcore 8.0 注意事项
  • [22]. 括号生成
  • [8-27]正则表达式、扩展表达式以及相关实战
  • [Android] 240204批量生成联系人,短信,通话记录的APK
  • [C\C++]读入优化【技巧】
  • [CF482B]Interesting Array