百科.dev
全部条目AI 编程趋势榜开源项目技术资讯提交条目
登录
返回工具页/返回 Issues 列表
#8828·nodejs.org

导航时侧边栏滚动位置重置, 活动项目可以关闭屏幕

作者: roberthopman创建于 2026年4月17日更新于 2026年9月9日

我不能推我自己的分行 做公关 所以分享这个作为问题。 固定部分为 " 组件/Sidebar/index.jsx " 。

** 问题** 点击左侧边栏中的某个项目会导致全页重载,因为导航使用窗口. location.href在组件/Sidebar/index.jsx中. 重新装入后, 侧边栏的内部滚动位置会重新排入顶部 。

因此,当用户点击位于边栏列表下方的一页,如TypeScript或诊断下的一个项目时,所选择的项目可能仍然在活动,但已经无法看到. 然后,用户必须再次滚动到侧边栏以找到其当前位置.

** 复制步骤**

  • 开放https://nodejs.org/learn
  • 将左侧栏滚动到下行项上, 例如诊断 ~ 内存
  • 单击项目
  • 页面重新装入后, 侧边栏滚动位置已返回上方, 活动项已关闭屏幕

** 预期行为**

活性侧边栏项目在导航后应保持可见.

** 建议的固定办法**

当侧边栏上架时, 将活动链接定位在侧边栏 * * * aside * * 内 。 如果链接在侧边栏自己的滚动容器的可见部分之外,请调整 " aside.scrollTop " ,使活动项目以视线为中心。 这只会影响侧边栏的内部滚动位置,不会改变主窗口滚动.

** 实例办法**

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你来干什么? 使用效果( ()) {{{ 搁置=搁置 cons 活动 = 撇开?.querySelector(`a[href=]${CSS.escape(pathname)}') ; 如果,如果返回,

(单位:千美元) 活动. getBoundingClient Rect (). top - 边. getBoundingClient Rest (.). top + 一边去,一边去

收视Top=靠边.scrollTop; Cont 视图Bottom = 视图Top + 置一旁. ClientHeight ;

如果 (offsetTop + viewTop + active.offsetHeight + viewBottom) { 请将 校对:Soup 返回; {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢?

置入.scrollTop = Math.max( 零点, 抵消Top - 置出. ClientHeight / 2 + 活动.offsetHeight / 2 (三) ,[路径名]);


** 说明**

这种方法使用由@node-core/ui- 组件/Contaners/Sidebar所暴露的现有前置Ref,因此不需要对上游或供应商进行更改。

** 备选审议**

将侧边栏的卷轴Top坚持到会话Storage跨重载被考虑,但被拒绝了. 这种方法增加了更复杂的内容,如在卸货时节省,水合时在适当时间恢复,并当侧柱结构改变时处理 stale 滚动状态.

确保活动项可见更简单,与大多数情况下的预期用户行为一致.

内容来源: nodejs/nodejs.org

查看 GitHub 原文在 GitHub 查看讨论