当前位置: 首页 > 知识库问答 >
问题:

突出显示滚动条上的侧栏导航项与IntersectionObserver进行反应时出现问题

雷曜灿
2023-03-14

我正在处理一个react项目,我想在滚动时看到相应部分时突出显示边栏导航列表,我使用useEffect和IntersectionObserver,并使用下面的代码向边栏导航项添加一个活动类。

问题是一些部分不是视口的100%高度,导致多个侧边栏导航列表项同时突出显示,我不希望这样。我希望只有一个单一的导航项目有活动类。

 useEffect(() => {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach((entry) => {
        const id = entry.target.getAttribute('id');

        if (entry.isIntersecting) {
          document
            .querySelector(`.sidebarList li a[href="#${id}"]`)
            .classList.add('active');
        } else {
          document
            .querySelector(`.sidebarList li a[href="#${id}"]`)
            .classList.remove('active');
        }
      });
    });

    document.querySelectorAll('section[id]').forEach((section) => {
      observer.observe(section);
    });

    return () => observer.disconnect();
   });

共有1个答案

谷梁宝
2023-03-14

我认为您将不得不使用useRef而不是使用您的querySelector。

 类似资料:
  • 在我的Android应用程序中,我有一个滑出式导航抽屉。当在导航抽屉中选择一个项目时,它将加载新片段并高亮显示您在导航抽屉中单击的项目。 我的问题是,在加载的新片段中,您可以单击该片段中的一个新项目,该项目将加载一个新片段,并且仍然保留导航抽屉。 在这种情况下,您不再位于导航抽屉中列出的片段上,但最后一个项目仍然高亮显示,然后无法再次单击返回。 当导航抽屉中的项目不是我的主要片段时,如何取消高亮显

  • ap.showOptionButton() 显示导航栏右侧按钮。 代码示例 <script src="https://gw.alipayobjects.com/as/g/h5-lib/alipayjsapi/3.1.1/alipayjsapi.inc.min.js"></script> <button class="btn btn-default">显示 optionButton</button

  • 我在我的应用程序中使用了可以在android工作室添加的抽屉菜单,我在导航抽屉中添加了一些菜单条目(参见代码块)。如果我按下第一个项目(nav_home)或第二个,导航抽屉会突出显示当前按下的项目。 如果我按下项目“nav_information”按钮或其他项目,则会打开新的(单击的)片段,并且看不到突出显示(主页或第二个项目仍突出显示) 很快,只有第一个项目在选定的项目上显示突出显示。 这是我处

  • 我试图使用添加到JScrollPane中的不可编辑的JTextArea。我希望当用户点击那个特定的行时,一行被突出显示。我可以使用以下代码实现这一部分: 我想添加的是,一旦一行被高亮显示,用户使用键盘上/下键向上/向下滚动,我希望当前行被高亮显示。通过添加KeyListener可以做到这一点吗?我被如何在滚动时高亮显示数据所困扰。 文本区域包含如下数据: (即在两个特定的数据行之间可能有新的行)

  • ap.showPopMenu(OPTION | items, CALLBACK) 显示导航栏右上角弹出的下拉菜单。可直接传入一个数组作为 OPTION.items 参数。 OPTION 参数说明 名称 类型 必填 描述 items Object Array 是 菜单数组,数组中每个项是一个对象(也可以是一个字符串,如果是字符串,会当作 item.title 参数)。item 的具体配置字段见下表

  • 问题内容: 我正在构建一个包含几个主要部分的webapp。每个部分都有几个子部分。我有一个保存导航栏的文件。HTML使用模板中的命令将其添加到基于文件。此外,我有几个小节nav文件,每个文件都使用同一命令添加到任何给定页面。 所有的导航栏都非常简单,只是带有标签的文本。 我想突出显示当前主要部分和当前子部分的链接。由于此Web应用程序很大,因此我希望以某种方式完成此操作而不添加特定于页面的信息。另