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

需求:当页面滚动到距离顶部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)
    },

备注:

  • 如果组件需要进行滚动固定,在组件中进行上述的操作即可,方法名不能与其他滚动方法名一样。
  • 一个页面引入多个组件,组件有滚动事件监听,并且页面内部有滚动事件监听,不会互相影响
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 最近写了一个VUE的web app项目,需要实现某个部位吸顶的效果。即,页面往上滑动,刚好到达该部位时,该部分,固...
    竿牍阅读 18,009评论 3 15
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 28,310评论 1 45
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,563评论 4 61
  • 我愿意 在你觉得沮丧的时候陪你一起聊QQ逗你开心 在你难过的时候陪你在身边当个忠实的听众 在你需要我的时候会第一时...
    逝誓释阅读 1,342评论 0 1
  • 下午去小苗家玩,跟小苗爸爸顺便聊了几句,言语间苗爸爸有意无意地提起别人家考上了正式编制的孩子。 告别时我偷偷跟小苗...
    迷舞之风阅读 4,855评论 0 0

友情链接更多精彩内容