如何用vue js制作固定导航栏?

lztngnrs  于 2023-01-14  发布在  Vue.js
关注(0)|答案(3)|浏览(248)

我尝试使用vue.js构建一个登陆页面,页眉设计如上图所示。
因此,我创建了一个名为“header”的组件,根据设计包含内容。
我怎样做一个固定的导航栏,当页面滚动时导航栏仍然在顶部?

r7xajy2e

r7xajy2e1#

另一种选择是使用bootstrap-vue包。
它具有b-navbar组件,可将其固定在顶部

<b-navbar class="header" fixed="top"></b-navbar>

示例:
x一个一个一个一个x一个一个二个x

b1zrtrql

b1zrtrql2#

可以通过应用以下类来设置固定导航栏。

.header {
  position:fixed; /* fixing the position takes it out of html flow - knows
                   nothing about where to locate itself except by browser
                   coordinates */
  left:0;           /* top left corner should start at leftmost spot */
  top:0;            /* top left corner should start at topmost spot */
  width:100vw;      /* take up the full browser width */
  z-index:200;  /* high z index so other content scrolls underneath */
  height:100px;     /* define height for content */
}

具有position:fixed;属性的元素在窗口滚动时不会改变,因此位置固定的元素将保持在右侧。

z4iuyo4d

z4iuyo4d3#

new Vue({
  el: "#app",
  data:{
      active: false
  },
  methods: {
    toggleNavClass(){
        if(this.active == false){
          return 'nav'
        } else {
          return 'sticky-nav'
        }

    }
  },
  mounted(){
  window.document.onscroll = () => {
      let navBar = document.getElementById('nav');
      if(window.scrollY > navBar.offsetTop){
        this.active = true;
        } else {
        this.active = false;
      }
    }
  }
})

/*scrollY returns the scroll amount in pixels.
offsetTop is the px difference between the navBar and closest parent element*/
body {
  margin: 0;
  box-sizing: border-box;
}

#app {
  color: #2c3e50;
  background-color: #ccd6dd;
  height: 120vh;
}

a {
  font-weight: bold;
  color: white;
  text-decoration: none;
  margin: 0 1vw;
}

a:hover {
  transition: linear 100ms;
  color: red;
}

/* two classes, decided on scroll */
.nav {
  transition: 100ms;
  padding: 25px;
}

.sticky-nav{
  transition: 100ms;
  padding: 20px;
}

#nav {
  display: flex;
  justify-content: space-between;
  width: 100%;
  background-color: #55acee;
  position: fixed;
  top: 0;
}

/* have to add the ID nav (#nav) otherwise the backgrnd color won't change as the previous background color is set in an ID and ID trumps class notation */
#nav.sticky{
  transition: 150ms;
  box-shadow: 0px 15px 10px -15px #111;
  background-color:  #ccd6dd;
  }
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.17/vue.js"></script>

<div id="app">
    <div id="nav" :class="{sticky:active}"> 
      <div id="nav-container" :class="toggleNavClass()"><a href="#">Menu</a>
    </div>
      <router-view />
</div>

我刚用Vue建了个网站这是我的代码

相关问题