当前位置:首页 > JavaScript

js实现画布

2026-02-01 19:27:05JavaScript

使用Canvas API创建画布

在HTML中通过<canvas>标签创建画布基础结构,需设置宽度和高度属性:

<canvas id="myCanvas" width="500" height="300"></canvas>

通过JavaScript获取画布上下文并设置绘图环境:

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

基本绘图操作

绘制矩形可使用以下方法:

ctx.fillStyle = 'red';  // 设置填充颜色
ctx.fillRect(50, 50, 100, 75);  // 绘制填充矩形(x,y,width,height)

ctx.strokeStyle = 'blue';  // 设置描边颜色
ctx.lineWidth = 3;  // 设置线宽
ctx.strokeRect(200, 50, 100, 75);  // 绘制描边矩形

绘制路径时需使用路径命令:

ctx.beginPath();
ctx.moveTo(100, 150);  // 起点
ctx.lineTo(250, 150);  // 直线
ctx.arc(200, 200, 50, 0, Math.PI * 2);  // 圆形
ctx.closePath();  // 闭合路径
ctx.fill();  // 填充路径

文本与图像处理

绘制文本需设置字体属性:

js实现画布

ctx.font = '24px Arial';
ctx.fillStyle = 'green';
ctx.fillText('Hello Canvas', 150, 100);  // 填充文本
ctx.strokeText('Hello Canvas', 150, 130);  // 描边文本

加载并绘制图像:

const img = new Image();
img.src = 'image.png';
img.onload = function() {
  ctx.drawImage(img, 0, 0, 200, 150);  // 绘制缩放图像
};

动画实现

使用requestAnimationFrame实现动画循环:

let x = 0;
function animate() {
  ctx.clearRect(0, 0, canvas.width, canvas.height);  // 清空画布
  ctx.fillRect(x, 100, 50, 50);
  x += 2;
  if (x < canvas.width) {
    requestAnimationFrame(animate);
  }
}
animate();

高级特性应用

实现粒子系统可创建对象数组:

js实现画布

const particles = [];
for (let i = 0; i < 100; i++) {
  particles.push({
    x: Math.random() * canvas.width,
    y: Math.random() * canvas.height,
    size: Math.random() * 5 + 2
  });
}

function drawParticles() {
  particles.forEach(p => {
    ctx.beginPath();
    ctx.arc(p.x, p.y, p.size, 0, Math.PI * 2);
    ctx.fill();
  });
}

添加交互事件监听:

canvas.addEventListener('mousemove', (e) => {
  const rect = canvas.getBoundingClientRect();
  const x = e.clientX - rect.left;
  const y = e.clientY - rect.top;
  ctx.clearRect(0, 0, canvas.width, canvas.height);
  ctx.fillRect(x - 25, y - 25, 50, 50);
});

性能优化技巧

离屏渲染可提升复杂场景性能:

const offscreen = document.createElement('canvas');
offscreen.width = 200;
offscreen.height = 200;
const offCtx = offscreen.getContext('2d');
// 在离屏画布上预绘制
offCtx.fillRect(0, 0, 200, 200);
// 主画布上快速绘制
ctx.drawImage(offscreen, 0, 0);

使用willReadFrequently属性优化频繁读取操作:

const ctx = canvas.getContext('2d', { willReadFrequently: true });

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

相关文章

js 实现vue

js 实现vue

实现 Vue 的核心功能 在 JavaScript 中实现 Vue 的核心功能需要模拟数据绑定、虚拟 DOM 和响应式系统。以下是一个简化版的实现思路: 响应式系统 通过 Object.defin…

js实现

js实现

实现 JavaScript 功能的方法 在 JavaScript 中实现特定功能通常涉及多个步骤。以下是常见的实现方法: 基础语法和变量声明 使用 let 或 const 声明变量: let co…

原生js实现轮播图

原生js实现轮播图

基本结构搭建 HTML部分需要包含轮播图容器、图片列表及导航按钮。结构示例如下: <div class="slider-container"> <div class="slid…

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaS…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounc…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点…