ZetCode

JavaScript Canvas fillText 教程

最后修改于 2025 年 4 月 3 日

在本文中,我们将探讨 JavaScript 中的 Canvas fillText 方法。此方法对于在 HTML canvas 元素上绘制文本至关重要。掌握文本渲染是创建丰富的图形界面的关键。

基本定义

Canvas fillText 是一个在 canvas 上绘制填充文本的方法。与勾勒文本的 strokeText 不同,fillText 创建的是实心文本。可以通过字体、颜色和对齐属性来自定义外观。

主要的文本方法是 fillTextstrokeText。这些方法与 fonttextAligntextBaseline 等字体属性配合使用,以控制文本的渲染。

基本的 fillText 用法

此示例演示了如何使用 fillText 在 canvas 上绘制简单文本。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Basic Canvas fillText</title>
</head>
<body>

<canvas id="myCanvas" width="300" height="200"></canvas>

<script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
    ctx.font = '30px Arial';
    ctx.fillStyle = 'blue';
    ctx.fillText('Hello Canvas', 50, 50);
</script>

</body>
</html>

在这个基本示例中,我们创建一个 canvas 元素并获取其 2D 渲染上下文。我们将字体设置为 30px Arial,填充颜色设置为蓝色。

fillText 方法在位置 (50,50) 绘制文本“Hello Canvas”。这展示了在 canvas 上渲染文本的最简单方法。

带有自定义字体和颜色的文本

此示例展示了如何自定义字体属性和文本颜色。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Custom Font Text</title>
</head>
<body>

<canvas id="myCanvas" width="400" height="200"></canvas>

<script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
    // First text with serif font
    ctx.font = 'italic bold 36px Georgia';
    ctx.fillStyle = 'red';
    ctx.fillText('Styled Text', 50, 80);
    
    // Second text with sans-serif font
    ctx.font = '20px Verdana';
    ctx.fillStyle = 'green';
    ctx.fillText('Different Style', 50, 150);
</script>

</body>
</html>

在这里,我们在同一 canvas 上演示了两种不同的文本样式。第一个文本使用 Georgia 字体,具有斜体和粗体样式,大小为 36px。

第二个文本使用 Verdana 字体,大小为 20px,颜色为绿色。这展示了如何在同一 canvas 上渲染具有不同样式的多个文本元素。

文本对齐和基线

此示例演示了文本对齐和基线属性。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Text Alignment</title>
</head>
<body>

<canvas id="myCanvas" width="400" height="300"></canvas>

<script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
    // Draw reference line
    ctx.strokeStyle = 'gray';
    ctx.beginPath();
    ctx.moveTo(200, 0);
    ctx.lineTo(200, 300);
    ctx.stroke();
    
    // Center-aligned text
    ctx.font = '20px Arial';
    ctx.textAlign = 'center';
    ctx.textBaseline = 'top';
    ctx.fillText('Top Aligned', 200, 50);
    
    // Right-aligned text
    ctx.textAlign = 'right';
    ctx.textBaseline = 'middle';
    ctx.fillText('Middle Baseline', 200, 150);
    
    // Left-aligned text
    ctx.textAlign = 'left';
    ctx.textBaseline = 'bottom';
    ctx.fillText('Bottom Baseline', 200, 250);
</script>

</body>
</html>

此示例显示了 textAlign 和 textBaseline 属性如何影响文本定位。垂直参考线有助于可视化对齐点。

第一个文本是居中对齐,顶部基线。第二个文本是右对齐,中间基线。第三个文本是左对齐,底部基线。

带有阴影效果的文本

此示例展示了如何为 canvas 文本添加阴影效果。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Text Shadow</title>
</head>
<body>

<canvas id="myCanvas" width="400" height="200"></canvas>

<script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
    // Shadow settings
    ctx.shadowColor = 'rgba(0, 0, 0, 0.5)';
    ctx.shadowBlur = 10;
    ctx.shadowOffsetX = 5;
    ctx.shadowOffsetY = 5;
    
    // Text with shadow
    ctx.font = '40px Impact';
    ctx.fillStyle = 'red';
    ctx.fillText('Shadow Effect', 50, 100);
    
    // Text without shadow
    ctx.shadowColor = 'transparent';
    ctx.fillStyle = 'blue';
    ctx.fillText('No Shadow', 50, 150);
</script>

</body>
</html>

在这里,我们使用阴影属性创建了具有投影效果的文本。shadowColor、shadowBlur 和 shadowOffset 属性控制效果。

第一个文本具有半透明的黑色阴影,带有模糊和偏移。第二个文本演示了如何通过设置透明颜色来禁用阴影。

带有渐变填充的文本

此示例展示了如何使用渐变填充文本而不是纯色。

index.html
<!DOCTYPE html>
<html>
<head>
    <title>Gradient Text</title>
</head>
<body>

<canvas id="myCanvas" width="400" height="200"></canvas>

<script>
    const canvas = document.getElementById('myCanvas');
    const ctx = canvas.getContext('2d');
    
    // Create gradient
    const gradient = ctx.createLinearGradient(0, 0, canvas.width, 0);
    gradient.addColorStop(0, 'red');
    gradient.addColorStop(0.5, 'yellow');
    gradient.addColorStop(1, 'blue');
    
    // Apply gradient to text
    ctx.font = 'bold 50px Arial';
    ctx.fillStyle = gradient;
    ctx.fillText('Gradient Text', 20, 100);
</script>

</body>
</html>

此示例创建了一个从红色到黄色再到蓝色的水平渐变。该渐变被用作文本的填充样式。

createLinearGradient 定义了渐变方向。addColorStop 添加了颜色过渡点。然后使用该渐变以粗体 50px Arial 字体填充文本。

来源

MDN Canvas fillText 文档

在本文中,我们探讨了使用 fillText 在 HTML canvas 上渲染文本的各种技术。掌握这些方法对于在 Web 图形和可视化中创建丰富的文本元素至关重要。

作者

我的名字是 Jan Bodnar,我是一位充满激情的程序员,拥有丰富的编程经验。我从 2007 年开始撰写编程文章。迄今为止,我已撰写了 1,400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 JS Canvas 教程