JavaScript 原生实现 AJAX 加载中提示框

蓝鲸
蓝鲸
发布时间:2026-10-14 | 2人浏览过
原创

在 Web 开发中,异步请求(AJAX)往往需要一定的加载时间。为了提升用户体验,通常会在页面上提供一个临时的 Loading 提示框。本文将展示如何使用原生 JavaScript 创建一个固定的加载遮罩层,支持开启和关闭两种状态。

功能目标

实现一个全局显示的 Loading 容器,内容可自定义(如显示“加载中...”),能够根据请求开始和结束的状态进行显示与隐藏,且不影响页面原有布局的滚动行为。

代码逻辑解析

核心函数 loading(p_value, str) 接收两个参数:p_value 控制开关(true 为显示,false 为隐藏),str 为提示文字。逻辑分为三种场景:

第1步:判断是否需要显示

当 p_value 为真时进入显示逻辑。首先检查页面是否已存在 ID 为 load_area 的元素。若不存在,则执行初始化;若存在且需更改文案,则更新节点。

第2步:动态创建 DOM 结构

使用 document.createElement 创建外层容器 <div> 和内层提示文本 <span>。设置容器的 ID 为 load_area,以便后续查找和操作。

第3步:计算位置与设置样式

为了让提示框出现在页面可视区域的中央偏上位置,代码计算了当前页面的滚动高度:

var top = document.body.scrollTop + document.documentElement.scrollTop;
var top_position = top + 157 + "px";
para.style.top = top_position;

同时赋予容器绝对定位样式(position: absolute),使其脱离文档流并固定位置。样式中包含了半透明背景、圆角、阴影以及文字居中属性:

para.style.cssText += ";position:absolute;left:50%;width:140px;margin-left:-70px;height:50px;line-height:50px;font-size:18px;text-overflow:ellipsis;overflow:hidden; white-space:nowrap;text-align:center;background-color: #000;border-radius:2px;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.5);color:#eee;";

注:原文代码中有一行关于 icon 样式的引用可能引发错误,实际只需关注 para 的样式即可。

第4步:插入图标与文本

创建图像对象作为加载动画图标(此处为静态 GIF 占位),将其加入容器,随后加入文本节点,最后将父容器添加到 body 末尾。

完整代码示例

复制代码 代码如下:
function loading(p_value, str) { if (p_value) { // 如果尚未创建该元素,则初始化 if (!document.getElementById("load_area")) { var para1 = document.createElement("span"); var node = document.createTextNode(str); para1.appendChild(node); var para = document.createElement("div"); para.id = "load_area"; // 获取页面实际滚动高度以确定垂直位置 var top = document.body.scrollTop + document.documentElement.scrollTop; top_position = top + 157 + "px"; para.style.top = top_position; // 设置容器绝对定位及视觉效果 para.style.cssText += ";position:absolute;left:50%;width:140px;margin-left:-70px;height:50px;line-height:50px;font-size:18px;text-overflow:ellipsis;overflow:hidden; white-space:nowrap;text-align:center;background-color: #000;border-radius:2px;-webkit-box-shadow:0 2px 2px rgba(0,0,0,0.5);color:#eee;"; // 创建加载图标 var icon = new Image(); // 请替换为您实际的 loading 图标路径 icon.src = "images/loading1.gif"; icon.style.cssText += ";vertical-align:middle;padding-right:4px;margin-top:-2px;"; document.body.appendChild(para); para.appendChild(icon); para.appendChild(para1); } else { // 如果元素已存在,仅更新显示状态或文本(可选) document.getElementById("load_area").style.display = "block"; } } else { // p_value 为 false 时,隐藏元素 var loadEl = document.getElementById("load_area"); if (loadEl) { loadEl.style.display = "none"; // 如需彻底移除以防止内存泄漏,可使用:document.body.removeChild(loadEl); } } }

使用方法

在进行 AJAX 请求前调用,并在请求回调结束后关闭:

复制代码 代码如下:
// 显示加载中状态 loading(true, "加载中..."); // 发起 Ajax 请求 ... // 请求完成后关闭 loading(false);

注意事项

  • 路径替换:代码中的 icon.src 使用了相对路径 images/loading1.gif,实际使用时请替换为您项目中有效的图片资源路径。
  • 样式冲突:该方案使用内联 CSS (cssText),若项目中有特定的 CSS 重置库或框架,可能需要调整定位或颜色属性以避免冲突。
  • 现代替代方案:对于新项目,建议直接使用 CSS 动画结合 opacity 过渡效果,或使用现有的 UI 组件库,以获得更平滑的交互体验。

以上就是 JavaScript 模拟实现 Ajax 加载框的详细内容,更多关于 JavaScript 前端交互的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表