vue.js - Nuxt/Vue/Bootstrap-vue 在滚动时缩小导航栏

标签 vue.js vuejs2 nuxt.js bootstrap-vue

用 Nuxt 学习 Vue。想要根据页面滚动位置更改导航栏类。

查看了several places ,但尚未找到可行的解决方案。

这是我必须处理的内容:

``` default.vue
<template lang="pug">
div(v-on:scroll="shrinkNav", v-on:click="shrinkNav")
  b-navbar.text-center(toggleable="sm" type="light" sticky v-b-scrollspy)
    #myNav.mx-auto.bg-white
      b-navbar-toggle(target="nav_collapse")
      b-navbar-brand.mx-auto(href="#") 
        | Example.org
      b-collapse#nav_collapse.mx-auto(is-nav='')
        b-navbar-nav(justified, style="min-width: 600px").vertical-center
          b-nav-item.my-auto(href='#home') Home
          b-nav-item.my-auto(href='/how') How
          i.fab.fa-earlybirds.fa-2x.mt-2.mb-3
          b-nav-item.my-auto(href='/values') Values
          b-nav-item.my-auto(href='/join-us') Join Us
  #content.container(v-on:scroll="shrinkNav", v-on:click="shrinkNav")
nuxt
    nuxt
</template>

<script>
  // resize navbar on scroll
  export default {
    methods: {
      shrinkNav() {
        var nav = document.getElementById('nav')
        var content = document.getElementById('content')
        if (nav && content) {
          if(content.scrollTop >= 150) {
            nav.classList.add('shrink')
          } else {
            nav.classList.remove('shrink')
          }
        }
        console.log(document.documentElement.scrollTop || document.body.scrollTop)
      }      
    }
  }
</script>
```

shr​​inkNav 在点击时运行两次,但在滚动时不运行。 Vue/Nuxt 的方法是什么?

最佳答案

在你的 .vue 中:

<template>部分:

<nav id="nav" class="navbar is-transparent is-fixed-top">

<script>部分:

export default {
mounted() {
      this.$nextTick(function(){
        window.addEventListener("scroll", function(){
          var navbar = document.getElementById("nav");
          var nav_classes = navbar.classList;
          if(document.documentElement.scrollTop >= 150) {
            if (nav_classes.contains("shrink") === false) {
              nav_classes.toggle("shrink");
            }
          }
          else {
            if (nav_classes.contains("shrink") === true) {
              nav_classes.toggle("shrink");
            }
          }
        })
      })
    },
}

Live Demo on codesandbox

关于vue.js - Nuxt/Vue/Bootstrap-vue 在滚动时缩小导航栏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51563270/

相关文章:

javascript - 如何在 VueJS test-utils parentComponent 中模拟 Vuex 商店

javascript - 编译/运行时后的 Vue.js 动态图像路径

javascript - 如何将常量从一个文件传递到另一个文件

html - 列数未知/宽度相同的 CSS 网格布局

vue.js - Vue.js将函数从父级传递到子级

javascript - Nuxt.js3 插件的上下文变得未定义

javascript - 导入和导出 JS 库

javascript - 当事件 $emit 发出时,Vue $on 不运行我的函数,即使我可以看到在 Vue 控制台中触发的事件

javascript - 如何在搜索时添加加载图标? (Vue.js 2)

Nuxt.js google AdSense 返回错误支持一个标签