Vue监听滚动实现导航栏锚点定位

2023-11-06

父级

<div>
       <div id="floor0"></div>
        <div id="floor1"></div>
        <div id="floor2"></div>
        <div id="floor3"></div>
   

子组件

   <ul id="tab"  slot="center" class="compreDiagnosisInfoUl" :class="navBarFixed == true ? 'navBarWrap':''">
                <li  id="tab1" class="active" @click="itemClick('floor0',0)">
                    <h2 class="top">导航一</h2>
                </li>
                <li id="tab2" @click="itemClick('floor1',1)"  v-if="header.fundtype != '货币型'">
                    <h2 class="top">导航二</h2>                 
                </li>
                <li id="tab3" @click="itemClick('floor2',2)">
                    <h2 class="top">导航三</h2>
                     </li>
                <li id="tab4" @click="itemClick('floor3',3)">
                    <h2 class="top">导航四</h2>
                     </li>
            </ul>

定义顶部吸附变量
data() {
navBarFixed:false
}

   methods: {
      itemClick(index,i){
                this.moveIndex = i;
                let anchorElement = document.getElementById(index);
                // console.log(anchorElement)
                let scrollTop = document.body.scrollTop ? document.body.scrollTop : document.documentElement.scrollTop;
                if(anchorElement && i != 1) {
                    anchorElement.scrollIntoView();
                }
                // console.log(scrollTop)
                // 点击的时候 滚动到对应的那个内容区
                // 1:获取点击的按钮对应页面的id
                let PageId = document.querySelector("#floor" + i);
                //:2:设置滚动 并且带有丝滑的滚动事件
                window.scrollTo({
                    top: PageId.offsetTop - 80,
                    behavior: "smooth"
                });

                this.tabSelect(i);
            },
            tabSelect(i){
                let docList = document.querySelectorAll('li');
                let doc = document.querySelector('#tab' + i);
                for(let i = 0; i < docList.length; i++){
                    docList[i].classList.remove('active');
                }
                doc.classList.add('active');
            },
            handleScroll(){
                 let scrollTop = window.pageYOffset + 80|| document.documentElement.scrollTop + 80|| document.body.scrollTop + 80
                let floor_0 = document.querySelector('#floor0').offsetTop;
                let floor_1 = document.querySelector('#floor1').offsetTop;
                let floor_2 = document.querySelector('#floor2').offsetTop;
                let floor_3 = document.querySelector('#floor3').offsetTop;

                //当滚动超过500时,实现吸顶效果
                if(scrollTop  > 500){
                    this.navBarFixed = true;
                }else {
                    this.navBarFixed = false
                }

                if (floor_0 <= scrollTop && scrollTop < floor_1) {
                    this.tabSelect(1);

                } else if (floor_1 <= scrollTop && scrollTop < floor_2) {
                    this.tabSelect(2);

                } else if (floor_2 <= scrollTop && scrollTop < floor_3) {
                    this.tabSelect(3);

                } else if (scrollTop >= floor_3) {
                    this.tabSelect(4);

                }

          
            },
   }
 mounted() {
   //事件监听滚动
            window.addEventListener('scroll',this.handleScroll)
}
 destroyed() {
            // 移除事件监听
            window.removeEventListener("scroll", this.handleScroll);
        },
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue监听滚动实现导航栏锚点定位 的相关文章

  • 页面在 Google Adwords 转化跟踪上重定向

    我有一个表单 人们可以在其中提交数据 然后使用 ajax 将数据发送到服务器 我已将其设置为 Google Adwords 中的转化 下面是我使用过的代码 问题是 当用户提交表单时 在收到响应后 它会重定向回我给出的 URL 我不想重定向
  • 从 Internet Explorer 打印时的默认文件名

    使用 pdf 打印机打印网页 将页面另存为 pdf 时 Chrome 和 Firefox 都使用该页面
  • 从 Javascript 中的嵌套函数返回值[重复]

    这个问题在这里已经有答案了 考虑这段代码 缩短 function getSecret db transaction function transaction transaction executeSql SELECT FROM table
  • 使用 JavaScript 格式化日期

    JavaScript 中的日期格式有问题 这是我的函数代码 originalDate 2016 03 02 09 12 14 989522 var d new Date originalDate month d getMonth 1 day
  • 提升变量有目的吗?

    我最近学习了很多 JavaScript 并且一直在尝试理解提升变量的值 如果有的话 我 现在 明白JS是一个两遍系统 它编译然后执行 另外 我知道 var 关键字 存在 在它声明的词法范围中 因此如果在引擎为其赋值之前调用它 那么它是 未定
  • 如何在javascript中动态向对象数组添加值?

    这是一个对象数组 var data label 1 value 12 label 1 value 12 label 1 value 12 label 1 value 12 我如何动态地为这些添加值 我尝试了以下代码但没有成功 var lab
  • Bootstrap 标签栏平滑移动导航按钮

    我有一个用于切换块的普通引导选项卡面板 在导航中切换块时 活动选项卡会突出显示 但现在 当我单击活动选项卡的背景时 它会立即发生变化 是否可以使切换选项卡时背景不会立即改变 而是根据需要哪个选项卡而平滑地左右移动 这可以用以下方法完成吗cs
  • jQuery 可以操作插入的元素吗?

    我是 jQuery 的新手 我认为 jQuery 可以操作由代码添加的元素是合理的 但我发现现在还不能 function addVideo click function publisher append div div
  • Visual Studio 改变 Ctrl-K-D 的工作方式

    In Visual Studio I m using 2012 is there any way of editing the way that Ctrl K D combinations handles its Auto Formatti
  • 从对象中取出具有无效(NaN、空白等)值的键的最佳方法?

    我有一个供用户填写的简短搜索表单 将有多个搜索查询进入 MongoDB 该表单创建一个名为的变量searchParams可能看起来像这样 var searchParams city Springfield bedrooms 3 bathro
  • 转义 \u200b(零宽度空格)和其他非法 JavaScript 字符

    我有一组 JavaScript 对象 我引导到后端模板 以在页面加载时初始化我的 Backbone js 集合 它看起来像这样 作为 Twig 模板 我遇到的问题是某些文本字段包含 u200b 零宽度空格 这会破坏
  • 为什么函数声明在不同浏览器中的处理方式不同?

    虽然我在谷歌中找不到对此的引用 但我熟悉这样一个事实 在 javascript 中 全局函数声明在执行任何代码之前都会被解释 换句话说 这工作得很好 f function f 但是 我注意到 chrome 和 firefox 对全局函数声明
  • Socket IO 服务器到服务器

    服务器是否可以使用 Socket IO 连接到另一个服务器并被视为客户端 并让它加入房间 接收 io sockets in lobby emit 和更多 第一个服务器也在监听连接 消息 嘿 Brad 下面是我的完整 js 应用程序 供参考
  • D3 向对象添加超链接?

    我正在尝试制作 D3 图 它将代表我网站的菜单 我尝试按照此处的其他指南添加超链接 但它们都不起作用 每个对象都会有一个不同的 URL 指向 主页 关于 联系方式等 如果添加超链接 我可以拖动对象吗 这意味着如果我按住单击 如果我单击该对象
  • 引用自身的 Javascript 对象...有问题吗?

    由于 Javascript 允许通过引用分配复合值 因此如果 Javascript 对象引用自身 它将创建无限的引用集 如控制台中所示 这看起来像是某种无限循环 但 Chrome 似乎没有问题 这样做是否存在任何内存问题或其他风险 就记忆力
  • 如何在新窗口中打开图像或pdf文件?

    我有一个 gridview 它包含文件名和文件路径 图像和 pdf 格式文件 其中我使用了模板字段 在该字段下放置了 1 个图像按钮 单击该图像按钮 即 查看 按钮 时 我想在新窗口中打开所选文件 这是我的代码 protected void
  • Angularjs : $locationProvider.hashPrefix("!") ;

    我想将网址显示为 www test com 因为我正在使用 locationProvider hashPrefix 但它显示网址为 www test com 我想 哈希之前而不是哈希之后 Thanks var app angular mod
  • 将 JSON 属性绑定到表单

    我有一个 JSON 对象和一个
  • $ 在 JQuery 中意味着什么

    在下面的 var obj one 1 two 2 three 3 four 4 five 5 each obj function i val console log val 这里是什么意思 是对象吗 是一个别名jQuery对象 函数 它充当
  • 如何通过点击复制 folium 地图上的标记位置?

    I am able to print the location of a given marker on the map using folium plugins MousePosition class GeoMap def update

随机推荐

  • 创建型模式之简单工厂模式——接口和抽象类

    本文收录于专栏 源码中的设计模式 理论与实战的完美结合 作者其它优质专栏推荐 技术专家修炼 搞技术 进大厂 聊人生三合一专栏 leetcode 300题 每天一道算法题 进大厂必备 糊涂算法 从今天起 迈过数据结构和算法这道坎 从实战学py
  • Visual Studio Community2019的安装过程

    Visual Studio Community2019的安装过程 一 下载安装包 浏览器搜索 visual studio community 选择一个合适的版本或者搜索网址 https visualstudio microsoft com
  • Chisel 手册(中文part1)

    Chisel 手册 part1 作者 Jonathan Bachrach Huy Vo Krste Asanovi EECS Department UC Berkeley 译者 智能物联 CSDN 1 简介 本文为Chisel手册 Cons
  • 温度检测模块 DS18B20 数据解析

    目录 1 DSB18B20结构框图解析 2 64 bit ROM 发送时低位优先 3 16 bit 温度寄存器 4 8 bit 配置寄存器 5 8 bit CRC校验 6 DSB18b20命令格式 7 DSB18b20通信实例实测 1 DS
  • Avalonia框架MVVM模式打开和关闭当前界面

    Avalonia框架MVVM模式打开和关闭当前界面和WPF的MVVM模式是一致的 区别只在于Avalonia是跨平台的 本文主要是记录Avalonia框架MVVM模式打开和关闭当前界面 主要是参考了十月的寒流的WPF中如何在MVVM模式下关
  • hive操作表分区HiveException:Unable to alter partition

    异常信息 2021 10 16 03 36 22 INFO Error in query org apache hadoop hive ql metadata HiveException Unable to alter partition
  • D - Robots Easy Gym - 102267D 搜索+路径记录

    Alice was playing her favorite game Tales of the Abyss while playing she encountered the following puzzle that can be de
  • 疯狂Java讲义笔记汇总

    目录 一 基础类型 二 流程控制与数组 三 面向对象 四 基础类库 五 集合 六 泛型 七 异常 八 数据库 九 注释 十 输入输出 十一 网络 十二 类加载机制 十三 多线程 面向对象三大特性 封装 继承 多态 一 基础类型 char i
  • 增益带宽积(GBWP、GBW、GBP、GB)

    增益带宽积 gain bandwidth product 放大器的增益带宽积是放大器带宽和带宽增益的乘积 1 释义 增益 表示放大器功率放大倍数 以输出功率同输入功率比值的常用对数表示 单位为分贝 dB 带宽 是指在固定的的时间可传输的资料
  • 【C语言进阶】习题练习4

    目录 习题1 习题2 求Sn a aa aaa aaaa aaaaa的前5项之和 其中a是一个数字 习题3 写一个函数打印arr数组的内容 不使用数组下标 使用指针 arr是一个整形一维数组 习题4 求出0 100000之间的所有 水仙花数
  • 查看Oracle数据库sid和用户名

    select name from v database 查看数据库名 select instance name from v instance 查看sid select from dba users 查看数据库里面所有用户 前提是有dba权
  • openGL细分着色器详解

    openGL系列文章目录 文章目录 openGL系列文章目录 前言 一 细分曲面着色器 1 细分曲面Patch 例子 1 c 主程序 2 片元着色器 3 曲面细分控制着色器 4 曲面细分评估着色器 运行结果 源码下载 前言 术语Tessel
  • 免费小程序商城搭建之b2b2c o2o 多商家入驻商城 直播带货商城 电子商务b2b2c o2o 多商家入驻商城 直播带货商城 电子商务

    1 涉及平台 平台管理 商家端 PC端 手机端 买家平台 H5 公众号 小程序 APP端 IOS Android 微服务平台 业务服务 2 核心架构 Spring Cloud Spring Boot Mybatis Redis 3 前端框架
  • java设计模式(二十三)访问者模式

    目录 定义 模式结构 角色职责 代码实现 适用场景 优缺点 定义 访问者模式是一种行为型模式 它允许你定义一个作用于某个对象结构中的各个元素的操作 而同时又不改变这些元素的类 该模式的核心思想是将数据结构与数据操作分离 从而可以在不改变数据
  • IOS_Swift_深入理解闭包 对比懒加载和普通赋值的区别

    定义一个字符串的变量的方法 直接赋值 var str JobDeer 闭包方式 var str String return JobDeer 简化闭包 省略了等号和括号 var str String return JobDeer 闭包中可以定
  • citrix协议ICA技术原理

    转载自 http www zrss com cn article 110 1 html Citrix交付中心解决方案的核心是虚拟化技术 虚拟化计算的核心是ICA协议 ICA协议连接了运行在平台上的应用客户端运行环境和远端终端设备 通过ICA
  • Flutter 单线程模型保证UI运行流畅

    Flutter 框架出色的渲染和交互能力 支撑起这些复杂的能力背后 实际上是基于单线程模型的 Dart 那么 与原生 Android 和 iOS 的多线程机制相比 单线程的 Dart 如何从语言设计层面和代码运行机制上保证 Flutter
  • JUC并发编程之AQS原理

    1 AQS 原理 1 1 概述 全称是 AbstractQueuedSynchronizer 是阻塞式锁和相关的同步器工具的框架 特点 用 state 属性来表示资源的状态 分独占模式和共享模式 子类需要定义如何维护这个生态 控制如何获取锁
  • PCL点云焊点提取

    滚回来更新一篇文章 和各位交流一下 待处理点云 数量级 百万 类型 零部件 描述 弯曲表面上有一些凸起在上面 需要提取凸起和平面接触的一圈点云 作为焊接的加工点 参考 https zhuanlan zhihu com p 32111069
  • Vue监听滚动实现导航栏锚点定位

    父级 div div div div div div div div div 子组件 ul class compreDiagnosisInfoUl li class active li ul div