当前位置:首页 > JavaScript

js 实现画布

2026-02-01 10:28:16JavaScript

使用 Canvas API 绘制基础图形

在 HTML 中创建 <canvas> 元素并设置宽高:

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

通过 JavaScript 获取画布上下文:

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

绘制矩形(填充与描边):

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

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

绘制路径与自定义形状

使用路径绘制三角形:

ctx.beginPath();
ctx.moveTo(100, 150); // 起点
ctx.lineTo(150, 250);
ctx.lineTo(50, 250);
ctx.closePath(); // 闭合路径
ctx.fillStyle = 'green';
ctx.fill();

绘制圆形/圆弧:

ctx.beginPath();
ctx.arc(300, 200, 50, 0, Math.PI * 2); // (x, y, radius, startAngle, endAngle)
ctx.strokeStyle = 'purple';
ctx.stroke();

添加文本与图像

绘制文本:

ctx.font = '24px Arial';
ctx.fillStyle = 'black';
ctx.fillText('Hello Canvas', 50, 30);

ctx.strokeText('Outline Text', 200, 30);

加载并绘制图像:

const img = new Image();
img.src = 'image.png';
img.onload = () => {
  ctx.drawImage(img, 250, 150, 100, 100); // (image, x, y, width, height)
};

实现动画效果

使用 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();

处理用户交互

监听鼠标事件实现绘图板:

let isDrawing = false;
canvas.addEventListener('mousedown', () => isDrawing = true);
canvas.addEventListener('mouseup', () => isDrawing = false);
canvas.addEventListener('mousemove', (e) => {
  if (!isDrawing) return;
  ctx.lineTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
  ctx.stroke();
  ctx.beginPath();
  ctx.moveTo(e.clientX - canvas.offsetLeft, e.clientY - canvas.offsetTop);
});

保存画布内容

将画布导出为图像:

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

js 实现画布

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

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swip…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

Vue实现画布

Vue实现画布

Vue 实现画布的方法 在 Vue 中实现画布功能可以通过 HTML5 的 <canvas> 元素结合 Vue 的响应式特性来完成。以下是几种常见的实现方式: 使用原生 <can…

js实现tab选项卡切换

js实现tab选项卡切换

实现Tab选项卡切换的JavaScript方法 使用纯JavaScript实现Tab切换功能,可以通过监听点击事件动态切换内容显示状态。以下是两种常见实现方式: 基础DOM操作实现 /…

js实现vr

js实现vr

使用WebXR API实现VR体验 WebXR是浏览器中实现VR和AR体验的标准API,它取代了早期的WebVR。现代浏览器如Chrome、Edge和Firefox已支持WebXR。 // 初始化…