新闻中心
实现Bootstrap Spinner平滑渐显渐隐效果的教程

本教程详细介绍了如何利用css的`opacity`和`visibility`属性结合j*ascript,为bootstrap 5.3加载指示器(spinner)创建平滑的渐显和渐隐动画效果。通过管理css类,我们能够实现比简单切换`display`属性更优雅的用户体验,确保加载过程的视觉流畅性。
在现代Web应用中,为用户提供即时反馈是提升用户体验的关键。当数据加载或处理耗时操作时,一个视觉友好的加载指示器(如Bootstrap Spinner)能够有效告知用户系统正在工作。然而,仅仅通过切换display属性来显示或隐藏Spinner,会导致其突兀地出现和消失,缺乏美感。本文将深入探讨如何利用CSS的opacity和visibility属性,结合J*aScript,为Bootstrap 5.3 Spinner实现平滑的渐显和渐隐动画效果。
核心原理:CSS过渡动画
实现平滑渐显渐隐的关键在于CSS的transition属性,它允许元素在不同状态之间平滑过渡。对于加载指示器,我们需要控制其透明度(opacity)和可见性(visibility)。
- opacity: 控制元素的透明度,从0(完全透明)到1(完全不透明)。通过过渡opacity可以实现渐显渐隐效果。
- visibility: 控制元素的可见性。与display: none不同,visibility: hidden使元素不可见但仍占据其布局空间,并且可以进行过渡。更重要的是,visibility属性在过渡时可以设置延迟,这对于渐隐效果至关重要:我们希望元素在完全透明后才真正从视觉上“消失”,避免在透明度渐变过程中出现交互问题。
通过组合opacity和visibility的过渡,我们可以实现以下效果:
- 渐显: opacity从0过渡到1,同时visibility立即变为visible(或保持visible)。
- 渐隐: opacity从1过渡到0,并在opacity过渡完成后,visibility才变为hidden。
实现步骤
我们将通过一个模拟数据加载的示例来演示这一过程。
1. HTML 结构
首先,确保你的页面引入了Bootstrap 5.3的CSS和JS文件。Spinner的HTML结构是一个带有特定ID的div元素,并包含spinner-border等Bootstrap类。为了实现初始隐藏,我们会在其上添加一个自定义的hidespinner类。
察言观数AskTable
企业级AI数据表格智能体平台
78
查看详情
<!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Bootstrap Spinner 渐显渐隐</title> <!-- 引入 Bootstrap 5.3 CSS --> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" /> <style> /* 这里将放置自定义CSS */ </style> </head> <body> <div class="spinner-border m-5 hidespinner" role="status" id="spinner"> <span class="visually-hidden">Loading...</span> </div> <div id="dataContainer" class="container mt-4"></div> <!-- 引入 Bootstrap 5.3 JS --> <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script> <script> // 这里将放置 J*aScript 代码 </script> </body> </html>
注意:
中添加了 hidespinner 类,确保页面加载时Spinner是隐藏的。2. CSS 样式
接下来,定义Spinner的默认样式以及hidespinner类的样式。关键在于transition属性的设置。
#spinner {
position: fixed; /* 使用 fixed 以确保在滚动时也居中 */
top: 50%;
left: 50%;
width: 3.5rem;
height: 3.5rem;
transform: translate(-50%, -50%); /* 居中显示 */
/* 初始状态:可见,不透明 */
visibility: visible;
opacity: 1;
/* 渐显过渡:opacity 300ms,visibility 立即生效 */
transition: visibility 0s linear 0s, opacity 300ms ease-in-out;
z-index: 1050; /* 确保在其他内容之上 */
}
#spinner.hidespinner {
/* 隐藏状态:不可见,透明 */
visibility: hidden;
opacity: 0;
/* 渐隐过渡:opacity 300ms,visibility 在 opacity 结束后才生效 */
transition: visibility 0s linear 300ms, opacity 300ms ease-in-out;
}CSS 注意事项解释:
- #spinner 默认状态:visibility: visible; opacity: 1;,并设置了渐显的过渡规则。visibility 0s linear 0s 意味着visibility在过渡开始时立即变为visible,没有延迟。
- #spinner.hidespinner 隐藏状态:visibility: hidden; opacity: 0;。
- 渐隐时的transition: visibility 0s linear 300ms, opacity 300ms ease-in-out; 是关键。它表示opacity将在300毫秒内完成过渡,而visibility将在300毫秒的延迟后立即变为hidden。这样确保了在opacity完全变为0之后,元素才真正从视觉上消失,避免了在半透明状态下元素可能被点击或占据空间的问题。
3. J*aScript 逻辑
最后,通过J*aScript在数据加载前后添加或移除hidespinner类,来触发CSS过渡。
function getData() {
var spinner = document.getElementById("spinner");
// 移除 hidespinner 类,使 Spinner 渐显
spinner.classList.remove('hidespinner');
// 模拟数据加载过程,例如通过 setTimeout 或实际的 fetch 请求
setTimeout(function () {以上就是实现Bootstrap Spinner平滑渐显渐隐效果的教程的详细内容,更多请关注其它相关文章!
# 将在
# 方便智能营销推广方案
# 鱼台市场营销推广招聘
# 昆山抖音seo教程
# 天河全网营销推广服务
# 明光网络推广问答营销
# 解析淘宝seo
# 西城定制网站建设
# 反推收录SEO
# 枣庄网站建设找哪家
# 成都婚纱摄影网站推广
# 的是
# 移除
# 关键在于
# 后才
# 可以实现
# css
# 复选框
# 自定义
# 加载
# 渐隐
# .net
# cdn
# ai
# ssl
# npm
# bootstrap
# js
# html
# java
# javascript
相关栏目:
【
科技资讯46185 】
【
网络学院92790 】
相关推荐:
Node.js CSV 数据处理:基于字段空值条件过滤整条记录的策略
J*aScript中高效管理与清空动态列表:避免循环陷阱
c++项目目录结构应该如何组织_c++工程化项目结构规范
C++ vector二维数组定义_C++ vector of vector用法
CSS Grid如何控制元素对齐_align-items与justify-items组合使用
Composer的 "check-platform-reqs" 命令有什么用_在部署前检查生产环境是否满足Composer依赖需求
J*aScript map 方法中处理循环元素为空数组的策略
Python vgamepad库按键模拟:正确使用XUSB_BUTTON常量
汽水音乐车机版横屏版7.1 汽水音乐车机版横屏版下载入口
Lar*el 8 多关键词数据库搜索优化实践
Lar*el DB::listen 事件中的查询执行时间单位解析
Excel如何用迷你图显趋势_Excel用迷你图显趋势【趋势小图】
12306几点到几点不能订票? | 官方最新系统维护时间全解析
J*aScript生成器_j*ascript异步迭代
Win10双系统截图高效法 截屏快捷键速记【技巧】
提升屏幕阅读器对“m”时间单位的播报准确性:HTML与CSS组合解决方案
必由学官网快捷入口 必由学网页版在线学习平台
火狐浏览器占用内存高卡顿怎么办 火狐浏览器性能优化设置技巧
4399免费游戏网址入口 4399小游戏免费入口点开即玩
Tabulator表格日期时间排序问题及自定义解决方案
2026年CSGO开箱网站推荐 CSGO开箱平台精选
Eclipse怎么运行工程_Eclipse工程运行配置说明
纯CSS与HTML网格布局的HTML精简策略:SVG与JS方案解析
微信聊天记录怎么加密_微信聊天记录加密方法
腾讯QQ邮箱登录入口_QQ邮箱官方网站使用地址
Go语言中对Map值调用带指针接收者方法:原理与最佳实践
《主播少女的秘密账号迷宫》首支宣传片
包子漫画官方网站在线链接-包子漫画在线阅读平台主页地址
优化 Python 函数中的条件逻辑:解决 if-else 嵌套与参数选择问题
中兴Axon42Ultra怎样在文件App筛图_iPhone中兴Axon42Ultra文件App筛图【图片筛选】
QQ邮箱在线登录平台 QQ邮箱个人邮箱网页版入口
处理动态列数据:J*a ArrayList的正确初始化与字符累加教程
Win11怎么查看电脑配置_Win11硬件配置检测工具使用
理解J*aScript Promise的微任务队列与执行顺序
Go语言JSON解析深度指南:动态访问与结构体映射实践
一加手机拍照效果不好怎么办 一加哈苏影像调校与专业模式使用教程【高手篇】
妖精漫画网页版登录入口免费_妖精漫画官网主页直接阅读漫画
今日头条怎么同步内容到抖音_今日头条内容同步到抖音教程
Win10如何开启蓝牙功能_Windows10找不到蓝牙开关解决方法
win11 arm版怎么安装 M1/M2 Mac虚拟机安装ARM win11的方法
Spyder启动失败:字体文件权限拒绝错误解决方案
C++如何打印当前代码行号与文件名_C++预定义宏FILE与LINE的使用
如何高效处理PHP中的Excel数据导入导出?PortPHP/Spreadsheet助你轻松搞定!
Python类型检查:优化关联可选属性的Mypy推断策略
2026年发布! 美少女养成动作RPG《神剑少女战记》发布实机演示
自定义Bag-of-Words实现:处理带负号的词汇权重
不同用户不同价格! 索尼开启账户个性化定价测试
C++如何解决segmentation fault_C++段错误调试与原因分析
EMS快递官网app_中国邮政速递物流手机客户端
Mudbox图层蒙版怎么用_Mudbox图层蒙版数字雕刻应用技巧


2025-10-16
浏览次数:次
返回列表
e-width, initial-scale=1.0">
<title>Bootstrap Spinner 渐显渐隐</title>
<!-- 引入 Bootstrap 5.3 CSS -->
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous" />
<style>
/* 这里将放置自定义CSS */
</style>
</head>
<body>
<div class="spinner-border m-5 hidespinner" role="status" id="spinner">
<span class="visually-hidden">Loading...</span>
</div>
<div id="dataContainer" class="container mt-4"></div>
<!-- 引入 Bootstrap 5.3 JS -->
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
<script>
// 这里将放置 J*aScript 代码
</script>
</body>
</html>