当前位置: 首页 > news >正文

visibility: hidden 先离屏渲染、再统一显式,彻底消除渲染抖动

一、一句话概括原理

先把容器设为不可见(visibility: hidden),让表格在后台完成所有计算、渲染、高度调整;等一切就绪,再瞬间显示出来 —— 用户只看到最终完美状态,看不到中间过程。

二、浏览器渲染视角(为什么用visibility: hidden而不是display: none

浏览器渲染分四步:

  1. Parse(解析)→ 生成 DOM
  2. Style(样式)→ 生成样式树
  3. Layout(布局 / 回流 / Reflow)→ 计算宽高、位置
  4. Paint(绘制 / 重绘 / Repaint)→ 画到屏幕上
  • display: none:在Layout 阶段就被移除,不占空间,切换时会触发回流 + 重绘,容易导致页面抖动。
  • visibility: hiddenLayout 正常计算、保留位置,只在Paint 阶段跳过绘制;切换时只触发重绘、不触发回流,布局完全稳定。

三、你的方案完整流程(为什么 “完全不动”)

  1. 初始隐藏:外层divvisibility: hidden,表格在后台开始初始化、计算高度、渲染数据。
  2. 后台计算:Bootstrap Table 执行resetView,调整高度、分页、滚动条 ——这一切用户都看不见CSDN博...。
  3. 统一显示resetView完成后,把visibility设为visible一次性画出最终状态CSDN博...。

四、专业叫法

  • 通用叫法:离屏渲染 / 预渲染 / 延迟显式 / 无闪烁渲染
  • 前端优化术语:减少布局抖动(Layout Shift)、避免视觉闪烁(Flash of Unstyled Content / FOUC)
  • 你这套组合:visibility: hidden+ 事件触发显式 + 视图重置

五、为什么比setTimeout/shown.bs.modal更稳

  • setTimeout:时间不可控,可能早了(没算完)、晚了(延迟感)。
  • shown.bs.modal:模态框显示时,表格可能还在计算,依然会闪。
  • 你这套:等表格完全就绪再显示,是确定性、零抖动的方案。

这个项目有些老,用的是bootstrap table实现的,之前是把height设成350,然后对话框显示出来,点击查询,后来modal又变小了,因为会随着内容的高度来自动调整,感觉怪怪的。

可能的实现:

$("#btn_selCustomer").click(function() { var oTable_customer = new TableInit_customer(); oTable_customer.Init(); $("#myModalLabel_customer").text("选择客户"); $("#myModal_customer").find(".form-control").val(""); $('#myModal_customer').modal(); });

不管是对话框先初始化,还是表格先初始化,都是一样,感觉喧染的效果不行。

然后我们使用下面的js将高度拉回来:

$(document).on('shown.bs.modal', function () { $('.modal.in').find('table').each(function () { var $table = $(this); if ($table.data('bootstrap.table')) { $table.bootstrapTable('resetView'); // 视图刷新完再显示,彻底消除闪动 $table.closest('[style*="visibility:hidden"]').css('visibility', 'visible'); } }); });

对话框html里的代码:

<div class="row"> <div class="form-group"> <div class="col-sm-12" style="height: 500px;overflow-y: auto;visibility:hidden;"> <table id="tb_customer" data-reorderable-columns="true" style="min-height: 0;height: 500px;"></table> </div> </div> </div>

这样就可以了,以下是参考:

离屏渲染技术:弹窗从黑屏到流畅显示的完整解决方案-CSDN博客

这里面写了一些原理,有兴趣可以看一下。

http://www.jsqmd.com/news/1113099/

相关文章:

  • AI数据机房液冷设备可视化监控管理系统方案
  • win7/8/10/11/win10官方原版ISO系统重装镜像文件纯净版专业版 纯净系统重装镜像XP/win7/8/10/11 ISO镜像 笔记本台式电脑通用
  • 2026经验丰富的絮凝剂公司盘点:15年以上从业品牌榜
  • AI 代码贡献激增,Godot 基金会修订贡献者政策严控 AI 使用
  • 新会上线!第三届大数据分析与人工智能应用国际学术会议(BDAIA 2026)
  • 表面等离子共振(SPR)检测中的“三元ABA循环模式”——三元结合,我们是怎么做到的?
  • psram芯片技术原理_高速SPI串口psram芯片存储选型方案
  • 2026年量化AI工具重点,不同阶段别用同一种问法
  • VisualCppRedist AIO:一站式解决Windows软件运行库依赖问题的完整方案
  • 同一件事,17年
  • Node.js本地化部署工具OpenClaw实战指南
  • 告别龟速下载:用Python解析工具解锁百度网盘10倍下载速度
  • 程序员凌晨4点重写代码引热议:重写到底为了谁?
  • IPD咨询洞察:矩阵组织总变成“扯皮阵“,华为如何经历这个过程?
  • 华为设备IP登录安全锁定机制详解与解锁
  • 大模型技术选型与落地路径全解析
  • 《列表和元组到底是有什么异同呢?》
  • [特殊字符] C 语言避坑指南:为什么我的 strlen 算出的是 40 而不是 10?
  • 高效解决网盘下载限制的LinkSwift工具
  • 面向对象——第四五六次PTA作业集总结
  • SAP-ABAP:SAP QM 检验结果录入核心利器:BAPI_INSPOPER_RECORDRESULTS 完全指南
  • ChatGPT做PPT内容的黑箱真相:我们逆向拆解OpenAI官方提示链,还原高通过率大纲的7层嵌套指令结构
  • 如何利用软件计算流域面积(Global Mapeer)
  • CUUG-AI时代数据库认证培训的价值
  • 内存价格凶猛上涨!三大原厂扩产遇阻,苹果难逃存储荒反噬
  • 焊接符号问答大全
  • AI辅助毕业设计:3步法提升开发效率与创新
  • 机器学习面试数据准备20问:从清洗到归因的工程实战指南
  • 为什么说“无需逐字雕琢”也能搞定朱雀 AI 判定?
  • TTS-Backup完整指南:5步轻松保护你的桌游模拟器珍贵数据