vue双向定位导航效果

需求:实现双向定位导航效果,点击左侧菜单,右侧滚动到相应的位置。滚动右边,左侧相应菜单高亮。

html代码:

 1 <ul class="EntTake_main_left" :class="{ 'fixed-menu': fixedMenu }">
 2   <li
 3     class="forensics-main-item nav1"
 4     v-for="(val, index) in menuList"
 5     :key="index"
 6     :class="menuClickIndex === index ? 'clickStyle' : ''"
 7     @click="clickMenu(index)"
 8   >
 9     {{ val }}
10   </li>
11 </ul>

data里定义数据:

isFixed: false,
fixedMenu: false,
scrollTop: 0,
menuList: [
    '课程信息',
    '课程及收费依据',
    '报名政策',
    '所需材料信息',
    '培训流程',
    '证书样本',
    '常见问题'
],
menuClickIndex: 0,

js中代码:

 1 methods: {
 2   // 点击左侧菜单
 3    clickMenu(index) {
 4       this.menuClickIndex = index;
 5        const jump = document.querySelectorAll('.section');
 6        const total = jump[index].offsetTop - 76;
 7        document.body.scrollTop = total;
 8        document.documentElement.scrollTop = total;
 9    },
10    dataScroll() {
11        this.scrollTop = document.documentElement.scrollTop || document.body.scrollTop;
12        if (this.scrollTop && this.scrollTop > 260) {
13            this.fixedMenu = true;
14        } else {
15            this.fixedMenu = false;
16        }
17        this.isFixed = this.scrollTop > 258;
18    },
19    loadScroll() {
20        const sections = document.querySelectorAll('.section');
21        sections.forEach((item, index) => {
22            if (this.scrollTop >= item.offsetTop - 200) {
23                this.menuClickIndex = index;
24            }
25        });
26    }
27 },
28  mounted() {
29     window.addEventListener('scroll', this.dataScroll);
30  },
31  watch: {
32    scrollTop() {
33       this.loadScroll();
34    }
35  },
36  destroyed() {
37     window.removeEventListener('scroll', this.dataScroll, false);
38  }

 

posted @ 2020-06-13 10:57  鼓舞飞扬  阅读(675)  评论(0编辑  收藏  举报