Le contenu de cet article concerne Vue utilisant js natif pour implémenter le suivi des pages de défilement et la mise en évidence de la navigation. Il a une certaine valeur de référence. Les amis dans le besoin peuvent s'y référer.
Vous devez utiliser vue pour créer une page spéciale.
Mettez en surbrillance la navigation dans la zone spécifiée de la page de défilement.
Écoutez l'événement de défilement de la page et comparez la position de la page actuelle avec la position de l'élément. Si la position de la zone de défilement actuelle est supérieure à la position de l'élément, ajoutez une classe à la navigation et supprimez-la. la classe pour les autres styles pour changer de style.La méthode que j'utilise consiste à ajouter un identifiant à l'élément de positionnement, à ajouter l'attribut data-id à la navigation, à écouter les événements de défilement et si la zone de défilement actuelle est plus grande que la zone de l'élément de positionnement, à attribuer l'identifiant de l'élément. à une variable, puis combinez-la avec les données de navigation. Faites correspondre l'identifiant et changez de classe.
main.vue
<template> <div class="qz-home"> <div class="quiz-container"> <div class="quiz-ad-pic" id="pagetop"></div> <div class="quiz-main"> <div class="quiz-main-inside" id="js-content"> <quiz-sessions class="item" id="quizhall"></quiz-sessions> <quizRecords class="item" id="quizrecord"></quizRecords> <quiz-history class="item" id="quizHistory"></quiz-history> <quiz-mine class="item" id="quizMine"></quiz-mine> <quiz-rank class="item" id="quizRank"></quiz-rank> <quiz-rule class="item" id="quizRule"></quiz-rule> </div> </div> <navigation id="js-nav"></navigation> </div> </div> </template>
navigation.vue
<template> <nav class="nav-container"> <div class="nav-mark"></div> <div class="nav-main"> <ul class="nav-list"> <li :class="{'cur': curindex === index}" v-for="(item, index) in navList" :key="index" :data-id="item.id"><a @click="linkTo(item.id, index)">{{item.name}}</a></li> </ul> <div class="backtop" @click="backTop()"> <a></a> </div> </div> </nav> </template>
javascript
export default { name: "Navigation", data() { return { navList: [ { name: "竞猜大厅", id: "quizhall" }, { name: "竞猜记录", id: "quizrecord" }, { name: "历史赛事", id: "quizHistory" }, { name: "我的竞猜", id: "quizMine" }, { name: "排行榜", id: "quizRank" }, { name: "玩法", id: "quizRule" } ], curindex: 0 }; }, mounted() { this.initScroll(); }, methods: { initScroll() { let _this = this; // 监听页面滚动事件 window.addEventListener('scroll', function() { var removeClass = function(obj, cls) { if (obj.className == cls) { obj.className = ""; } } var addClass = function(obj, cls) { if (obj.className != cls) { obj.className = cls; } } let pos = document.documentElement.scrollTop; if (pos > 300) { _this.isVisibleNav = true; } else { _this.isVisibleNav = false; } // 获取全部导航dom与元素dom var navList = document.querySelector("#js-nav").querySelectorAll("li"); var items = document.querySelector("#js-content").querySelectorAll(".item"); // 滚动后遍历元素,如果页面滚动位置大于元素的位置,赋值给变量 var currentId = ""; for (var i = 0; i < items.length; i++) { var _item = items[i]; var _itemTop = _item.offsetTop; if (pos > _itemTop - 200) { currentId = _item.id; } else { break; } } // 如果已赋值了变量,进行匹配,如果匹配则添加class其他删除 if (currentId) { for (var j = 0; j < navList.length; j++) { var _navItem = navList[j]; var _navId = _navItem.getAttribute('data-id'); if (_navId != currentId) { removeClass(_navItem, "cur"); } else { addClass(_navItem, "cur"); } } } }) } } };
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!