当前位置:首页 > JavaScript

js 实现画布

2026-04-06 03:10:34JavaScript

使用 JavaScript 实现画布

创建画布元素

在 HTML 文件中添加一个 <canvas> 元素,并为其指定宽度和高度。可以通过 JavaScript 动态创建或直接在 HTML 中定义。

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

获取画布上下文

通过 JavaScript 获取画布的渲染上下文(2D 或 WebGL),这里以 2D 上下文为例。

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

绘制基本图形

使用上下文对象(ctx)的方法绘制图形,例如矩形、圆形或路径。

绘制矩形

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

绘制圆形

js 实现画布

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

绘制路径

通过路径方法绘制自定义形状。

ctx.beginPath();
ctx.moveTo(300, 300); // 起点
ctx.lineTo(400, 300); // 直线到点
ctx.lineTo(350, 400); // 直线到点
ctx.closePath(); // 闭合路径
ctx.strokeStyle = 'purple';
ctx.stroke();

添加文本

在画布上绘制文本。

ctx.font = '20px Arial'; // 设置字体
ctx.fillStyle = 'black'; // 设置文本颜色
ctx.fillText('Hello Canvas', 50, 450); // 绘制填充文本
ctx.strokeText('Hello Canvas', 50, 480); // 绘制边框文本

清除画布

使用 clearRect 方法清除画布内容。

js 实现画布

ctx.clearRect(0, 0, canvas.width, canvas.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();

事件交互

为画布添加事件监听器,实现交互功能。

canvas.addEventListener('click', (event) => {
    const x = event.clientX - canvas.offsetLeft;
    const y = event.clientY - canvas.offsetTop;
    ctx.fillStyle = 'orange';
    ctx.fillRect(x, y, 30, 30);
});

保存画布内容

将画布内容导出为图像。

const dataURL = canvas.toDataURL('image/png'); // 生成 Base64 编码的图像数据
const link = document.createElement('a');
link.href = dataURL;
link.download = 'canvas-image.png'; // 下载文件名
link.click();

注意事项

  • 画布默认是透明的,未绘制区域显示为空白。
  • 坐标系原点 (0, 0) 位于画布左上角。
  • 使用 requestAnimationFrame 实现动画比 setInterval 更高效。

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

相关文章

js实现轮播图

js实现轮播图

轮播图实现方法 基础HTML结构 <div class="slider"> <div class="slides"> <img src="image1.jpg…

Vue实现画布

Vue实现画布

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

js实现列表

js实现列表

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

js防抖和节流实现

js防抖和节流实现

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

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…