HTML 画布学习笔记

简介

HTML 画布是 HTML5 中新增的一个元素,它可以让开发者在页面上自由绘制各种形状、图像和动画等内容,为网页提供更加丰富多彩的视觉效果。

基本用法

使用 HTML 画布需要以下步骤:

  1. 在 HTML 页面中创建一个 <canvas> 元素;
  2. 使用 JavaScript 获取该元素,并获取其绘图上下文(context);
  3. 通过调用上下文对象的方法,完成所需的绘制操作。

例如,以下代码将在页面上创建一个 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 Code
var 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),路径是一系列连续的线段和曲线段的集合。路径绘制的基本步骤如下:

  1. 调用 beginPath() 方法创建新的路径;
  2. 调用路径绘制方法,例如 moveTo()lineTo()arc() 等,来添加路径上的点;
  3. 调用 closePath() 方法关闭路径;
  4. 调用 stroke()fill() 方法绘制路径。

例如,以下代码绘制了一个多边形:

javascriptCopy Code
var 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 Code
var 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>

该实例通过不断改变小球的位置,产生了一个简单的动画效果。