0

0

网页加载动画的实现与控制:从CSS设计到JavaScript隐藏的完整指南

DDD

DDD

发布时间:2025-11-02 12:23:10

|

407人浏览过

|

来源于php中文网

原创

网页加载动画的实现与控制:从CSS设计到JavaScript隐藏的完整指南

本教程详细介绍了如何使用htmlcss创建全屏加载动画,并通过javascript在页面内容完全加载后或指定延迟时间后将其优雅地隐藏。文章涵盖了加载动画的结构设计、css样式与关键帧动画的实现,以及利用`window.onload`和`settimeout`精确控制动画生命周期的方法,旨在提升用户体验并确保内容平滑过渡。

在现代网页应用中,加载动画(Loading Animation)是提升用户体验的关键元素之一。当页面内容或数据需要时间加载时,一个设计良好的加载动画能够有效缓解用户的等待焦虑,并清晰地指示后台正在进行操作。本教程将指导您如何从零开始构建一个美观的加载动画,并利用JavaScript精确控制其显示与隐藏,确保内容在准备就绪后平滑呈现。

一、加载动画的必要性与基本构成

加载动画的主要目的是在页面内容尚未完全加载时,提供视觉反馈,避免用户面对空白屏幕或无响应界面。一个典型的加载动画由以下部分构成:

  1. HTML结构: 定义加载动画的容器及其内部元素,通常是一个覆盖整个视口的层。
  2. CSS样式: 设置加载层的外观(背景、定位)、动画元素的样式(字体、颜色、大小)以及关键帧动画(如何动起来)。
  3. JavaScript逻辑: 控制加载动画何时显示、何时隐藏,通常与页面加载事件或数据请求完成事件结合。

二、HTML结构:构建加载层

首先,我们需要一个HTML结构来承载加载动画。这个结构通常是一个全屏的div,内部包含动画元素,例如文字或图片。

@@##@@ G R A V G I F T

结构说明:

  • .loading:这是最外层的容器,它将覆盖整个屏幕,作为加载动画的背景。
  • .loading-img:内部容器,用于居中显示加载动画的核心内容。
  • .loading-img-img:包裹一个图片,例如网站的Logo
  • .loading-text-words:每个字母都作为一个独立的元素,方便我们对它们应用独立的动画效果。

三、CSS样式:定义动画效果

接下来,我们为HTML结构添加CSS样式,实现全屏覆盖、内容居中以及文字模糊动画。

Type Studio
Type Studio

一个视频编辑器,提供自动转录、自动生成字幕、视频翻译等功能

下载
@import url(https://fonts.googleapis.com/css?family=Quattrocento+Sans);

/* 全屏加载层 */
.loading {
  position: fixed; /* 固定定位,覆盖整个视口 */
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  background: #fff; /* 白色背景 */
  z-index: 9999; /* 确保在所有内容之上 */
  display: flex; /* 使用Flexbox居中内容 */
  justify-content: center;
  align-items: center;
}

/* 加载动画内容的容器 */
.loading-img {
  text-align: center; /* 确保内部行内元素居中 */
}

/* Logo图片定位 */
.loading-img-img {
  position: relative;
  top: 15%; /* 相对位置调整 */
  display: block; /* 使其独占一行,与文字分离 */
  margin-bottom: 10px; /* 与下方文字的间距 */
}

/* 动画文字样式 */
.loading-img span {
  display: inline-block; /* 使每个字母独立,可应用动画 */
  margin: 0 5px;
  font-family: "Quattrocento Sans", sans-serif;
  font-size: 30px;
  color: #333; /* 文字颜色 */
}

/* 关键帧动画:模糊效果 */
@-webkit-keyframes blur-img {
  0% { filter: blur(0px); }
  100% { filter: blur(4px); }
}

@keyframes blur-img {
  0% { filter: blur(0px); }
  100% { filter: blur(4px); }
}

/* 为每个字母应用延迟的模糊动画 */
.loading-img span:nth-child(2) { /* 第一个文字,跳过图片 */
  -webkit-animation: blur-img 1.5s 0s infinite linear alternate;
  animation: blur-img 1.5s 0s infinite linear alternate;
}
.loading-img span:nth-child(3) {
  -webkit-animation: blur-img 1.5s 0.2s infinite linear alternate;
  animation: blur-img 1.5s 0.2s infinite linear alternate;
}
.loading-img span:nth-child(4) {
  -webkit-animation: blur-img 1.5s 0.4s infinite linear alternate;
  animation: blur-img 1.5s 0.4s infinite linear alternate;
}
.loading-img span:nth-child(5) {
  -webkit-animation: blur-img 1.5s 0.6s infinite linear alternate;
  animation: blur-img 1.5s 0.6s infinite linear alternate;
}
.loading-img span:nth-child(6) {
  -webkit-animation: blur-img 1.5s 0.8s infinite linear alternate;
  animation: blur-img 1.5s 0.8s infinite linear alternate;
}
.loading-img span:nth-child(7) {
  -webkit-animation: blur-img 1.5s 1s infinite linear alternate;
  animation: blur-img 1.5s 1s infinite linear alternate;
}
.loading-img span:nth-child(8) {
  -webkit-animation: blur-img 1.5s 1.2s infinite linear alternate;
  animation: blur-img 1.5s 1.2s infinite linear alternate;
}
.loading-img span:nth-child(9) {
  -webkit-animation: blur-img 1.5s 1.4s infinite linear alternate;
  animation: blur-img 1.5s 1.4s infinite linear alternate;
}
/* 注意:原始代码中nth-child(1)是图片,所以文字从nth-child(2)开始 */

样式说明:

  • .loading: 使用position: fixed和top: 0; left: 0; width: 100%; height: 100%;使其覆盖整个浏览器视口。z-index: 9999确保它位于所有其他内容之上。这里为了更好地居中,将position: absolute和margin: auto的组合改为display: flex; justify-content: center; align-items: center;。
  • .loading-img: 内部文字的容器,text-align: center使其内部行内元素居中。
  • @keyframes blur-img: 定义了一个名为blur-img的关键帧动画,它使元素的filter属性从blur(0px)变为blur(4px),实现文字的模糊效果。
  • animation属性:
    • blur-img: 动画名称。
    • 1.5s: 动画持续时间。
    • 0s, 0.2s, 0.4s...: animation-delay,为每个字母设置不同的延迟,创造出波浪式的动画效果。
    • infinite: 动画无限循环。
    • linear: 动画速度曲线。
    • alternate: 动画在每次循环中反向播放。

四、JavaScript控制:实现动画的显示与隐藏

加载动画的精髓在于其生命周期的管理。我们需要在适当的时机隐藏它,并显示页面的主要内容。

window.onload = function() {
  // 获取加载动画元素和主要内容元素
  const loadingElement = document.querySelector(".loading");
  const mainContentElement = document.getElementById("main-content");

  // 设置一个延迟,即使页面加载很快,也确保动画展示一段时间
  // 这里的6000ms (6秒) 是一个示例,您可以根据动画时长和需求调整
  setTimeout(function() {
    if (loadingElement) {
      loadingElement.style.display = 'none'; // 隐藏加载动画
    }
    if (mainContentElement) {
      mainContentElement.style.display = 'block'; // 显示主要内容
    }
  }, 6000); // 6秒后隐藏加载动画
};

JavaScript逻辑说明:

  • window.onload = function() { ... };: 这是一个关键的事件监听器。它确保在整个页面,包括所有图片、样式表和脚本等资源都完全加载并解析完毕后,才执行内部的代码。这保证了在隐藏加载动画时,主要内容已经准备好显示。
  • setTimeout(function() { ... }, 6000);: setTimeout函数用于在指定的毫秒数(这里是6000毫秒,即6秒)之后执行一次性函数。
    • 为什么使用setTimeout? 即使页面内容加载非常快,加载动画也可能一闪而过,用户甚至来不及看到。通过setTimeout,我们可以强制加载动画至少显示一段预设的时间(例如,与动画本身的循环时间匹配),从而提供更好的用户体验。
    • loadingElement.style.display = 'none';: 在延迟结束后,通过将.loading元素的display样式设置为none,使其从文档流中移除,从而隐藏加载动画。
    • mainContentElement.style.display = 'block';: 同时,将预先隐藏的主要内容(通过id="main-content"标识)的display样式设置为block,使其可见。

五、优化与注意事项

  1. 隐藏时机:
    • 固定延迟: 如示例所示,使用setTimeout。适用于动画有固定循环时间或希望动画至少显示一段时间的场景。
    • 资源加载完成: window.onload是最基本的资源加载完成事件。
    • 特定数据加载完成: 在单页应用(SPA)中,加载动画可能需要等待特定的API请求完成后再隐藏。此时,您需要将setTimeout或display = 'none'的逻辑放在API请求成功的回调函数中。
  2. 平滑过渡效果: 直接将display从block切换到none会显得比较生硬。可以考虑以下替代方案:
    • opacity + transition: 将加载动画的opacity从1渐变为0,然后设置visibility: hidden或display: none。这样可以实现淡出效果。
      .loading {
          /* ...其他样式 */
          opacity: 1;
          transition: opacity 0.5s ease-out; /* 添加过渡效果 */
      }
      .loading.hide { /* JS添加这个类来隐藏 */
          opacity: 0;
          pointer-events: none; /* 隐藏后阻止事件 */
      }

      JavaScript: loadingElement.classList.add('hide'); 并在transitionend事件后设置display: none;。

    • CSS动画: 定义一个CSS动画,让加载层在隐藏时执行一个退场动画(例如滑动、缩放等)。
  3. 用户体验考量:
    • 动画时长: 避免过长的加载动画,这可能让用户感到不耐烦。通常几秒钟是比较合适的。
    • 反馈清晰: 动画应明确传达“正在加载”的信息。
    • 可访问性: 对于屏幕阅读器用户,确保加载状态有ARIA属性(如aria-live="polite")或文本提示。
  4. 性能: 复杂的CSS动画可能会消耗较多的CPU和GPU资源。确保动画效果流畅,避免卡顿。使用transform和opacity进行动画通常比filter或width/height等属性更高效。

六、总结

通过HTML、CSS和JavaScript的协同工作,我们可以创建出既美观又实用的网页加载动画。HTML负责结构,CSS负责视觉呈现和动画效果,而JavaScript则负责精确控制动画的生命周期,确保在最佳时机将其隐藏,从而提升整体用户体验。掌握这些技术,您将能够为您的网页应用带来更专业、更流畅的交互感受。

Loading Logo

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
js获取数组长度的方法
js获取数组长度的方法

在js中,可以利用array对象的length属性来获取数组长度,该属性可设置或返回数组中元素的数目,只需要使用“array.length”语句即可返回表示数组对象的元素个数的数值,也就是长度值。php中文网还提供JavaScript数组的相关下载、相关课程等内容,供大家免费下载使用。

559

2023.06.20

js刷新当前页面
js刷新当前页面

js刷新当前页面的方法:1、reload方法,该方法强迫浏览器刷新当前页面,语法为“location.reload([bForceGet]) ”;2、replace方法,该方法通过指定URL替换当前缓存在历史里(客户端)的项目,因此当使用replace方法之后,不能通过“前进”和“后退”来访问已经被替换的URL,语法为“location.replace(URL) ”。php中文网为大家带来了js刷新当前页面的相关知识、以及相关文章等内容

438

2023.07.04

js四舍五入
js四舍五入

js四舍五入的方法:1、tofixed方法,可把 Number 四舍五入为指定小数位数的数字;2、round() 方法,可把一个数字舍入为最接近的整数。php中文网为大家带来了js四舍五入的相关知识、以及相关文章等内容

776

2023.07.04

js删除节点的方法
js删除节点的方法

js删除节点的方法有:1、removeChild()方法,用于从父节点中移除指定的子节点,它需要两个参数,第一个参数是要删除的子节点,第二个参数是父节点;2、parentNode.removeChild()方法,可以直接通过父节点调用来删除子节点;3、remove()方法,可以直接删除节点,而无需指定父节点;4、innerHTML属性,用于删除节点的内容。

480

2023.09.01

JavaScript转义字符
JavaScript转义字符

JavaScript中的转义字符是反斜杠和引号,可以在字符串中表示特殊字符或改变字符的含义。本专题为大家提供转义字符相关的文章、下载、课程内容,供大家免费下载体验。

574

2023.09.04

js生成随机数的方法
js生成随机数的方法

js生成随机数的方法有:1、使用random函数生成0-1之间的随机数;2、使用random函数和特定范围来生成随机整数;3、使用random函数和round函数生成0-99之间的随机整数;4、使用random函数和其他函数生成更复杂的随机数;5、使用random函数和其他函数生成范围内的随机小数;6、使用random函数和其他函数生成范围内的随机整数或小数。

1091

2023.09.04

如何启用JavaScript
如何启用JavaScript

JavaScript启用方法有内联脚本、内部脚本、外部脚本和异步加载。详细介绍:1、内联脚本是将JavaScript代码直接嵌入到HTML标签中;2、内部脚本是将JavaScript代码放置在HTML文件的`<script>`标签中;3、外部脚本是将JavaScript代码放置在一个独立的文件;4、外部脚本是将JavaScript代码放置在一个独立的文件。

659

2023.09.12

Js中Symbol类详解
Js中Symbol类详解

javascript中的Symbol数据类型是一种基本数据类型,用于表示独一无二的值。Symbol的特点:1、独一无二,每个Symbol值都是唯一的,不会与其他任何值相等;2、不可变性,Symbol值一旦创建,就不能修改或者重新赋值;3、隐藏性,Symbol值不会被隐式转换为其他类型;4、无法枚举,Symbol值作为对象的属性名时,默认是不可枚举的。

554

2023.09.20

拼多多赚钱的5种方法 拼多多赚钱的5种方法
拼多多赚钱的5种方法 拼多多赚钱的5种方法

在拼多多上赚钱主要可以通过无货源模式一件代发、精细化运营特色店铺、参与官方高流量活动、利用拼团机制社交裂变,以及成为多多进宝推广员这5种方法实现。核心策略在于通过低成本、高效率的供应链管理与营销,利用平台社交电商红利实现盈利。

31

2026.01.26

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Sass 教程
Sass 教程

共14课时 | 0.8万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3万人学习

CSS教程
CSS教程

共754课时 | 24.1万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号