讲师中心 微信公众号

工具推荐

视频效率加速
Laper
Laper

剧本策划到成片协作

立刻MV
立刻MV

低成本歌曲 MV、视频生成

Seko
Seko

AI短剧一键生成成片

AniShort
AniShort

AI短剧协同制作平台

如何在 DataTables 初始化时阻塞表格渲染并显示加载动画

轻婷酱_2978

轻婷酱_2978

发布时间:2026-01-29 13:16:13

|

1049人浏览过

|

来源于php中文网

原创

如何在 DataTables 初始化时阻塞表格渲染并显示加载动画

本文介绍如何通过 datatables 的 `processing` 选项和 css 控制策略,彻底隐藏原始 html 表格的闪现,确保加载 gif 或自定义提示全程覆盖初始化过程,并精准协调 d3 图表的延迟渲染时机。

在使用 DataTables 渲染大型数据表时,常见的“原始表格闪现”问题(即未样式化、未分页、未启用交互的原始

DeepBI DHTML 页面生成器
DeepBI DHTML 页面生成器

生成可在 deepbi 沙箱 iframe 内运行或作为独立文件运行的交互式 HTML 页面,使用 `window.deepbi` JS SDK 实现数据查询、空间管理、文件浏览及用户操作。当用户提出以下需求时启用该能力: - 创建 KPI 仪表盘、数据表格、文件浏览器、成员列表、管理页面; - 明确要求“转成 dhtml”、“转译成 HTML”、“把 XX 页面转成……”、“控制台页面”、“管理后台”、“DeepBI 页面迁移”; - 提及位于 `apps/console/src/featur

下载
短暂可见)会破坏用户体验,尤其当页面同时包含依赖 DOM 就绪状态的 D3 可视化图表时,这种视觉竞态更显突兀。你当前的实现虽已尝试用 initComplete 隐藏加载指示器,但关键缺陷在于:initComplete 触发于 DataTables 内部初始化完成,而非 DOM 渲染完全就绪;且原始 在 JS 执行前已被浏览器解析并渲染——这正是“闪现”的根源。

✅ 正确解法:双重控制 + 渲染时序编排

1. 强制初始隐藏 + 启用原生 processing 指示器

不要仅依赖 visibility: hidden 或 display: none 切换包装器,而应从根源阻止原始表格渲染:

<!-- 在 HTML 中,直接隐藏原始 table 元素 -->
<table id="example" class="display hover" style="display: none;">
  <!-- thead/tbody as before -->
</table>

同时,在 DataTables 配置中启用 processing: true,它会在初始化阶段自动插入 .dataTables_processing 元素(默认为文字提示),并接管加载状态管理:

var table = $('#example').DataTable({
  processing: true, // ✅ 启用内置加载状态
  language: {
    processing: '<div class="dt-loading"><img src="{% static "loading.gif" %}" alt="Loading..."></div>'
  },
  // ... 其他配置保持不变
  initComplete: function () {
    // ✅ 此时 DataTables 已完全就绪,可安全显示表格
    $('#example').show(); // 显示 table 元素
    $('#loading-indicator').hide(); // 隐藏全局遮罩(如仍需)

    // ✅ 关键:在此处触发 D3 图表渲染,确保 DOM 完全稳定
    renderD3Charts();
  }
});
? 注意:language.processing 支持任意 HTML,因此可直接嵌入你的 loading.gif,无需额外 CSS 定位。DataTables 会自动将其插入 #example_wrapper 内部,与表格同级,语义更清晰。

2. CSS 增强:确保 loading 提示居中且覆盖

/* 替代原有 #loading-indicator 的复杂定位,复用 DataTables 自带结构 */
.dataTables_processing {
  position: absolute !important;
  top: 50% !important;
  left: 50% !important;
  transform: translate(-50%, -50%) !important;
  width: auto !important;
  height: auto !important;
  padding: 15px 25px !important;
  background: rgba(255, 255, 255, 0.95) !important;
  border-radius: 8px !important;
  z-index: 9999 !important;
  box-shadow: 0 4px 12px rgba(0,0,0,0.15) !important;
}
.dataTables_processing img {
  width: 48px;
  height: 48px;
  vertical-align: middle;
  margin-right: 12px;
}

3. 重构 D3 渲染逻辑:解耦并延迟执行

将 D3 图表代码封装为独立函数,并仅在 initComplete 中调用,避免因模板提前执行导致的 DOM 查找失败或渲染错位:

// ✅ 封装 D3 渲染逻辑
function renderD3Charts() {
  // 第一个图表
  const assign_level_rawData = JSON.parse('{{ assign_levels|safe }}');
  const data1 = assign_level_rawData.map(d => ({level_assign: d[0] === "N" ? "NA" : d[0], count: d[1]}));
  createChart(data1, "chart-level-assign", "Level of Assignment", "level_assign");

  // 第二个图表
  const edu_setting_rawData = JSON.parse('{{ edu_setting_levels|safe }}');
  const data2 = edu_setting_rawData.map(d => ({edu_setting: d[0] === "N" ? "NA" : d[0], count: d[1]}));
  createChart(data2, "chart-edu-setting", "Educational Setting", "edu_setting");

  // 第三个图表
  const smdCsv = "{{ smd_combined_csv|escapejs }}";
  const smd = d3.csvParse(smdCsv).filter(d => d.smd_value !== "NA");
  drawDotChart(smd);
}

// ✅ 移除原位置的 D3 脚本,统一由 initComplete 触发

4. 表单提交时的加载状态同步(可选增强)

若需在文件上传期间也显示全局遮罩(如防止重复提交),可结合 processing 和表单事件:

$('form').on('submit', function(e) {
  e.preventDefault();
  // 显示全局遮罩(用于上传阶段)
  $('#loading-indicator').show();

  // 提交表单(AJAX 或传统 POST)
  this.submit();
});

// 在 Django 视图返回后,页面重载时 DataTables 会自动触发 processing → initComplete 流程

⚠️ 注意事项

  • 避免 visibility: hidden 陷阱:visibility: hidden 仍占据文档流,可能导致布局抖动;优先使用 display: none 隐藏原始
。
  • initComplete 是黄金时机:它保证 DataTables 所有功能(分页、排序、按钮等)均已挂载完毕,是启动后续依赖操作(如 D3 渲染)的唯一可靠钩子。
  • 静态资源路径校验:确保 {% static "loading.gif" %} 在浏览器中可直接访问(检查 Network 面板),否则 language.processing 将显示空白。
  • 性能提示:对超大数据集(>10k 行),考虑启用服务器端处理(serverSide: true)+ AJAX,避免前端全量渲染压力。
  • 通过以上方案,你将获得:
    ✅ 原始表格全程不可见;
    ✅ 加载动画精准覆盖 DataTables 初始化全过程;
    ✅ D3 图表严格在表格完全就绪后渲染,动画流畅无干扰;
    ✅ 代码结构清晰,符合前端最佳实践。

    热门AI工具

    更多
    Atoms
    Atoms Hot

    Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

    DeepSeek

    DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

    WorkBuddy

    一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

    音述AI
    音述AI Hot

    一款AI音频处理工具,主要用于音述AI是一个以“用声音述说故事”为核心的 AI 音乐创作与声音分享社区,适合需要提升相关任务效率的用户。

    小橡皮AI

    一款AI工具,主要用于小橡皮一键去AI味,将机器味重的内容改得更有活人感,防止因为 AI 内容被平台打上 AI 标签,以及限流,适合需要提升相关任务效率的用户。

    豆包大模型

    豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

    PixTV
    PixTV Hot

    PixTV是一款面向AIGC内容创作的AI视频生成工具。

    Seko
    Seko Hot

    一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

    花生AI
    花生AI Hot

    一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

    相关专题

    更多
    ajax教程
    ajax教程

    php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

    3380

    2023.06.14

    ajax中文乱码解决方法
    ajax中文乱码解决方法

    ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

    360

    2023.08.31

    ajax传递中文乱码怎么办
    ajax传递中文乱码怎么办

    ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    3193

    2023.11.15

    ajax网站有哪些
    ajax网站有哪些

    使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

    1181

    2024.09.24

    js正则表达式
    js正则表达式

    php中文网为大家提供各种js正则表达式语法大全以及各种js正则表达式使用的方法,还有更多js正则表达式的相关文章、相关下载、相关课程,供大家免费下载体验。

    4876

    2023.06.20

    js获取当前时间
    js获取当前时间

    JS全称JavaScript,是一种具有函数优先的轻量级,解释型或即时编译型的编程语言;它是一种属于网络的高级脚本语言,主要用于Web,常用来为网页添加各式各样的动态功能。js怎么获取当前时间呢?php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

    1435

    2023.07.28

    js 字符串转数组
    js 字符串转数组

    js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

    1898

    2023.08.03

    js是什么意思
    js是什么意思

    JS是JavaScript的缩写,它是一种广泛应用于网页开发的脚本语言。JavaScript是一种解释性的、基于对象和事件驱动的编程语言,通常用于为网页增加交互性和动态性。它可以在网页上实现复杂的功能和效果,如表单验证、页面元素操作、动画效果、数据交互等。

    10423

    2023.08.17

    Postman身份认证怎么配置
    Postman身份认证怎么配置

    本专题从实际API接口调试场景出发,讲解Postman身份认证的完整配置流程,包括常见认证协议介绍、授权参数设置、访问令牌填写、OAuth 2.0授权及认证失败排查,帮助用户正确完成接口授权与访问验证。

    40

    2026.11.06

    热门下载

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

    精品课程

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

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn