当前位置:首页 > JavaScript

js 实现画板

2026-04-06 12:46:25JavaScript

使用 Canvas API 创建基础画板

HTML 中需添加 <canvas> 元素作为画布容器:

<canvas id="drawing-board" width="800" height="600"></canvas>

JavaScript 初始化画布并设置绘图上下文:

const canvas = document.getElementById('drawing-board');
const ctx = canvas.getContext('2d');
ctx.strokeStyle = '#000000'; // 默认画笔颜色
ctx.lineWidth = 5; // 默认线条粗细

实现鼠标绘图功能

监听鼠标事件实现自由绘制:

let isDrawing = false;

canvas.addEventListener('mousedown', (e) => {
    isDrawing = true;
    ctx.beginPath();
    ctx.moveTo(e.offsetX, e.offsetY);
});

canvas.addEventListener('mousemove', (e) => {
    if (!isDrawing) return;
    ctx.lineTo(e.offsetX, e.offsetY);
    ctx.stroke();
});

canvas.addEventListener('mouseup', () => isDrawing = false);
canvas.addEventListener('mouseout', () => isDrawing = false);

添加绘图工具控制

实现颜色和粗细选择功能:

<input type="color" id="color-picker" value="#000000">
<input type="range" id="brush-size" min="1" max="50" value="5">

JavaScript 同步工具状态:

document.getElementById('color-picker').addEventListener('change', (e) => {
    ctx.strokeStyle = e.target.value;
});

document.getElementById('brush-size').addEventListener('input', (e) => {
    ctx.lineWidth = e.target.value;
});

实现清除画布功能

添加清除按钮及功能:

<button id="clear-btn">清除画布</button>

JavaScript 清除逻辑:

document.getElementById('clear-btn').addEventListener('click', () => {
    ctx.clearRect(0, 0, canvas.width, canvas.height);
});

进阶功能:保存绘图结果

通过转换为 Data URL 保存图像:

document.getElementById('save-btn').addEventListener('click', () => {
    const link = document.createElement('a');
    link.download = 'drawing.png';
    link.href = canvas.toDataURL('image/png');
    link.click();
});

触摸屏适配方案

添加触摸事件支持:

canvas.addEventListener('touchstart', (e) => {
    e.preventDefault();
    const touch = e.touches[0];
    const mouseEvent = new MouseEvent('mousedown', {
        clientX: touch.clientX,
        clientY: touch.clientY
    });
    canvas.dispatchEvent(mouseEvent);
});

// 类似添加 touchmove 和 touchend 事件

性能优化建议

对于复杂绘图可使用以下优化:

js 实现画板

// 使用 requestAnimationFrame 节流
function throttle(callback) {
    let waiting = false;
    return function() {
        if (!waiting) {
            requestAnimationFrame(() => {
                callback.apply(this, arguments);
                waiting = false;
            });
            waiting = true;
        }
    };
}

标签: 画板js
分享给朋友:

相关文章

vue实现画板

vue实现画板

Vue 实现画板功能 实现一个基于 Vue 的画板功能可以通过 HTML5 的 Canvas API 结合 Vue 的响应式特性完成。以下是具体实现方法: 创建 Vue 项目并初始化画布 安装 Vu…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…