vue项目中使用js原生制作吸顶效果

获取滚动条的偏移量

document.documentElement.scrollTop

IE浏览器一般用这个值

document.body.scrollTop

为了兼容,我们一般通过下面代码获取滚动条的偏移量:

scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop

html结构:

<template>
  <div class="param-bar" :class="{ 'is_fixed': isFixed }">
    <div class="container">
      <div class="pro-title">
        MI8
      </div>
      <div class="pro-params">
        <a href="javascript:;">概述</a><span>|</span>
        <a href="javascript:;">参数</a><span>|</span>
        <a href="javascript:;">评价</a>
        <slot name="buy"></slot>
      </div>
    </div>
  </div>
</template>

sass:

<style lang="scss" scoped>
  @import '../assets/config.scss';
  @import '../assets/mixin.scss';
  .param-bar{
    background: $colorG;
    box-shadow: 0 5px 5px $colorE;
    width: 100%;
    height: 70px;
    line-height: 70px;
    border-top: 1px solid $colorH;
    &.is_fixed{
      position: fixed;
      top: 0
    }
    .container{
      @include flex();
      .pro-title{
        font-size: $fontH;
        color: $colorB;
        font-weight: bold;
      }
      .pro-params{
        font-size: $fontJ;
        a{
          color: $colorC;
        }
        span{
          margin: 0 10px;
        }
      }
    }
  }
</style>

js:

<script>
export default {
  name: 'param-bar',
  data () {
    return {
      isFixed: false
    }
  },
  mounted () {
    window.addEventListener('scroll', this.initHeight)
  },
  methods: {
    initHeight () {
      console.log(111)
      const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop
      this.isFixed = scrollTop > 152 ? true : false
    }
  },
  // 页面关闭就销毁initHeight,不然还会在其他页面加载浪费资源
  destroyed () {
    window.removeEventListener('scroll', this.initHeight, false)
  }
}
</script>

要注意的是:
param-bar动态绑定在这里插入图片描述
mounted时候调用js原生的addEventListener,监听scroll事件,并且调用this.initHeight方法:
在这里插入图片描述

initHeight方法判断是否滚动到需要吸顶的位置,到了就修改isFixed的值为true

最喜耀注意的是,一定要在destroyed生命周期钩子里销毁这个事件监听,不然在其他页面还会调用,浪费资源:
在这里插入图片描述
我们看一下如果不销毁,会怎么样:
在这里插入图片描述
在这里插入图片描述
发现即使退出了产品页面回到首页,还是会叫用scroll事件监听。

所以我们在destroyed里面把这个scroll事件监听销毁掉:
在这里插入图片描述
现在看看效果:
在这里插入图片描述
还有一个要注意的就是一定要给param-bar添加width:100%,让它撑开到全部宽度,不然一旦动态加上position:fixed就没有宽度了就不会居中了
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值