当前位置:首页 > 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);

添加绘图工具控制

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

js 实现画板

<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 清除逻辑:

js 实现画板

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 事件

性能优化建议

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

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

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

相关文章

js实现验证码

js实现验证码

使用Canvas生成图形验证码 在HTML中创建一个Canvas元素用于绘制验证码。通过JavaScript随机生成数字或字母组合,并添加干扰线、噪点等干扰元素增强安全性。 <canvas i…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现游标

js实现游标

使用JavaScript实现游标 在JavaScript中,可以通过操作DOM元素的cursor样式属性来实现自定义游标效果。以下是几种常见的实现方法: 修改默认鼠标指针样式 通过CSS的curso…

js实现投球

js实现投球

实现投球动画的基本思路 使用JavaScript和CSS动画结合的方式模拟投球效果。核心是通过改变元素的位置、旋转和缩放属性,配合定时器或CSS过渡实现平滑动画。 创建基础HTML结构 <di…