HTML5 <canvas>
元素
HTML5 引入了 <canvas>
元素,使得在网页中绘制图形变得更加容易。通过 <canvas>
,你可以动态地绘制图像、图表、动画和其他图形内容。它提供了一个固定大小的区域,你可以使用 JavaScript 访问并绘制。
1. 基本语法
<canvas id="myCanvas" width="500" height="400">
您的浏览器不支持Canvas元素。
</canvas>
id
:指定<canvas>
元素的唯一标识符。width
:指定画布的宽度,默认值为 300px。height
:指定画布的高度,默认值为 150px。
如果浏览器不支持 <canvas>
元素,<canvas>
标签中的文本内容会显示出来。
2. 获取 2D 绘图上下文
绘制图形需要通过 JavaScript 获取到画布的绘图上下文。常见的上下文类型是 2D 和 WebGL。下面是获取 2D上下文的代码:
<script>
var canvas = document.getElementById("myCanvas");
var ctx = canvas.getContext("2d");
</script>
getContext("2d")
:用于获取 2D 渲染上下文,它提供了绘制图形的多种方法。getContext("webgl")
:用于获取 WebGL 渲染上下文,支持 3D 图形绘制。
3. 绘制基本形状
通过 2D 上下文,你可以绘制各种基本形状,如矩形、圆形、线条、文本等。
1. 绘制矩形
// 绘制填充矩形
ctx.fillStyle = "blue"; // 设置填充颜色
ctx.fillRect(50, 50, 150, 100); // 参数:x, y, width, height
// 绘制空心矩形
ctx.strokeStyle = "red"; // 设置边框颜色
ctx.strokeRect(250, 50, 150, 100); // 参数:x, y, width, height
// 清空矩形区域
ctx.clearRect(100, 100, 50, 50); // 参数:x, y, width, height
2. 绘制圆形
// 绘制填充圆形
ctx.beginPath(); // 开始路径
ctx.arc(200, 200, 50, 0, 2 * Math.PI); // 参数:圆心x, 圆心y, 半径, 起始角度, 结束角度
ctx.fillStyle = "green";
ctx.fill(); // 填充圆形
// 绘制空心圆形
ctx.beginPath();
ctx.arc(400, 200, 50, 0, 2 * Math.PI);
ctx.strokeStyle = "purple";
ctx.stroke(); // 绘制圆形的边框
3. 绘制直线
// 绘制直线
ctx.beginPath();
ctx.moveTo(50, 300); // 起始点
ctx.lineTo(450, 300); // 结束点
ctx.strokeStyle = "orange";
ctx.stroke(); // 绘制路径
4. 绘制文字
// 绘制文本
ctx.font = "30px Arial"; // 设置字体大小和字体
ctx.fillStyle = "black"; // 设置文本颜色
ctx.fillText("Hello, Canvas!", 100, 100); // 参数:文本, x, y
4. 渐变和阴影
1. 线性渐变
// 创建线性渐变
var grd = ctx.createLinearGradient(0, 0, canvas.width, 0); // 创建一个从左到右的渐变
grd.addColorStop(0, "red"); // 渐变起始颜色
grd.addColorStop(1, "blue"); // 渐变结束颜色
// 使用渐变填充矩形
ctx.fillStyle = grd;
ctx.fillRect(50, 150, 400, 100);
2. 径向渐变
// 创建径向渐变
var grd = ctx.createRadialGradient(300, 200, 50, 300, 200, 200); // 创建一个从圆心扩展的渐变
grd.addColorStop(0, "yellow");
grd.addColorStop(1, "green");
// 使用渐变填充圆形
ctx.fillStyle = grd;
ctx.beginPath();
ctx.arc(300, 200, 150, 0, 2 * Math.PI);
ctx.fill();
3. 添加阴影
ctx.shadowColor = "rgba(0, 0, 0, 0.5)"; // 设置阴影颜色
ctx.shadowBlur = 10; // 设置阴影的模糊程度
ctx.shadowOffsetX = 5; // 设置阴影在X轴的偏移
ctx.shadowOffsetY = 5; // 设置阴影在Y轴的偏移
// 绘制带阴影的矩形
ctx.fillStyle = "orange";
ctx.fillRect(50, 50, 150, 100);
5. 路径和贝塞尔曲线
1. 绘制路径
ctx.beginPath();
ctx.moveTo(50, 50);
ctx.lineTo(150, 150);
ctx.lineTo(250, 50);
ctx.closePath();
ctx.stroke(); // 绘制路径
2. 贝塞尔曲线
// 绘制二次贝塞尔曲线
ctx.beginPath();
ctx.moveTo(50, 200); // 起始点
ctx.quadraticCurveTo(200, 100, 400, 200); // 控制点和结束点
ctx.stroke();
// 绘制三次贝塞尔曲线
ctx.beginPath();
ctx.moveTo(50, 250);
ctx.bezierCurveTo(150, 150, 250, 350, 350, 250); // 控制点和结束点
ctx.stroke();
6. 动画效果
通过 requestAnimationFrame()
方法,可以实现更平滑的动画效果。下面是一个简单的动画示例:
var x = 0;
function animate() {
ctx.clearRect(0, 0, canvas.width, canvas.height); // 清空画布
ctx.fillStyle = "red";
ctx.beginPath();
ctx.arc(x, 200, 50, 0, 2 * Math.PI);
ctx.fill();
x += 2; // 更新x坐标
if (x > canvas.width) x = 0; // 重置x坐标
requestAnimationFrame(animate); // 请求下一帧
}
animate(); // 启动动画
7. 导出和导入图像
1. 导出 Canvas 内容为图片
var dataURL = canvas.toDataURL(); // 将canvas内容导出为图片的Data URL
console.log(dataURL); // 打印出Base64编码的图片数据
2. 导入图片到 Canvas
var img = new Image();
img.onload = function() {
ctx.drawImage(img, 0, 0, canvas.width, canvas.height); // 将图片绘制到canvas上
};
img.src = "image.jpg"; // 设置图片路径
总结
HTML5 <canvas>
元素是一个强大的工具,允许你在网页上绘制图形、制作动画和图表。它的用途非常广泛,涵盖了游戏开发、数据可视化、图像处理等领域。通过配合 JavaScript,你可以轻松地创建交互性强、动态的网页内容。
发表回复