当前位置:首页 > JavaScript

js实现画图工具

2026-04-04 10:22:51JavaScript

使用Canvas API实现基础画图工具

HTML中需添加<canvas>元素并设置宽高:

<canvas id="drawingCanvas" width="800" height="600"></canvas>

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

添加样式控制功能

创建颜色和粗细选择控件:

<input type="color" id="colorPicker">
<input type="range" id="brushSize" min="1" max="50" value="5">

更新绘图样式:

const colorPicker = document.getElementById('colorPicker');
const brushSize = document.getElementById('brushSize');

colorPicker.addEventListener('change', (e) => {
    ctx.strokeStyle = e.target.value;
});

brushSize.addEventListener('input', (e) => {
    ctx.lineWidth = e.target.value;
});

实现橡皮擦功能

添加橡皮擦切换按钮:

<button id="eraserBtn">橡皮擦</button>

JavaScript切换逻辑:

const eraserBtn = document.getElementById('eraserBtn');
let isEraser = false;

eraserBtn.addEventListener('click', () => {
    isEraser = !isEraser;
    if (isEraser) {
        ctx.globalCompositeOperation = 'destination-out';
    } else {
        ctx.globalCompositeOperation = 'source-over';
    }
});

保存和清除画布

添加功能按钮:

<button id="saveBtn">保存</button>
<button id="clearBtn">清除</button>

实现对应功能:

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

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

移动端触摸支持

添加触摸事件处理:

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

进阶功能扩展

实现矩形和圆形绘制:

js实现画图工具

let currentTool = 'brush';

document.getElementById('rectBtn').addEventListener('click', () => {
    currentTool = 'rect';
});

document.getElementById('circleBtn').addEventListener('click', () => {
    currentTool = 'circle';
});

let startX, startY;

canvas.addEventListener('mousedown', (e) => {
    startX = e.offsetX;
    startY = e.offsetY;
    if (currentTool === 'brush') startDrawing(e);
});

canvas.addEventListener('mouseup', (e) => {
    const endX = e.offsetX;
    const endY = e.offsetY;

    if (currentTool === 'rect') {
        ctx.strokeRect(startX, startY, endX - startX, endY - startY);
    }
    if (currentTool === 'circle') {
        const radius = Math.sqrt(Math.pow(endX - startX, 2) + Math.pow(endY - startY, 2));
        ctx.beginPath();
        ctx.arc(startX, startY, radius, 0, Math.PI * 2);
        ctx.stroke();
    }
});

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

相关文章

react实现画图

react实现画图

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

js实现画图

js实现画图

使用Canvas API绘制图形 Canvas API是HTML5提供的原生绘图工具,通过JavaScript操作<canvas>元素实现2D图形绘制。基础步骤如下: 创建一个HTML文…

js实现画图工具

js实现画图工具

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

js 实现画图

js 实现画图

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

vue实现按需画图

vue实现按需画图

Vue 实现按需画图的方法 在 Vue 中实现按需画图通常涉及动态渲染图表或图形,常见场景包括数据可视化、交互式绘图等。以下是几种典型实现方式: 使用 Canvas 动态绘制 通过 Vue 的 re…

php实现画图

php实现画图

PHP实现画图的基本方法 PHP可以通过GD库或ImageMagick扩展实现图像绘制功能。GD库是PHP内置的常用图像处理库,而ImageMagick功能更强大但需要额外安装。 使用GD库创建图像…