hxw6
<template>
  <div id="app">
    <header>
      <a href="javascript:void(0);" :class="active == \'#home\' ? \'active\' : \'\'" @click="toTarget(\'#home\')">首页</a>
      <a href="javascript:void(0);" :class="active == \'#team\' ? \'active\' : \'\'"  @click="toTarget(\'#team\')">团队</a>
      <a href="javascript:void(0);" :class="active == \'#contact\' ? \'active\' : \'\'"  @click="toTarget(\'#contact\')">联系</a>
      <a href="javascript:void(0);" :class="active == \'#join\' ? \'active\' : \'\'"  @click="toTarget(\'#join\')">加入我们</a>
    </header>
    <div id="home">
      首页
    </div>
    <div id="team">
      团队
    </div>
    <div id="contact">
      联系
    </div>
    <div id="join">
      加入我们
    </div>
  </div>
</template>
<script>
  export default {
    data() {
      return {
        active: \'#home\',
        scrollIntoViewOptions: {
          block: \'start\',
          behavior: \'smooth\'
        }
      }
    },
    mounted() {
      // 一次性计算赋值,减少滚动计算节点位置次数
      this.distance_team = document.querySelector(\'#team\').offsetTop - 60
      this.distance_contact = document.querySelector(\'#contact\').offsetTop - 60
      this.distance_join = document.querySelector(\'#join\').offsetTop - 60
      this.$nextTick(function() {
        document.querySelector(\'#app\').addEventListener(\'scroll\', this.onScroll)
      })
      window.addEventListener(\'scroll\', this.onScroll, true)
    },
    methods: {
      toTarget(target) {
        console.log(target)
        this.active = target
        const toElement = document.querySelector(target)
        toElement.scrollIntoView(this.scrollIntoViewOptions)
      },
      onScroll() {
        const scrolled = document.querySelector(\'.app-main\').scrollTop
        if (scrolled < this.distance_team) {
          this.active = \'#home\'
        } else if (scrolled >= this.distance_team && scrolled < this.distance_contact) {
          this.active = \'#team\'
        } else if (scrolled >= this.distance_contact && scrolled < this.distance_join) {
          this.active = \'#contact\'
        } else {
          this.active = \'#join\'
        }
      }
    },
    destroyed() {
      window.removeEventListener(\'scroll\', this.onScroll, true)
    }
  }
</script>

<style lang="scss" scoped>
  *{
    margin: 0;
    padding: 0;
  }
  #app {  //关键代码,需要给容器添加高度
    position: relative;
    width: 100%;
    height: 100vh;
  }
  header{
    width: 100%;
    height: 60px;
    position: fixed;
    top: 0px;
    left: 0px;
    z-index: 1;
    background: #fff;
    display: flex;
    display: -webkit-flex;
    justify-content: center;
    a{
      width: 200px;
      height: 60px;
      display: block;
      text-align: center;
      line-height: 60px;
      color: #333333;
      text-decoration: none;
      &:hover,&.active{
        color: dodgerblue;
      }
    }
  }
  #home,#team,#contact,#join{
    width: 100%;
    height: 500px;
    color: #FFFF;
    font-size: 30px;
    text-align: center;
    line-height: 500px;
  }
  #home{
    background: tomato;
  }
  #team{
    background: deepskyblue;
  }
  #contact{
    background: orange;
  }
  #join {
    height: 1000px;
    background: lightgreen;
  }
</style>

 

分类:

技术点:

相关文章:

  • 2021-11-23
  • 2018-07-22
  • 2022-12-23
  • 2021-12-29
  • 2022-02-16
  • 2022-12-23
  • 2022-02-19
  • 2022-12-23
猜你喜欢
  • 2022-01-09
  • 2021-12-14
  • 2021-11-19
  • 2022-02-05
  • 2022-12-23
  • 2022-02-04
  • 2022-12-23
相关资源
相似解决方案