当前位置:首页 > JavaScript

js实现画布

2026-03-14 18:39:42JavaScript

使用Canvas API创建画布

在HTML中通过<canvas>标签创建画布元素,并设置宽度和高度属性:

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

获取画布上下文

通过JavaScript获取CanvasRenderingContext2D对象,这是绘图的核心接口:

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

绘制基本图形

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

ctx.fillStyle = 'red';
ctx.fillRect(50, 50, 100, 75); // 填充矩形

ctx.strokeStyle = 'blue';
ctx.lineWidth = 3;
ctx.strokeRect(200, 50, 100, 75); // 描边矩形

绘制路径(直线/三角形):

ctx.beginPath();
ctx.moveTo(50, 150);
ctx.lineTo(150, 150);
ctx.lineTo(100, 220);
ctx.closePath(); // 自动闭合路径
ctx.fillStyle = 'green';
ctx.fill();

绘制圆形与弧线

使用arc()方法绘制圆形:

ctx.beginPath();
ctx.arc(300, 150, 40, 0, Math.PI * 2);
ctx.fillStyle = 'purple';
ctx.fill();

绘制半圆:

ctx.beginPath();
ctx.arc(400, 150, 40, 0, Math.PI);
ctx.strokeStyle = 'orange';
ctx.stroke();

添加文本

设置字体样式并绘制文字:

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

ctx.strokeText('Stroke Text', 250, 280);

图像绘制

加载并绘制图像:

const img = new Image();
img.src = 'image.png';
img.onload = function() {
    ctx.drawImage(img, 350, 200, 100, 80);
};

动画实现

使用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) x = 0;
    requestAnimationFrame(animate);
}
animate();

事件交互示例

实现鼠标跟随效果:

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.fillStyle = 'rgba(0,0,255,0.5)';
    ctx.beginPath();
    ctx.arc(x, y, 30, 0, Math.PI*2);
    ctx.fill();
});

高级特性

使用save()restore()管理绘图状态:

ctx.save(); // 保存当前状态
ctx.fillStyle = 'yellow';
ctx.fillRect(50, 50, 100, 100);
ctx.restore(); // 恢复之前保存的状态

实现渐变效果:

js实现画布

const gradient = ctx.createLinearGradient(0, 0, 200, 0);
gradient.addColorStop(0, 'red');
gradient.addColorStop(1, 'white');
ctx.fillStyle = gradient;
ctx.fillRect(0, 0, 200, 200);

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

相关文章

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现tab选项卡切换

js实现tab选项卡切换

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现滚动

js实现滚动

实现滚动效果的方法 在JavaScript中实现滚动效果可以通过多种方式完成,以下是一些常见的方法: 使用window.scrollTo() window.scrollTo()方法可以将页面滚动到指…

js图片上传实现

js图片上传实现

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API实现基础图片上传功能。HTML部分需要设置accept="image/…

js实现图片放大

js实现图片放大

使用 CSS transform 实现图片放大 通过 CSS 的 transform: scale() 属性实现图片放大效果。当鼠标悬停时,图片会平滑放大。 const img = document…