美文网首页
vue 监听滚动事件 实现固定在顶部或者元素显示与否

vue 监听滚动事件 实现固定在顶部或者元素显示与否

作者: LynnLiu_ | 来源:发表于2018-12-20 16:24 被阅读0次

需求:当页面滚动到距离顶部175px的时候,页面导航栏固定在顶部

效果图

1. 监听滚动事件

在mounted钩子中给window添加一个滚动监听事件

mounted() {
    window.addEventListener('scroll', this.handleScroll)
}

然后在method方法中,添加这个handleScroll方法

method: {
  handleScroll() {
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
    console.log(scrollTop)
  }
}

控制台打印结果:


2. 监听元素到顶部的距离,并判断滚动的距离如果大于了元素到顶部的距离时,设置needFixed为true,否则就是false

method: {
  handleScroll() {
    let self = this
    let scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
   console.log(scrollTop)
   if (scrollTop > 175) {
      self.needFixed = true;
   } else {
      self.needFixed = false;
   }
  }
}

3. 为该元素写一个固定在顶部的样式,主要是外层,内层数据自己定义

.hasFixed {
   position: fixed;
   top: 0;
   right: 0;
   left: 0;
   z-index: 1000; //视情况而定,需不需要
}

4. 将需要固定的元素的class和needFixed进行绑定,如果needFixed为true时,就应用这个hasFixed样式

<div :class="{'hasFixed': needFixed == true}">
  sdsdsds
</div>

5. 离开该页面时,需要移除这个监听的事件,不然会报错

    destroyed () {
      window.removeEventListener('scroll', this.handleScroll)
    },

备注:

  • 如果组件需要进行滚动固定,在组件中进行上述的操作即可,方法名不能与其他滚动方法名一样。
  • 一个页面引入多个组件,组件有滚动事件监听,并且页面内部有滚动事件监听,不会互相影响

相关文章

网友评论

      本文标题:vue 监听滚动事件 实现固定在顶部或者元素显示与否

      本文链接:https://www.haomeiwen.com/subject/ibmykqtx.html