当前位置:首页 > JavaScript

js实现画图工具

2026-03-01 09:41:42JavaScript

实现基础画布与绘图功能

使用HTML5的Canvas API创建画布,并通过JavaScript监听鼠标事件实现绘图功能。以下是核心代码示例:

const canvas = document.getElementById('drawingCanvas');
const ctx = canvas.getContext('2d');
let isDrawing = false;

canvas.addEventListener('mousedown', startDrawing);
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('mouseup', stopDrawing);
canvas.addEventListener('mouseout', stopDrawing);

function startDrawing(e) {
    isDrawing = true;
    ctx.beginPath();
    ctx.moveTo(e.offsetX, e.offsetY);
}

function draw(e) {
    if (!isDrawing) return;
    ctx.lineTo(e.offsetX, e.offsetY);
    ctx.stroke();
}

function stopDrawing() {
    isDrawing = false;
}

添加绘图样式控制

扩展功能以支持线条颜色、粗细等样式调整:

// 颜色选择器
document.getElementById('colorPicker').addEventListener('change', (e) => {
    ctx.strokeStyle = e.target.value;
});

// 线宽控制
document.getElementById('lineWidth').addEventListener('change', (e) => {
    ctx.lineWidth = e.target.value;
});

// 线帽样式
document.getElementById('lineCap').addEventListener('change', (e) => {
    ctx.lineCap = e.target.value;
});

实现图形绘制功能

添加矩形、圆形等基本图形绘制模式:

let currentTool = 'pencil';

function setTool(tool) {
    currentTool = tool;
}

function drawShape(e) {
    if (!isDrawing) return;

    switch(currentTool) {
        case 'rectangle':
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.strokeRect(startX, startY, e.offsetX - startX, e.offsetY - startY);
            break;
        case 'circle':
            const radius = Math.sqrt(Math.pow(e.offsetX - startX, 2) + Math.pow(e.offsetY - startY, 2));
            ctx.clearRect(0, 0, canvas.width, canvas.height);
            ctx.beginPath();
            ctx.arc(startX, startY, radius, 0, Math.PI * 2);
            ctx.stroke();
            break;
    }
}

添加撤销与重做功能

使用数组保存绘图历史记录:

let drawingHistory = [];
let historyIndex = -1;

function saveCanvasState() {
    historyIndex++;
    drawingHistory = drawingHistory.slice(0, historyIndex);
    drawingHistory.push(canvas.toDataURL());
}

function undo() {
    if (historyIndex <= 0) return;
    historyIndex--;
    const img = new Image();
    img.onload = function() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(img, 0, 0);
    };
    img.src = drawingHistory[historyIndex];
}

function redo() {
    if (historyIndex >= drawingHistory.length - 1) return;
    historyIndex++;
    const img = new Image();
    img.onload = function() {
        ctx.clearRect(0, 0, canvas.width, canvas.height);
        ctx.drawImage(img, 0, 0);
    };
    img.src = drawingHistory[historyIndex];
}

实现画布保存功能

将画布内容导出为图像文件:

function saveCanvas() {
    const link = document.createElement('a');
    link.download = 'drawing.png';
    link.href = canvas.toDataURL('image/png');
    link.click();
}

响应式设计处理

使画布适应不同屏幕尺寸:

function resizeCanvas() {
    canvas.width = window.innerWidth * 0.8;
    canvas.height = window.innerHeight * 0.7;
}

window.addEventListener('resize', resizeCanvas);
resizeCanvas();

触摸屏支持

添加触摸事件处理以实现移动端兼容:

canvas.addEventListener('touchstart', handleTouch);
canvas.addEventListener('touchmove', handleTouch);

function handleTouch(e) {
    e.preventDefault();
    const touch = e.touches[0];
    const mouseEvent = {
        offsetX: touch.clientX - canvas.offsetLeft,
        offsetY: touch.clientY - canvas.offsetTop
    };

    if (e.type === 'touchstart') {
        startDrawing(mouseEvent);
    } else {
        draw(mouseEvent);
    }
}

性能优化建议

对于复杂绘图应用,可以考虑以下优化措施:

使用requestAnimationFrame进行动画绘制 实现离屏Canvas进行复杂操作 对频繁调用的函数进行节流处理 使用Web Workers处理计算密集型任务

这些代码片段组合起来可以构建一个功能完整的JavaScript绘图工具。根据具体需求,可以进一步扩展添加更多高级功能,如图层管理、滤镜效果或自定义画笔样式等。

js实现画图工具

标签: 画图工具
分享给朋友:

相关文章

vue实现按需画图

vue实现按需画图

Vue 实现按需画图的方案 在 Vue 中实现按需画图可以通过多种方式完成,常见的方法包括使用 Canvas、SVG 或第三方库如 ECharts、D3.js。以下是几种实现方案: 使用 Canv…

vue怎么实现画图

vue怎么实现画图

Vue 实现画图的方法 使用 HTML5 Canvas Vue 可以结合 HTML5 Canvas 实现画图功能。Canvas 提供了一系列 API 用于绘制图形、线条和文本。 <te…

vue实现勾选画图

vue实现勾选画图

Vue 实现勾选画图功能 在 Vue 中实现勾选画图功能,可以通过结合复选框(checkbox)和 Canvas 绘图 API 来完成。以下是具体实现方法: 1. 创建 Vue 组件结构 <…

react实现画图

react实现画图

React 实现画图的方法 React 可以通过多种方式实现画图功能,以下是几种常见的方法: 使用 Canvas API Canvas API 是 HTML5 提供的原生画图工具,适合绘制复杂的图形…

js实现画图工具

js实现画图工具

实现基础画布 使用HTML5的Canvas元素作为画布基础,通过JavaScript获取画布上下文。示例代码初始化一个全屏画布: <canvas id="drawingCanvas" widt…

js 实现画图

js 实现画图

使用Canvas API绘制图形 Canvas API是HTML5提供的原生绘图工具,通过JavaScript调用实现动态图形绘制。创建一个画布并绘制矩形示例: <canvas id="myC…