LocalStorage 缓存分栏比例配置需结构化保存语义化 JSON(如{"leftWidth":25,"centerWidth":50,"rightWidth":25}),通过防抖+容错保存、DOMContentLoaded 后还原样式,并支持多方案 key 区分与 storage 事件跨页同步。

在 LocalStorage 中缓存前端页面分栏比例配置,核心是把左右/上下区域的宽度或高度占比(如 30% / 70%)结构化保存为纯 JSON 数据,并在页面加载时精准还原到对应容器样式中。不依赖框架、不存 DOM 引用,只管“比例”这个轻量状态。
定义清晰的分栏比例数据结构
避免用数组索引或 CSS 类名推断顺序,统一用语义化 key 标识各栏。例如三栏布局可设计为:
- leftWidth:左侧栏占容器宽度百分比(如 25)
- centerWidth:中间栏占比(如 50)
- rightWidth:右侧栏占比(如 25)
- 若支持垂直分栏(如顶部工具栏 + 主内容),可用 topHeight、mainHeight 等字段
整体存为扁平对象:{"leftWidth":25,"centerWidth":50,"rightWidth":25},键名建议带前缀防冲突,如 "myApp-sidebar-layout"。
在用户调整后及时保存(防抖 + 容错)
监听拖拽分隔线结束(如 mouseup 或自定义 resizeend 事件),而不是每次拖动都写入:
将一个或多个 UI 原型图、线框图、产品截图或设计稿转换为标准化、可直接交付的 PRD 风格文档,供产品、设计、前端和测试共同使用。适用于 Codex 需要分析 PC 网页、桌面端、移动端、响应式页面、独立弹窗、表单、表格、看板、数据大屏或多页面流程截图,还原页面结构与交互,强制套用固定文档模板,抽取跨页面共享规则,或把一组原型沉淀为单页规范文档加整体业务流程文档的场景。不适用于纯视觉审美点评、代码实现、接口设计、埋点方案、竞品分析或无 UI 输入的业务需求创作。
立即学习“Java免费学习笔记(深入)”;
- 用
setTimeout实现简易防抖:延迟 300ms 后再执行保存,避免连续微调触发多次写入 - 包裹
try...catch,捕获QuotaExceededError或序列化失败 - 保存前校验数值合法性(如总和是否接近 100、是否为数字)
- 写入代码示例:
localStorage.setItem("myApp-sidebar-layout", JSON.stringify(layoutObj))
页面加载时还原并应用到 DOM
在 DOMContentLoaded 后读取并设置样式,注意时机和容错:
- 先读取:
const saved = localStorage.getItem("myApp-sidebar-layout") - 存在且能解析才应用;解析失败或为空时直接跳过,保持默认布局
- 还原时不重绘整个容器,而是针对性设置内联样式:
leftEl.style.flexBasis = layout.leftWidth + "%" - 若用 CSS Grid,可通过
style.gridTemplateColumns = `${layout.leftWidth}% ${layout.centerWidth}% ${layout.rightWidth}%`动态更新
支持多套布局方案与跨标签页同步
用户可能切换“紧凑模式”“宽屏模式”,或在多个标签页操作同一页面:
- 不同方案用不同 key 区分,如
"myApp-layout-compact"、"myApp-layout-wide" - 监听
storage事件,在其他标签页变更时自动刷新当前页布局:window.addEventListener("storage", e => { if (e.key === "myApp-sidebar-layout") applyLayout(e.newValue); }) - 注意该事件不会在当前修改的页面触发,仅用于同步他人 —— 若需本页也响应(如设置面板中点“应用”),额外调用一次
applyLayout()即可

















