【问题标题】:How to hide the navbar on scroll in Vue 3 using the composition API?如何使用组合 API 在 Vue 3 中隐藏滚动时的导航栏?
【发布时间】:2022-08-19 03:32:42
【问题描述】:

我正在尝试使用组合 API 创建一个函数,该函数可以在向上滚动时隐藏导航栏并在向下滚动时显示它。我已经在 vanilla JS 中有这个功能,但是在 Vue3 中我很难将它带入 DOM。

在香草 JS 中:

let prevScrollpos = window.pageYOffset;
window.onscroll = function () {
  console.log(\'scrolling\')
  let currentScrollPos = window.pageYOffset;
  if (prevScrollpos > currentScrollPos) {
    // @ts-ignore
    document.getElementById(\"navbar\").style.top = \"0\";
  } else {
    // @ts-ignore
    document.getElementById(\"navbar\").style.top = \"-65px\";
  }
  prevScrollpos = currentScrollPos;
}

我的问题是,在 Vue3 中,我似乎无法多次注册一些简单的滚动功能,例如 pageYOffset。我对 @scroll=\"function\" 指令或事件侦听器没有任何成功。目前,我正在尝试使用指令在基础层查看 DOM,但我也不知道如何以这种方式持续跟踪滚动位置。我很高兴使用指令进行修复,但我也很高兴有一个仅存在于 Navbar.vue、Homepage.vue 或 App.vue 中的解决方案。

那么如何使用 Composition API 让 Vue3 看到窗口的滚动位置?

    标签: javascript scroll vuejs3 vue-directives


    【解决方案1】:

    好的,所以我实际上在我的导师和this post 的帮助下找到了答案。我没有意识到,因为我的视差滚动效果(上面没有显示)所有滚动都发生在主标签中,这意味着窗口从未看到任何滚动。另外,我没有意识到将这个 onscroll 效果放在 onMounted 钩子中可以很好地与 Composition API 中的 DOM 交互,这可能是因为第一个问题。我修复了它,现在我完成的代码看起来像这样。

        onMounted(() => {
          let main = document.querySelector("main");
          let prevScrollpos = main.scrollTop;
          let nav = document.querySelector(".navbar");
          main.onscroll = function () {
            let currentScrollPos = main.scrollTop;
            if (prevScrollpos > currentScrollPos) {
              // @ts-ignore
              nav.classList.add("navbar_hidden");
            } else {
              // @ts-ignore
              nav.classList.remove("navbar_hidden");
            }
            prevScrollpos = currentScrollPos;
          };
        });
    

    因为它现在在主标签中,所以我无法使用 PageYOffset,所以我将其更改为 scrollTop。这是CSS。所有这些都在 Navbar.vue 组件中

    .navbar {
      background: $dark;
      transform: translate3d(0, 0, 0);
      transition: all 0.2s ease-out;
    }
    
    .navbar_hidden {
      transform: translate3d(0, -100%, 0);
    }
    

    至此,我不那么惊心动魄的传奇故事画上了句号。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-03-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多