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 事件),而不是每次拖动都写入:
- 用
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()即可
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











