当前位置:首页 > JavaScript

js实现画画

2026-01-31 23:49:39JavaScript

使用 Canvas API 绘制图形

HTML5 的 <canvas> 元素结合 JavaScript 的 Canvas API 可以实现丰富的绘图功能。以下是一个基础示例:

<canvas id="drawCanvas" width="500" height="500"></canvas>
<script>
  const canvas = document.getElementById('drawCanvas');
  const ctx = canvas.getContext('2d');

  // 绘制矩形
  ctx.fillStyle = 'red';
  ctx.fillRect(50, 50, 100, 100);

  // 绘制圆形
  ctx.beginPath();
  ctx.arc(300, 300, 50, 0, Math.PI * 2);
  ctx.fillStyle = 'blue';
  ctx.fill();
</script>

实现自由绘制功能

通过监听鼠标事件可以实现自由绘画板:

const canvas = document.getElementById('drawCanvas');
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;
  draw(e);
}

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

  ctx.lineWidth = 5;
  ctx.lineCap = 'round';
  ctx.strokeStyle = '#000';

  ctx.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
  ctx.stroke();
  ctx.beginPath();
  ctx.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
}

function stopDrawing() {
  isDrawing = false;
  ctx.beginPath();
}

使用 SVG 实现矢量绘图

SVG 是另一种在网页上绘制图形的方案:

<svg id="svgCanvas" width="500" height="500" style="border:1px solid #000"></svg>
<script>
  const svg = document.getElementById('svgCanvas');

  // 添加矩形
  const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
  rect.setAttribute('x', 50);
  rect.setAttribute('y', 50);
  rect.setAttribute('width', 100);
  rect.setAttribute('height', 100);
  rect.setAttribute('fill', 'green');
  svg.appendChild(rect);
</script>

使用第三方绘图库

对于更复杂的绘图需求,可以考虑使用专业绘图库:

  1. Paper.js - 矢量图形库
  2. Fabric.js - 交互式绘图库
  3. Konva.js - 2D绘图库
  4. Three.js - 3D绘图库

以 Paper.js 为例:

<canvas id="paperCanvas" width="500" height="500"></canvas>
<script src="https://cdnjs.cloudflare.com/ajax/libs/paper.js/0.12.15/paper-full.min.js"></script>
<script>
  paper.setup('paperCanvas');
  const path = new paper.Path();
  path.strokeColor = 'black';

  paper.view.onMouseMove = (event) => {
    path.add(event.point);
  };
</script>

保存绘图结果

可以将画布内容导出为图像:

function saveAsImage() {
  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.8;
}

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

以上方法提供了从基础到进阶的 JavaScript 绘图实现方案,可根据具体需求选择合适的技术方案。

标签: js
分享给朋友:

相关文章

jquery.js

jquery.js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,用于简化 HTML 文档遍历、事件处理、动画设计和 Ajax 交互。它的设计宗旨是“Write Less, Do Mor…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现投球

js实现投球

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

js实现视口

js实现视口

js实现视口检测的方法 使用JavaScript检测元素是否进入视口(viewport)可以通过Intersection Observer API或手动计算元素位置实现。以下是两种常见方法: Int…

js验证码的实现

js验证码的实现

验证码的基本实现原理 验证码(CAPTCHA)的核心目标是区分人类用户和自动化程序。JavaScript可用于生成或验证客户端验证码,但需注意纯前端验证可能被绕过,通常需结合后端验证。 纯前端验证码…

js实现图片滚动

js实现图片滚动

图片滚动的实现方法 使用CSS动画实现 通过CSS的animation和@keyframes可以实现简单的图片滚动效果。这种方法适合静态图片的无缝循环滚动。 <style> .scr…