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

添加撤销与重做功能

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

js实现画图工具

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();
}

响应式设计处理

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

js实现画图工具

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绘图工具。根据具体需求,可以进一步扩展添加更多高级功能,如图层管理、滤镜效果或自定义画笔样式等。

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

相关文章

制作css工具

制作css工具

设计CSS工具的基本架构 CSS工具通常需要包含核心功能模块,如代码生成器、可视化编辑器、代码优化器和浏览器兼容性检查器。架构设计应当采用模块化方式,便于功能扩展和维护。 现代CSS工具常基于Web…

画图js实现

画图js实现

使用Canvas API绘制图形 Canvas API是HTML5提供的原生绘图工具,通过JavaScript操作Canvas元素实现绘图功能。需要获取Canvas的上下文(context)后调用绘图…

js 实现画图

js 实现画图

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

js 画图实现

js 画图实现

使用 Canvas API 绘制图形 Canvas API 是 HTML5 提供的原生绘图工具,通过 JavaScript 操作画布元素实现绘图。基本步骤如下: 在 HTML 中创建 <ca…

vue 实现工具

vue 实现工具

Vue 实现工具的常用方法 Vue CLI Vue CLI 是官方提供的脚手架工具,用于快速初始化 Vue 项目。支持插件系统,可集成 Babel、TypeScript、ESLint 等工具。 安装命…

制作css工具

制作css工具

CSS 工具制作指南 制作 CSS 工具可以帮助开发者更高效地编写和管理样式。以下是几种常见的 CSS 工具类型及其实现方法。 在线 CSS 生成器 创建一个在线工具,允许用户通过界面生成 CSS…