使用canvas实现一个loading的效果

news/2025/1/7 16:19:40/文章来源:https://www.cnblogs.com/ai888/p/18654362

在前端开发中,使用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效果。你可以根据需要调整颜色、大小、速度和其他参数来定制这个动画。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/864820.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

记一次cannot access its superinterface问题的的排查 → 强如Spring也一样写Bug

开心一刻 昨天在幼儿园,领着儿子在办公室跟他班主任聊他的情况 班主任:皓瑟,你跟我聊天是不是紧张呀 儿子:是的,老师 班主任:不用紧张,我虽然是你的班主任,但我也才22岁,你就把我当成班上的女同学 班主任继续补充道:你平时跟她们怎么聊,就跟我怎么聊,男孩子要果然,…

如何在织梦CMS中修改网站地图模板

织梦CMS是一款广泛使用的开源内容管理系统,适用于各种类型的网站。修改网站地图模板可以帮助您更好地控制网站的搜索引擎优化(SEO)。以下是详细的修改步骤和注意事项:登录织梦CMS后台:使用管理员账户登录织梦CMS后台。通常,后台地址为域名/dede或域名/admin。 输入用户名…

如何轻松修改织梦网站的宽度?

修改织梦CMS(DedeCMS)网站的宽度可以通过调整CSS样式来实现。以下是详细步骤:登录后台: 使用管理员账号登录织梦CMS后台。进入模板管理: 在左侧菜单中找到“模板管理”,点击进入。选择模板文件: 在模板管理页面中,找到包含网站布局的模板文件(如index.htm、header.htm…

如何轻松修改公司网站?

修改公司网站是一个重要的维护任务,可以提升网站的吸引力和用户体验。以下是详细步骤:确定修改需求:分析现状: 评估当前网站的优缺点,确定需要修改的部分。 收集反馈: 收集用户反馈和建议,了解用户的需求和期望。 制定计划: 制定详细的修改计划,包括修改的内容、时间表…

网站内容修改的操作位置及步骤

修改网站内容是日常维护和更新的重要任务。以下是详细的指南,帮助您顺利找到并修改网站内容:确定使用的CMS平台:不同的CMS平台有不同的操作方式。常见的CMS包括WordPress、Joomla、Drupal等。了解您所使用的具体平台及其内容管理机制。登录CMS后台管理系统:进入网站的后台管…

如何在txt网站制作中修改字体以提升视觉效果

在基于文本文件(TXT)的网站制作中修改字体是一项常见的需求。以下是详细的指南,帮助您顺利完成这一任务:选择合适的HTML模板:将纯文本文件转换为HTML格式,以便应用样式和字体设置。 使用简单的HTML结构,如<p>、<h1>、<h2>等标签来组织内容。编写CSS样…

【划重点】90%的人都会忽略!跨网文件安全交换需要注意的问题

跨网文件安全交换是现代企业日常运营中的一个关键环节,尤其是在内外网(例如公司内部网络与外部供应商、客户之间的文件传输),或者内部不同隔离网之间进行数据交换时。由于涉及敏感信息的交换,任何疏忽都可能带来数据泄露、恶意攻击等安全隐患。企业在进行跨网文件传输时,…

学期结束,“物品复活软件”也进行了迭代,谈谈我的心得体会

软件工程作业:“物品复活“软件开发之PSP数据的统计 大学生经常有些物品觉得扔掉可惜,不处理又觉得浪费自己的地方。请你编写一个物品“复活”软件 该程序允许添加物品的信息(物品名称,物品描述,联系人信息),删除物品的信息,显示物品列表,也允许查找物品的信息 加分功…

《深入理解Mybatis原理》MyBatis的sqlSession执行流程

sqlSessionFactory 与 SqlSession 正如其名,Sqlsession对应着一次数据库会话。由于数据库会话不是永久的,因此Sqlsession的生命周期也不应该是永久的,相反,在你每次访问数据库时都需要创建它(当然并不是说在Sqlsession里只能执行一次sql,你可以执行多次,当一旦关闭了Sql…

将 EasySQLite 从 .NET 8 升级到 .NET 9

前言 EasySQLite是一个.NET 8操作SQLite入门到实战的详细教程,主要是对学校班级,学生信息进行管理维护。今天咱们的主要内容是将EasySQLite从.NET 8升级到.NET 9。GitHub开源地址:https://github.com/YSGStudyHards/EasySQLite选型、开发详细教程第一天 SQLite 简介 第二天 …

IDA Pro 9.0 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器

IDA Pro 9.0 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器IDA Pro 9.0 (macOS, Linux, Windows) - 强大的反汇编程序、反编译器和多功能调试器 A powerful disassembler, decompiler and a versatile debugger. In one tool. 请访问原文链接:https://…

使用DockerCompose部署服务

由于格式或图片解析问题,为了更好的阅读体验,可前往 阅读原文以前我们总是用命令管理每个容器的启动、停止等等,若有多个容器时可能还存在启动优先级的问题,那就要等到指定的容器启动后再去启动另一个容器,对于整体的应用服务管理极其不方便,简单的docker run命令更适合初…