fairy-0518

Vue项目中需要实现滑动吸顶以及锚点定位功能。template代码如下:

<template>
<div class="main">
    <div id=\'menu\'>
        <ul>
            <li v-for="item in tabList" @click=\'clickTab\'></li>
        </ul>
    </div>
    <div id=\'div1\'></div>
    <div id=\'div2\'></div>
    <div id=\'div3\'></div>
</div>  
</template>

(1)滑动吸顶:

监听scroll事件,获取页面的滚动距离,一旦滚动距离大于目标值,实现滑动吸顶功能。

public isFixed = false;
public mounted() {
    this.menuTop = (document.getElementById(\'menu\') as any).offsetTop;
    window.addEventListener(\'scroll\', this.handleScroll);
 }
public handleScroll() {
    const scrollTop = document.documentElement.scrollTop || document.body.scrollTop; // 获取滑动距离
    if (scrollTop < this.menuTop ) {
      this.isFixed = false;
    } else {
      this.isFixed = true; // 设置fixed定位
    }
 }
public destroyed() {
    window.removeEventListener(\'scroll\', this.handleScroll);
}

(2)锚点定位。点击tab,设置页面滚动距离。

public clickTab(index: number) {
    this.activeIndex = index;
    this.isFixed = true;
    const menuHeight= (document.getElementById(\'menu\') as any).offsetHeight;
    const div1= (document.getElementById(\'div1\') as any).offsetTop;
    const div2= (document.getElementById(\'div2\') as any).offsetTop;
    const div3= (document.getElementById(\'div3\') as any).offsetTop;
    const div4= (document.getElementById(\'div4\') as any).offsetTop;
    switch (index) {
      case 0: document.body.scrollTop = document.documentElement.scrollTop = div1 - menuHeight; break;
      case 1: document.body.scrollTop = document.documentElement.scrollTop = div2 - menuHeight; break;
      case 2: document.body.scrollTop = document.documentElement.scrollTop = div3 - menuHeight; break;
      case 3: document.body.scrollTop = document.documentElement.scrollTop = div4 - menuHeight; break;
      default: document.body.scrollTop = document.documentElement.scrollTop = div1- menuHeight;
    }
  }

分类:

技术点:

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-02-16
  • 2022-02-19
  • 2022-12-23
  • 2022-12-23
  • 2021-12-14
  • 2022-01-13
猜你喜欢
  • 2022-12-23
  • 2021-11-19
  • 2022-01-18
  • 2022-12-23
  • 2022-02-05
  • 2021-09-14
  • 2022-01-09
相关资源
相似解决方案