vue.js - 在 Vue.js 中如何使导航在向下滚动事件中淡入淡出并在滚动 pageYOffset = 0 处淡出

标签 vue.js animation vuejs2 frontend vue-component

我正在做一个 Vue.js 项目,我被困在标题导航栏的小动画上。

我想听用户滚动事件并淡入和淡出导航栏,如果用户向下滚动,淡入,如果用户滚动回到顶部:0淡出,并显示没有导航栏的全屏介绍.导航固定/粘在顶部。

我如何使用 Vue.js 执行此操作?

为了更好的可视化: this is the screenshot of my page

最佳答案

我改编了this solution通过将 showNavbar 属性添加到更改导航栏状态的数据对象并使用 transition 元素和 name='fade' 包装 navbar 元素,在您的 CSS 中您必须添加以下规则:

.fade-enter-active
{
transition: all 1s;
  }
 .fade-leave-active {
 transition: all 2s;
  }
 .fade-enter, .fade-leave-to  {
   opacity: 0;
  }

最后,您应该向滚动事件添加一个事件监听器,例如:

  window.addEventListener('scroll', this.handleScroll);

并检查 window.pageYOffset 的值如下:

  window.pageYOffset>0?this.showNavbar=true:this.showNavbar=false;

下面的代码工作正常:

new Vue({
  el: '#app',
  data() {
    return {
    showNavbar:false
    }
    },
  methods:{
   handleScroll (event) {
      window.pageYOffset>0?this.showNavbar=true:this.showNavbar=false;
    }
  },
    created () {
    window.addEventListener('scroll', this.handleScroll);
  },
  destroyed () {
    window.removeEventListener('scroll', this.handleScroll);
  }
})
body {
  margin: 0;
  font-size: 28px;
  font-family: Arial, Helvetica, sans-serif;
}

.header {
  background-color: #f1f1f1;
  padding: 30px;
  text-align: center;
}

#navbar {
  overflow: hidden;
  background-color: #333;
}

#navbar a {
  float: left;
  display: block;
  color: #f2f2f2;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

#navbar a:hover {
  background-color: #ddd;
  color: black;
}

#navbar a.active {
  background-color: #4CAF50;
  color: white;
}

.content {
  padding: 16px;
}

.sticky {
  position: fixed;
  top: 0;
  width: 100%;
}

.sticky + .content {
  padding-top: 60px;
}
.fade-enter-active
 {
  transition: all 1s;
}
.fade-leave-active {
  transition: all 2s;
}
.fade-enter, .fade-leave-to  {
  opacity: 0;

}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" >

</head>
<body>
<div id="app">
<div class="header">
  <h2>Scroll Down</h2>
  <p>Scroll down to see the sticky effect.</p>
</div>
<transition name="fade">
<div id="navbar" class="sticky" v-if="showNavbar">
  <a class="active" href="javascript:void(0)">Home</a>
  <a href="javascript:void(0)">News</a>
  <a href="javascript:void(0)">Contact</a>
</div>
</transition >

<div class="content">
  <h3>Sticky Navigation Example</h3>
  <p>The navbar will stick to the top when you reach its scroll position.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
  <p>Some text to enable scrolling.. Lorem ipsum dolor sit amet, illum definitiones no quo, maluisset concludaturque et eum, altera fabulas ut quo. Atqui causae gloriatur ius te, id agam omnis evertitur eum. Affert laboramus repudiandae nec et. Inciderint efficiantur his ad. Eum no molestiae voluptatibus.</p>
</div>

</div>

</body>
</html>

关于vue.js - 在 Vue.js 中如何使导航在向下滚动事件中淡入淡出并在滚动 pageYOffset = 0 处淡出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52546606/

相关文章:

android - 如何以编程方式制作滚动动画

javascript - Vuex 存储,为什么添加到数组会用最后一个条目覆盖存储中的所有值?

javascript - 无法在 Vue.js 中动态创建 ref

vue.js - Vue2中如何将数据从父级传递给子级

css - 关于移动 safari 渲染问题的任何想法

javascript - 具有多个入口点的 Internet Explorer 11 的 webpack 4/vue.js 示例

javascript - 来自复选框的Vuejs点击事件?

Android动画不流畅

javascript - 使用 JavaScript 的 Canvas 动画。每次启动时的随机坐标和速度

javascript - Vue.js 将数组从一个页面传递到另一个页面