最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
时间:2022-06-25 15:31:48 编辑:袖梨 来源:一聚教程网
需要使用vue做一个专题页面。滚动页面指定区域导航高亮。
监听滚动页面事件,对比当前页面的位置与元素的位置,如果当前滚动的区域位置大于元素的位置,导航添加class,其他去掉class进行样式切换。
我使用的方法是在定位元素上添加id,在导航添加data-id属性,监听滚动事件,如果当前滚动区域大于定位元素区域,将元素的id赋值给变量,然后与导航的data-id进行匹配,切换class。
html结构
main.vue
navigation.vue
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() { window.addEventListener('scroll', function() { // 封装类名函数集:判断、移除、增加、获取(简单粗暴版); function removeClass(obj, cls) { if (obj.className == cls) { obj.className = ""; } } function addClass(obj, cls) { if (obj.className != cls) { obj.className = cls; } } let pos = document.documentElement.scrollTop; if (pos > 300) { document.querySelector('.nav-container').style.display = 'block'; } else { document.querySelector('.nav-container').style.display = 'none'; } var menus = document.getElementById("js-nav").getElementsByTagName("li"); var items = document.getElementById("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; } } if (currentId) { for (var j = 0; j < menus.length; j++) { var _menu = menus[j]; // href属性获取的是整个link,需以#为界截除获取最后一个元素; var _href = _menu.getAttribute('data-id'); if (_href != currentId) { removeClass(_menu, "cur"); } else { addClass(_menu, "cur"); } } } }) } } };