使用canvas制作一个画板

170 阅读2分钟

使用 Canvas 制作一个画板

在这篇文章中,我们将介绍如何使用 HTML5 的 <canvas> 元素创建一个简单的画板应用。这个画板可以让用户自由绘画,支持不同颜色和画笔大小的选择。

1. 创建 HTML 结构

首先,我们需要创建一个基本的 HTML 文件,包含一个 <canvas> 元素和一些控制选项。

<!DOCTYPE html>
<html lang="zh">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Canvas 画板</title>
    <style>
        #canvas {
            border: 1px solid #000;
        }
        .controls {
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="controls">
        <label for="color">选择颜色:</label>
        <input type="color" id="color" value="#000000">
        <label for="size">画笔大小:</label>
        <input type="number" id="size" value="5" min="1" max="100">
        <button id="clear">清空画布</button>
    </div>
    <canvas id="canvas" width="800" height="600"></canvas>

    <script src="script.js"></script>
</body>
</html>

2. 编写 JavaScript 逻辑

接下来,我们需要编写 JavaScript 代码,以实现画板的功能。

// script.js

const canvas = document.getElementById('canvas');
const ctx = canvas.getContext('2d');

let painting = false; // 是否在绘画
let color = '#000000'; // 默认颜色
let size = 5; // 默认画笔大小

// 开始绘画
function startPosition(e) {
    painting = true;
    draw(e); // 确保在开始时绘制
}

// 停止绘画
function endPosition() {
    painting = false;
    ctx.beginPath(); // 重置路径
}

// 绘制函数
function draw(e) {
    if (!painting) return;

    ctx.lineWidth = size; // 设置画笔大小
    ctx.lineCap = 'round'; // 画笔形状
    ctx.strokeStyle = color; // 设置颜色

    // 获取鼠标位置
    const rect = canvas.getBoundingClientRect();
    ctx.lineTo(e.clientX - rect.left, e.clientY - rect.top);
    ctx.stroke();
    ctx.beginPath();
    ctx.moveTo(e.clientX - rect.left, e.clientY - rect.top);
}

// 事件监听
canvas.addEventListener('mousedown', startPosition);
canvas.addEventListener('mouseup', endPosition);
canvas.addEventListener('mousemove', draw);

// 颜色选择
document.getElementById('color').addEventListener('input', (e) => {
    color = e.target.value;
});

// 画笔大小选择
document.getElementById('size').addEventListener('input', (e) => {
    size = e.target.value;
});

// 清空画布
document.getElementById('clear').addEventListener('click', () => {
    ctx.clearRect(0, 0, canvas.width, canvas.height); // 清空画布
});

3. 代码解析

HTML 部分

  1. Canvas 元素:用于绘图的区域,设置了宽度和高度。
  2. 控制面板:提供颜色选取器、画笔大小输入框和清空按钮。

JavaScript 部分

  • 获取 Canvas 上下文:使用 getContext('2d') 方法获取 2D 渲染上下文。
  • 绘图状态管理:通过 painting 变量来跟踪用户是否在绘画。
  • 事件处理
    • mousedown:开始绘画。
    • mouseup:停止绘画。
    • mousemove:绘制线条。
  • 颜色和大小选择:通过用户输入动态更新画笔的颜色和大小。
  • 清空画布:使用 clearRect 方法清空整个画布。

4. 小结

通过以上步骤,我们创建了一个简单的画板应用。用户可以选择颜色和画笔大小,自由绘制。这个应用展示了 HTML5 <canvas> 的强大功能以及与 JavaScript 的交互。

您可以根据需求扩展这个画板,比如添加撤销功能、保存图像等。希望这篇文章能够帮助您理解如何使用 Canvas 创建绘图应用。