一、基础介绍
canvas 是一块画布,可以在上面绘制图像。使用 HTML5 的 canvas 来画画。使用 JavaScript 进行图像绘制canvas 基础绘制线段, <canvas> 标签只是图形容器,必须使用脚本来绘制图形。可以通过多种方法使用 canvas 绘制路径,盒、圆、字符以及添加图像。<canvas> 标签定义图形,比如图表和其他图像,必须使用脚本来绘制图形。例如在画布上(Canvas)画一个红色矩形,渐变矩形,彩色矩形,和一些彩色的文字等。
二、绘制线段
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
</body>
</html>
运行结果:

代码解析:
在 head 部分添加了一个 style,在 style 里添加了一个 canvas 的背景色样式,这是为了给 canvas一个背景色以便查看。不然的话画布颜色跟界面颜色一样,难以分辨;
canvas 元素需要给予一些宽高和ID的基本属性
让我们进一步看看 canvas 如何使用
实例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<canvas id="myCanvas" width="500" height="500"></canvas>
<script>
var canvas=document.getElementById('myCanvas');//通过 getElementById 取得对应 canvas 对象
var context=canvas.getContext('2d');//表示需要绘制图像的类型为2d
context.beginPath();//充值画布路径,路径就是我们画的线段、线条
context.moveTo(100,100);//下笔点移动到某一个位置
context.lineTo(200,200);//从下笔点绘制一条线段到 xy 坐标为 200 的地方
context.stroke();//开始绘制
</script>
</body>
</html>
运行结果:

代码解析:
var canvas=document.getElementById('myCanvas'); 表示得到 id 为 myCanvas 的 dom 节点,这个节点为一个 canvas 标签,那么此时变量 canvas 就表示这个 canvas 标签; 也就是这是个 canvas 的对象,那么就可以使用这个对象所对应的一些功能;
var context=canvas.getContext('2d'); 这句代码中的 canvas 对象指对应的画布对象,因为刚刚使用了 getbyID 函数获取到了对应的节点,此时这个 canvas 就表示这个节点通过 getContext 指定当前所需要绘制的图片类型,在这里传入了参数为 2d,表示下面以 2d 绘制为主。
context.beginPath(); 这句代码表示“清空画布”,也就是重置画布内容,让画布显示干净些。
context.moveTo(100,100); 这句代码表示将下笔的点移动到 (x,y) 为 (100,100) 处。
context.lineTo(200,200); 这句代码结合之前使用 moveTo 找到了一个洛必点,现在的 lineTo 是画一条直线,把这一条直线画到指定坐标点,也就是 (x,y)为(200,200 ) xy 坐标。
context.stroke(); 表示开始绘制,之前所写的代码都只是在描述要绘制的步骤,最后一步代码才表示将要绘制的路径进行绘制,就像胸有成竹,心中先有竹子的样子,画竹子的步骤,最后再把竹子画出来。
三、矩形绘制
代码实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS </title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<canvas id="myCanvasa" width="500" height="500"></canvas>
<script>
var canvas=document.getElementById('myCanvasa');
var context=canvas.getContext('2d');
context.beginPath();
context.fillRect(10,10,300,400);
</script>
</body>
</html>
运行结果:

代码解析:
这里不用 stroke 函数进行绘制了,直接使用 fillRect 函数绘制一个矩形,这个矩形以(x,y)为(10,10 )的点做起始绘制坐标, 300 和 400 分别是矩形对应的宽和高。
修改颜色:
添加 fillStyle 属性即可,如
<script>
var canvas=document.getElementById('myCanvasa');
var context=canvas.getContext('2d');
context.fillStyle = "#0000ff";
context.beginPath();
context.fillRect(10,10,300,400);
</script>
运行结果:

去掉填充颜色:
将 fillRect 函数替换为 strokeRect 函数,fillRect 表示填充绘制矩形 strokeRect 表示不填充。
<script>
var canvas=document.getElementById('myCanvasa');
var context=canvas.getContext('2d');
context.beginPath();
context.strokeRect(10,10,300,400);
</script>
运行结果:

可以看到有个线条圈出了矩形,也可以修改线条颜色,需要给予 strokeStyle 属性设置一个颜色即可,例如 context.strokeStyle = "#ff0000";;
<script>
var canvas=document.getElementById('myCanvasa');
var context=canvas.getContext('2d');
context.strokeStyle = "#ff0000";
context.beginPath();
context.strokeRect(10,10,300,400);
</script>
运行结果:

四、三角形绘制
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<canvas id="tCanvasa" width="300" height="300"></canvas>
<script>
var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象
var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型
context.lineTo(30, 30);
context.lineTo(30, 180);
context.lineTo(180, 180);
context.lineTo(30, 30);
context.stroke();
</script>
</body>
</html>
运行结果:
代码解析:
绘制三角形我们需要懂得线段绘制的概念,上面代码里,先把起始点放在了(x,y)都是 30处,然后绘制一条线段到坐标点为 (30,180 )处,此时是一条垂直的直线,接着再从(30,180) 处绘制一条直线到 (180,180) ,这时就有三角形的两条边,最后再从 (180,180) 处返回最先落笔点(30,30),这样三角形就绘制完啦;
注意!一定要在路径编写完代码后添加 stroke 函数。
填充颜色,需要添加 fill 函数:context.fill();
<script>
var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象
var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型
context.lineTo(30, 30);
context.lineTo(30, 180);
context.lineTo(180, 180);
context.lineTo(30, 30);
context.fill();
context.stroke();
</script>
填充结果:

改变填充色:
使用 fillStyle ,例如 context.fillStyle = "#0000ff";,注意!线段闭合才能填充颜色。
<script>
var canvas=document.getElementById('tCanvasa');//通过 getElementById 查找取得对应的 canvas 对象
var context=canvas.getContext('2d');//指定了您想要在画布上绘制的类型
context.lineTo(30, 30);
context.lineTo(30, 180);
context.lineTo(180, 180);
context.lineTo(30, 30);
context.fillStyle = "#0000ff";
context.fill();
context.stroke();
</script>
修改结果:
拓展:
dom 节点:
DOM 节点是指在XML文档中的每个成分都是一个节点,整个文档就是一个文档节点,每个XML标签是一个元素节点。
创建新 HTML 元素(节点)
如需向 HTML DOM 添加新元素,必须先创建这个元素(元素节点),然后将其追加到已有的元素。
(1)appendChild() 方法,追加新元素作为父的最后一个子。
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var para = document.createElement("p");//创建了一个新的 <p> 元素
var node = document.createTextNode("这是新文本。");//因为要向 <p> 元素添加文本,所以必须先创建文本节点。这段代码创建了一个文本节点
para.appendChild(node);//用 appendChild 向 <p> 元素追加这个文本节点
var element = document.getElementById("div1");//查找一个已有的元素
element.appendChild(para);//用 appendChild 向这个已有的元素 div 追加新元素
</script>
</body>
</html>
运行结果:

(2)使用 insertBefore() 方法:
代码示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是新文本。");
para.appendChild(node);
var element = document.getElementById("div1");
var child = document.getElementById("p1");
element.insertBefore(para, child);//用 insertBefore 向这个已有的元素<p> ID p1 前添加doc节点(添加新元素)
</script>
</body>
</html>
运行结果:

删除已有 HTML 元素
删除某个 HTML 元素,需要知晓该元素的父:
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<!-- HTML 文档包含了一个带有两个子节点(两个 <p> 元素)的 <div> 元素 -->
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var parent = document.getElementById("div1");//查找 id="div1" 的元素 赋值给名为 parent 的变量
var child = document.getElementById("p1");//查找 id="p1" 的 <p> 元素 赋值给名为 child 的变量
parent.removeChild(child);//从父元素里删除子元素
</script>
</body>
</html>
运行结果:

替换 HTML 元素
使用 replaceChild() 方法
示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>第十一篇 JS canvas</title>
<style>
canvas{
background-color:cadetblue;
}
</style>
</head>
<body>
<div id="div1">
<p id="p1">这是一个段落。</p>
<p id="p2">这是另一个段落。</p>
</div>
<script>
var para = document.createElement("p");
var node = document.createTextNode("这是新文本。");
para.appendChild(node);
var parent = document.getElementById("div1");
var child = document.getElementById("p1");
parent.replaceChild(para, child);
</script>
</body>
</html>
运行结果:

参考自:
【前端就业课 第一阶段】HTML5 零基础到实战(十一)canvas 基础_1_bit 的博客-CSDN博客
https://www.runoob.com/html/html5-canvas.html
这篇博客介绍了HTML5 Canvas的基础用法,包括如何使用JavaScript在Canvas上绘制线段、矩形和三角形,并探讨了DOM节点的操作,如创建、删除和替换元素。
190

被折叠的 条评论
为什么被折叠?



