HTML 画布学习笔记
简介
HTML 画布是 HTML5 中新增的一个元素,它可以让开发者在页面上自由绘制各种形状、图像和动画等内容,为网页提供更加丰富多彩的视觉效果。
基本用法
使用 HTML 画布需要以下步骤:
- 在 HTML 页面中创建一个
<canvas>
元素; - 使用 JavaScript 获取该元素,并获取其绘图上下文(context);
- 通过调用上下文对象的方法,完成所需的绘制操作。
例如,以下代码将在页面上创建一个 300px
* 150px
的矩形:
htmlCopy Code<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvas Example</title>
</head>
<body>
<canvas id="myCanvas" width="300" height="150"></canvas>
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.fillStyle = "#FF0000";
ctx.fillRect(0, 0, 150, 75);
</script>
</body>
</html>
绘图基础
颜色和样式
画布上的图形都有颜色和样式,可以使用以下属性来设置:
fillStyle
:设置图形的填充颜色或渐变对象;strokeStyle
:设置图形的描边颜色或渐变对象;lineWidth
:设置描边宽度。
例如,以下代码绘制了一个圆形,并设置其颜色和线条宽度:
javascriptCopy Codevar canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(100, 75, 50, 0, 2 * Math.PI);
ctx.fillStyle = "#FF0000";
ctx.fill();
ctx.lineWidth = 3;
ctx.strokeStyle = "#000000";
ctx.stroke();
路径绘制
在画布上绘制形状需要使用路径(path),路径是一系列连续的线段和曲线段的集合。路径绘制的基本步骤如下:
- 调用
beginPath()
方法创建新的路径; - 调用路径绘制方法,例如
moveTo()
、lineTo()
、arc()
等,来添加路径上的点; - 调用
closePath()
方法关闭路径; - 调用
stroke()
或fill()
方法绘制路径。
例如,以下代码绘制了一个多边形:
javascriptCopy Codevar canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.moveTo(75, 50);
ctx.lineTo(100, 75);
ctx.lineTo(100, 25);
ctx.fillStyle = "#FF0000";
ctx.fill();
文字绘制
通过使用 fillText()
和 strokeText()
方法可以在画布上绘制文字。
例如,以下代码在画布上绘制了一段文字:
javascriptCopy Codevar canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
ctx.font = "30px Arial";
ctx.fillStyle = "#000000";
ctx.fillText("Hello World", 10, 50);
实例演示
以下是一个使用画布绘制动画的实例:
htmlCopy Code<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Canvas Example</title>
</head>
<body onload="draw()">
<canvas id="myCanvas" width="300" height="150"></canvas>
<script>
function draw() {
var canvas = document.getElementById("myCanvas");
var ballRadius = 10;
var x = canvas.width / 2;
var y = canvas.height - 30;
var dx = 2;
var dy = -2;
function drawBall() {
var ctx = canvas.getContext("2d");
ctx.beginPath();
ctx.arc(x, y, ballRadius, 0, Math.PI * 2);
ctx.fillStyle = "#0095DD";
ctx.fill();
ctx.closePath();
}
function draw() {
var ctx = canvas.getContext("2d");
ctx.clearRect(0, 0, canvas.width, canvas.height);
drawBall();
x += dx;
y += dy;
if (x + dx > canvas.width - ballRadius || x + dx < ballRadius) {
dx = -dx;
}
if (y + dy > canvas.height - ballRadius || y + dy < ballRadius) {
dy = -dy;
}
}
setInterval(draw, 10);
}
</script>
</body>
</html>
该实例通过不断改变小球的位置,产生了一个简单的动画效果。