使用canvas实现一个loading的效果

在前端开发中,使用HTML5的<canvas>元素可以实现各种动态效果,包括loading动画。以下是一个简单的示例,展示如何使用canvas创建一个基本的loading动画。

首先,在HTML文件中添加一个<canvas>元素:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Loading Animation with Canvas</title>
    <style>
        body {
            display: flex;
            justify-content: center;
            align-items: center;
            height: 100vh;
            background-color: #f5f5f5;
        }
        canvas {
            border: 1px solid black;
        }
    </style>
</head>
<body>
    <canvas id="loadingCanvas" width="200" height="200"></canvas>
    <script src="script.js"></script>
</body>
</html>

然后,在script.js文件中添加JavaScript代码来实现loading动画:

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

let angle = 0;
const speed = 0.02;
const radius = 70;
const centerX = canvas.width / 2;
const centerY = canvas.height / 2;

function drawCircle(x, y, radius, color) {
    ctx.beginPath();
    ctx.arc(x, y, radius, 0, Math.PI * 2, false);
    ctx.fillStyle = color;
    ctx.fill();
    ctx.closePath();
}

function animate() {
    ctx.clearRect(0, 0, canvas.width, canvas.height); // 清除画布上的内容

    // 绘制一个静态的灰色圆圈作为背景
    drawCircle(centerX, centerY, radius, '#ddd');

    // 绘制一个动态的彩色圆圈作为loading动画
    ctx.save(); // 保存当前状态
    ctx.translate(centerX, centerY); // 将坐标原点移动到画布中心
    ctx.rotate(angle); // 旋转坐标系
    ctx.translate(-centerX, -centerY); // 将坐标原点移回原位置
    drawCircle(centerX, centerY, radius - 10, '#3498db'); // 绘制一个稍小的圆圈,以创建环形效果
    ctx.restore(); // 恢复之前保存的状态

    angle += speed; // 更新角度,以创建动画效果
    if (angle > Math.PI * 2) {
        angle = 0; // 如果角度超过360度,则重置为0度,以避免数值溢出
    }

    requestAnimationFrame(animate); // 使用requestAnimationFrame来循环调用animate函数,以创建平滑的动画效果
}

animate(); // 开始动画

这段代码创建了一个简单的loading动画,其中一个静态的灰色圆圈作为背景,一个动态的蓝色圆圈在上面旋转,从而创建了一个基本的loading效果。你可以根据需要调整颜色、大小、速度和其他参数来定制这个动画。

posted @   王铁柱6  阅读(22)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
点击右上角即可分享
微信分享提示