vue使用原生js实现滚动页面跟踪导航高亮

本篇文章给大家带来的内容是关于vue使用原生js实现滚动页面跟踪导航高亮,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。

需要使用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() {      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  _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");            }          }        }      })    }  }};

登录后复制

以上就是vue使用原生js实现滚动页面跟踪导航高亮的详细内容,更多请关注【创想鸟】其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/2738069.html

(0)
上一篇 2025年3月8日 01:44:43
下一篇 2025年3月6日 22:25:41

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • es6中Set和Map的对比介绍(附代码)

    本篇文章给大家带来的内容是关于es6中set和map的对比介绍(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 Set 1、add()方法和size属性 { let list = new Set(); // add…

    编程技术 2025年3月8日
    200
  • ES6的Symbol的用法详解(附代码)

    本篇文章给大家带来的内容是关于es6的symbol的用法详解(附代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 1、Symbol是ES6新增的数据类型,它提供独一无二的值 { // 声明,Symbol声明的变量是唯一…

    编程技术 2025年3月8日
    200
  • ECMAScript 6中类继承解析(附示例)

    本篇文章给大家带来的内容是关于ecmascript 6中类继承解析(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 类继承 看类继承前,先回顾构造函数怎么实现对象的继承的 function F() { this.a…

    编程技术 2025年3月8日
    200
  • javascript函数表达式的特征以及递归的理解(附示例)

    本篇文章给大家带来的内容是关于javascript函数表达式的特征以及递归的理解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 函数表达式是javascript中的一个既强大又容易令人困惑的特性。 定义函数的方式…

    编程技术 2025年3月8日
    200
  • 对es6中类的简单理解(附示例)

    本篇文章给大家带来的内容是关于对es6中类的简单理解(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 类class 基本概念,记录以便自己后面加深理解 了解类是什么 class是什么?不妨写一个看看 class D…

    编程技术 2025年3月8日
    200
  • ES6下异步处理的实例讲解

    本篇文章给大家带来的内容是关于es6下异步处理的实例讲解,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 前言 我们以查找指定目录下的最大文件为例,感受从 回调函数 -> Promise -> Generator…

    编程技术 2025年3月8日
    200
  • ajax-plus的使用方法介绍(代码)

    本篇文章给大家带来的内容是关于ajax-plus的使用方法介绍(代码),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 ajax-plus 基于axios 的 Vue 插件 如何使用 npm 模块引入 首先通过 npm 安装…

    编程技术 2025年3月8日
    200
  • CommonJS规范是什么?了解CommonJS规范

    本篇文章给大家带来的内容是关于commonjs规范是什么?了解commonjs规范,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 写在前面:  一个文件就是一个模块。   另外本文中的示例代码需要在node.js环境中方可…

    编程技术 2025年3月8日
    200
  • 为什么需要模块化?js中常用模块化方案介绍

    本篇文章给大家带来的内容是关于为什么需要模块化?js中常用模块化方案介绍,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 为什么需要模块化 在ES6出现之前,JS语言本身并没有提供模块化能力,这为开发带来了一些问题,其中最重…

    编程技术 2025年3月8日
    200
  • 通过封装一个v-clamp的指令处理多行文本的溢出

    本篇文章给大家带来的内容是关于通过封装一个v-clamp的指令处理多行文本的溢出,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。 最近做项目时,遇到了一个需求:要求div里文本在两行显示,div的宽度是固定的,如果溢出的话就…

    编程技术 2025年3月8日
    200

发表回复

登录后才能评论