You need to enable JavaScript to run this app. 能否检测页面是否通过导航栏跳转打开,实现跳转后导航栏保持展开?
优惠活动
大模型
产品
解决方案
定价
更多

能否检测页面是否通过导航栏跳转打开,实现跳转后导航栏保持展开?

跨页面保留导航展开状态的实现方案

跨页面跳转属于全新的浏览器上下文,原有JS内存中的状态会被完全重置,不需要专门检测页面是否从导航栏跳转打开,通过浏览器原生的持久化存储能力即可实现导航状态的跨页保留,具体实现步骤如下:

1. 改造导航控制脚本,同步存储导航状态

在原有的navbar.js基础上增加状态同步逻辑,页面加载时自动读取之前存储的导航状态初始化样式,展开/收起操作时同步更新存储的状态值:

// 页面DOM加载完成后,读取存储的导航状态初始化样式
window.addEventListener('DOMContentLoaded', () => {
  const savedNavState = sessionStorage.getItem('navDisplayState')
  // 匹配到已存储的展开状态时,自动执行展开逻辑
  if (savedNavState === 'open') {
    openNav()
  } else {
    closeNav()
  }
})

function openNav() {
  document.getElementById("navbar").style.width = "14%";
  document.getElementById("main").style.marginLeft = "14%";
  // 展开操作触发时,将状态写入存储
  sessionStorage.setItem('navDisplayState', 'open')
}

function closeNav() {
  document.getElementById("navbar").style.width = "0%";
  document.getElementById("main").style.marginLeft = "0%";
  // 收起操作触发时,同步更新存储的状态
  sessionStorage.setItem('navDisplayState', 'closed')
}

2. 调整导航链接的点击触发逻辑

移除导航跳转链接上绑定的closeNav()触发逻辑,仅保留侧边栏收起叉号按钮上的关闭绑定,避免点击导航跳转时主动收起导航:

<script src="navbar.js"></script>
<div id="navbar" class="sidebar">
    <!-- 仅叉号按钮保留关闭导航的触发逻辑 -->
    <a href="index.html" class="closebtn" onclick="closeNav()">&times;</a>
    <a class="active" href="index.html">Kvantový počítač</a>
    <a href="Double slit experiment.html" onclick="scriptDec()">Youngov experiment</a>
    <a href="Qbit.html">Qubit a superpozícia</a>
</div>

补充说明

  • 存储方式选择:使用sessionStorage存储时,导航状态仅在当前打开的标签页内有效,关闭标签页后状态自动重置,符合侧边栏交互的常规体验;如果需要用户下次打开站点仍记住导航的展开状态,可将代码中所有sessionStorage替换为localStorage,二者API完全一致,无额外开发成本。
  • 无需额外做跳转来源检测:所有页面只要加载了同一个navbar.js,就会读取统一存储的状态值自动渲染对应样式,不需要判断页面是从哪个入口跳转进入的,逻辑更简单且不会出现误判问题。

内容的提问来源于stack exchange,提问作者Luky Len

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.25 15:36:04