HTML5 Canvas

news2024/11/23 22:34:34

文章目录

  • HTML5 Canvas
    • 概述
    • Canvas元素
    • 使用
      • 绘制直线
        • 画2条直线
        • 用直线画三角形
        • 用直线画矩形
      • 绘制矩形
        • 描边矩形
        • 填充矩形
        • 混合使用
        • rect()
        • 清空矩形区域
        • 清空画布
      • 绘制多边形
        • 画箭头
        • 画正三角形
      • 绘制圆形

HTML5 Canvas

概述

HTML5新增了一个Canvas元素,我们常说的Canvas技术,指的就是使用Canvas元素结合JavaScript来绘制各种图形的技术。

Canvas元素

Canvas是一个行内块元素(即inline-block),我们一般需要指定其3个属性:id、width和height。width和height分别定义Canvas的宽度和高度。默认情况下,Canvas的宽度为300px,高度为150px。

Canvas对象常用属性

属性说明
widthCanvas的宽度
heightCanvas的高度

Canvas对象常用方法

方法说明
getContext(“2d”)获取Canvas 2D上下文环境对象
toDataURL()获取Canvas对象产生的位图的字符串

对于IE浏览器来说,暂时只有IE9及以上版本支持HTML5 Canvas,对于IE7和IE8,我们可以借助ExplorerCanvas扩展来解决。

使用

绘制直线

语法

cxt.moveTo(x1, y1);
cxt.lineTo(x2, y2);
cxt.stroke();

说明

moveTo()移动画,表示笔起点坐标;lineTo()画直线,表示终点坐标;必须调用stroke()才会生效。

画2条直线

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.moveTo(50, 50);
				context.lineTo(100, 50);
				context.moveTo(50, 100);
				context.lineTo(100, 100);
				context.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

用直线画三角形

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.moveTo(50, 100);
				context.lineTo(150, 50);
				context.lineTo(150, 100);
				context.lineTo(50, 100);
				context.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

用直线画矩形

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.moveTo(50, 100);
				context.lineTo(50, 50);
				context.lineTo(100, 50);
				context.lineTo(100, 100);
				context.lineTo(50, 100);
				context.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

绘制矩形

描边矩形

语法

cxt.strokeStyle = "属性值";
cxt.strokeRect(x,y,width,height);

strokeStyle属性

strokeStyle属性取值有3种:颜色值、渐变色和图案。

cxt.strokeStyle = "#FF0000";       //十六进制颜色值
cxt.strokeStyle = "red";         //颜色关键字
cxt.strokeStyle = "rgb(255,0,0)";    //rgb颜色值
cxt.strokeStyle = "rgba(255,0,0,0.8)"; //rgba颜色值

strokeRect()方法

x和y为矩形左上角坐标,width和height表示矩形宽高。

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.strokeStyle = "red";
				context.strokeRect(50, 50, 100, 50);
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

填充矩形

语法

cxt.fillStyle = "属性值";
cxt.fillRect(x, y, width, height);

fillStyle属性

fillStyle属性跟strokeStyle属性一样,取值也有3种:颜色值、渐变色和图案。

fillRect()

fillRect()方法跟strokeRect()方法一样,用于确定矩形的坐标,其中x和y为矩形左上角的坐标,width表示矩形的宽度,height表示矩形的高度。

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.fillStyle = "red";
				context.fillRect(50, 50, 100, 50);
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

混合使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.strokeStyle = "red";
				context.strokeRect(50, 50, 100, 50);
				context.fillStyle = "#ffe8e8";
				context.fillRect(50, 50, 100, 50);
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

rect()

语法

rect(x,y,width,height);

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.strokeStyle = "red";
				context.rect(50, 50, 100, 50);
				context.stroke();
				context.fillStyle = "#ffe8e8";
				context.rect(50, 50, 100, 50);
				context.fill();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

清空矩形区域

语法

cxt.clearRect(x, y, width, height);

使用

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.fillStyle = "red";
				context.fillRect(50, 50, 100, 50);
				context.clearRect(80, 80, 20, 10);
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

清空画布

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var btn = document.getElementById("btn");
				var context = canvas.getContext("2d");
				context.fillStyle = "red";
				context.fillRect(50, 50, 100, 50);
				btn.onclick = function() {
					context.clearRect(0, 0, canvas.width, canvas.height);
				}
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
		<br>
		<button id="btn">清空画布</button>
	</body>
</html>

在这里插入图片描述

绘制多边形

画箭头

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.moveTo(40, 60);
				context.lineTo(100, 60);
				context.lineTo(100, 30);
				context.lineTo(150, 75);
				context.lineTo(100, 120);
				context.lineTo(100, 90);
				context.lineTo(40, 90);
				context.lineTo(40, 60);
				context.strokeStyle = "red";
				context.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

画正三角形

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			/**
			 * 画多边形
			 * @param {Object} cxt
			 * @param {Object} n n边形
			 * @param {Object} dx 中心坐标
			 * @param {Object} dy 中心坐标
			 * @param {Object} size 边长度
			 */
			function drawPolygon(cxt, n, dx, dy, size) {
				cxt.beginPath();
				var degree = (2 * Math.PI) / n;
				for (var i = 0; i < n; i++) {
					var x = Math.cos(i * degree);
					var y = Math.sin(i * degree);
					cxt.lineTo(x * size + dx, y * size + dy);
				}
				cxt.closePath();
				cxt.fillStyle = "HotPink";
				cxt.fill();
			}

			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				drawPolygon(context, 3, 100, 75, 50);
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

绘制圆形

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<script type="text/javascript">
			window.onload = function() {
				var canvas = document.getElementById("canvas");
				var context = canvas.getContext("2d");
				context.beginPath();
				context.arc(100, 75, 50, 0, 360 * Math.PI / 180, true);
				context.closePath();
				context.strokeStyle = "HotPink";
				context.stroke();
			}
		</script>
	</head>
	<body>
		<canvas id="canvas" width="200" height="150" style="border:1px dashed gray;"></canvas>
	</body>
</html>

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/126759.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】填充每个节点的下一个右侧节点指针 [M](二叉树遍历)

116. 填充每个节点的下一个右侧节点指针 - 力扣&#xff08;LeetCode&#xff09; 一、题目 给定一个 完美二叉树 &#xff0c;其所有叶子节点都在同一层&#xff0c;每个父节点都有两个子节点。二叉树定义如下&#xff1a; struct Node { int val; Node *left; Node *…

通过webpack解决浏览器兼容问题

前言 很多面试时都会问到关于浏览器兼容问题&#xff0c;正好最近在看webpack打包&#xff0c;那就在这里记录一下我们如何通过webpack来实现兼容。 需求 要知道我们到底需要兼容那些浏览器&#xff0c;在这里就需要用到browserlist来配置需要兼容的浏览器版本并告诉webpack…

Jenkins自动部署项目

目录 1.安装插件 2.配置 本文只讲解通过插件来自动部署项目&#xff0c;Jenkins的安装可以看博主的另一篇文章&#xff0c;绝对保姆级&#xff0c;简洁丝滑的安装教程&#xff1a; jenkins下载安装__BugMan的博客-CSDN博客 1.安装插件 目前业内常用的解决方法是使用publish…

程序员必备十大网站

窝窝整理了十大程序猿必备网站&#xff0c;涵盖了开源平台、搜索引擎、免费的精品课程&#xff0c;包括让你头疼的BUG、算法等。偷偷告诉你&#xff0c;还有帮你拿到心仪的 offer&#xff01; 一&#xff0c;海量的资源平台 十大网站榜首 &#xff1a;GitHub — 开发者极其重…

图查询语言 nGQL 简明教程 vol.01 快速入门

本文旨在让新手快速了解 nGQL&#xff0c;掌握方向&#xff0c;之后可以脚踩在地上借助文档写出任何心中的 NebulaGraph 图查询。 视频 本教程的视频版在B站这里。 准备工作 在正式开始 nGQL 实操之前&#xff0c;记得先看过文档「快速入门流程」&#xff0c;部署、连接过 …

《小强升职记》读后感

为什么平庸&#xff1f; 成功的人每天都在忙碌&#xff0c;平庸的人每天也在忙碌&#xff0c;而时间对每个人来说是绝对公平的&#xff0c;那么&#xff0c;两者之间的差距到底是如何产生的呢? 第一&#xff0c;在这个人生的关键时期&#xff0c;我们被迫完成角色的转变。 …

C语言 字符函数和字符串函数及模拟实现

上图注意内容 代码解释如下 int main() {if (my_strlen("abc") - my_strlen("abcdef") > 0){printf(">\n");}else{printf("<\n");}return 0; }my_strlen int my_strlen(const char* str) {int count 0;//计数器assert(str…

Springboot AOP切面

文章目录SpringBoot Aop切面(Aop)一、什么是切面二、切面的用途三、AOP切面常用注解四、详细内容1、切面&#xff08;Aspect&#xff09;2、连接点&#xff08;Joinpoint&#xff09;3、通知&#xff08;Advice&#xff09;4.切入点&#xff08;Pointcut&#xff09;五、代码操…

PMP是什么?PMP证书有什么用?(含PMP资料)

PMP介绍 PMP的英文全称是Project Management Professional&#xff0c;中文全称叫做项目管理专业人士资格认证。 它是由美国项目管理协会(PMI)在全球范围内推出的针对项目经理的资格认证体系&#xff0c;严格评估项目管理人员知识技能是否具有高品质的资格认证考试&#xff0…

学习:如何使用Axure制作网站、app结构图

​“老师&#xff0c;axure里面可以制作网站的结构图吗&#xff1f;” “结构图只能在脑图工具中才能画吗&#xff1f;能不能直接在axure里面直接画&#xff1f;” “结构图到底需不需要做&#xff1f;对我来说好像没什么用呢” 在同学们的学习当中&#xff0c;有部分同学对…

CIO你好,现在是时候我们来谈一下“去”中台的问题了

去中台是个什么鬼 去中台&#xff1f;要不我去XXXXXXX 首先&#xff0c;你看到这个标题有没有懵圈&#xff1f;是不是有一种。。。 的感觉&#xff1f; 不过我现在告诉你&#xff0c;你没有看错。这篇文章是正儿八经的来谈“去”中台的。只不过这个“去”字&#xff0c;打着…

数据结构(链表)

链表及其实现 链式结构 顺序表插入、删除时间代价的分析&#xff0c;可以看出其时间复杂度是线性阶的&#xff0c;而且会引起大量已存储元素的位置移动。 改进方法&#xff1a;链式结构 各个元素的物理存放位置在存储器中是任意的&#xff0c;不一定连续。每个元素放在一个独…

国产新冠口服药重大突破:疗效不劣于Paxlovid,且安全性更高

*仅供医学专业人士阅读参考最近一段时间&#xff0c;新型冠状病毒感染&#xff08;Covid-19&#xff09;人数的激增&#xff0c;让全国多地迎来了重症“冲击波”&#xff0c;医疗卫生系统承受着极大的压力。 在新冠治疗药物方面&#xff0c;我国当前情况如何&#xff1f;最近Pa…

opencv鱼眼镜头矫正

说明 鱼眼镜头是一种视场角很大的镜头&#xff0c;但是得到的图片有很大的畸变&#xff0c;所以需要对鱼眼镜头进行标定&#xff0c;标定所得的参数可以对鱼眼镜头的图像进行矫正。 下图来自opencv的文档。其中c是鱼眼镜头原图&#xff0c;a和b是不同的矫正方法得到的图片。 …

K8S部署Apollo配置中心

K8S部署Apollo配置中心 参考文档: https://github.com/apolloconfig/apollo/tree/v1.8.0 [K8S部署apollo配置中心](https://www.cnblogs.com/Fengyinyong/p/14903725.html)[apollo官网文档](https://www.apolloconfig.com/#/zh/README)1、错误问题记录 在k8s里面部署时也遇到…

UDS-11.2 ReadDataByIdentifier (22) service

11.2.1 服务描述 来自&#xff1a;ISO 14229-1-2020.pdf ReadDataByIdentifier服务允许客户端从由一个或多个dataidentifier标识的服务器请求数据记录值。 客户端请求消息包含一个或多个两个字节的dataIdentifier值&#xff0c;用于标识由服务器维护的数据记录(关于允许的dataI…

【监督-非监督组合:全色锐化】

Supervised-unsupervised combined deep convolutional neural networks for high-fidelity pansharpening &#xff08;监督-非监督组合深度卷积神经网络实现高保真全色锐化&#xff09; 深度学习全色锐化方法因其优异的性能成为近年来的研究热点&#xff0c;基于Wald协议的卷…

GBASE合芯科技打造“国产芯片+数据库”国产替代解决方案

数据库的重要性 数据库是国产化基础软件的重要部分&#xff0c;是信息系统的核心。我国信息技术软硬件底层标准、架构、产品、以及生态体系被外国把控&#xff0c;这些上游核心技术遭遇限制严重影响了我国关键科技和产业的发展。2018年&#xff0c;中兴通讯被列入美国实体清单…

2022/12/29总结

今天AC了一道题目&#xff1a; P1825 [USACO11OPEN]Corn Maze S (1条消息) P1825 [USACO11OPEN]Corn Maze S_lxh0113的博客-CSDN博客 然后下面是学到的知识&#xff1a; 之前学习算法的时候总是牵扯到图&#xff0c;但是关于图的一些知识并没有了解。下面是有关图的基础知识…

区块链技术的官方材料整理

引自&#xff1a;区块链白皮书&#xff08;2018年&#xff09;、区块链白皮书&#xff08;2020年&#xff09;、中国区块链技术和应用发展白皮书、可信区块链赋能数字政府应用指南 区块链的概念 定义&#xff1a;区块链&#xff08;Blockchain&#xff09;是一种由多方共同维…