当前位置:首页 > JavaScript

js 实现画图

2026-04-06 09:16:19JavaScript

使用 Canvas API 绘制图形

Canvas API 是 JavaScript 中用于绘制图形的核心工具,适用于创建动态、交互式的图形内容。

初始化 Canvas

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

绘制矩形

ctx.fillStyle = 'blue';
ctx.fillRect(10, 10, 100, 50);
ctx.strokeStyle = 'red';
ctx.strokeRect(50, 50, 80, 30);

绘制圆形

ctx.beginPath();
ctx.arc(150, 150, 50, 0, Math.PI * 2);
ctx.fillStyle = 'green';
ctx.fill();
ctx.stroke();

使用 SVG 创建矢量图形

SVG 是基于 XML 的矢量图形格式,可直接嵌入 HTML 或通过 JavaScript 动态操作。

静态 SVG 示例

<svg width="200" height="200">
  <circle cx="100" cy="100" r="50" fill="orange" />
</svg>

动态生成 SVG

const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("width", "200");
svg.setAttribute("height", "200");

const circle = document.createElementNS("http://www.w3.org/2000/svg", "circle");
circle.setAttribute("cx", "100");
circle.setAttribute("cy", "100");
circle.setAttribute("r", "50");
circle.setAttribute("fill", "purple");

svg.appendChild(circle);
document.body.appendChild(svg);

使用第三方库绘制图表

对于复杂图表需求,可借助专业库如 Chart.js 或 D3.js。

Chart.js 柱状图

new Chart(document.getElementById('chart'), {
  type: 'bar',
  data: {
    labels: ['A', 'B', 'C'],
    datasets: [{
      label: 'Values',
      data: [10, 20, 15],
      backgroundColor: ['#ff6384', '#36a2eb', '#cc65fe']
    }]
  }
});

D3.js 折线图

const data = [10, 25, 15, 30, 20];
const svg = d3.select("body").append("svg")
  .attr("width", 400)
  .attr("height", 200);

const line = d3.line()
  .x((d, i) => i * 50 + 20)
  .y(d => 100 - d);

svg.append("path")
  .datum(data)
  .attr("fill", "none")
  .attr("stroke", "steelblue")
  .attr("d", line);

实现交互式绘图

通过事件监听实现画布交互功能。

鼠标绘图示例

let isDrawing = false;
canvas.addEventListener('mousedown', startDrawing);
canvas.addEventListener('mousemove', draw);
canvas.addEventListener('mouseup', 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;
}

性能优化技巧

对于需要频繁更新的图形,采用以下策略提升性能。

离屏渲染

const offscreen = document.createElement('canvas');
const offCtx = offscreen.getContext('2d');

// 在离屏画布预渲染
offCtx.fillRect(0, 0, 100, 100);

// 主画布绘制时直接复制
ctx.drawImage(offscreen, 0, 0);

动画帧控制

js 实现画图

function animate() {
  requestAnimationFrame(animate);
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  // 绘制逻辑
}
animate();

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

相关文章

js实现拷贝

js实现拷贝

实现文本拷贝 使用 document.execCommand 方法(已废弃但兼容性较好): function copyText(text) { const textarea = document…

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…

js画图实现

js画图实现

使用Canvas API绘制图形 Canvas是HTML5提供的绘图API,通过JavaScript操作Canvas元素可以绘制各种图形。以下是一个简单的示例: <canvas id="myC…

利用js实现

利用js实现

使用 JavaScript 实现 在 JavaScript 中,可以通过多种方式实现功能,具体取决于需求。以下是几种常见的方法: 方法一:使用原生 JavaScript // 示例代码 funct…

节流js实现

节流js实现

节流(Throttle)的实现原理 节流是一种限制函数执行频率的技术,确保函数在一定时间间隔内最多执行一次。适用于高频触发事件(如滚动、输入、窗口调整等)的场景。 基础实现方式 使用时间戳判断是否执…

js 实现页面刷新

js 实现页面刷新

使用 location.reload() location.reload() 是原生 JavaScript 提供的页面刷新方法。调用该方法会重新加载当前页面,相当于点击浏览器的刷新按钮。 // 基本…