vue3组件 描点定位以及监听滚动切换对应activeTab

本文主要是介绍vue3组件 描点定位以及监听滚动切换对应activeTab,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描点定位以及监听滚动切换对应activeTab

基本逻辑

  1. init 初始化 获取滚动区域内所有非文本子节点
  2. offsetTopArr 存储所有子节点的高度
  3. scroll 监听滚动的距离,找到还在可视区的元素高度
<template><div class="tab-list"><div v-for="item in menuList" class="item" :class="{ 'is-active': active === item.value }"><a :href="`#${item.value}`" @click="active = item.value">{{ item.label }}</a></div></div><div class="scroll-content" @scroll="handleScroll"><slot /></div>
</template><script setup lang="ts">
import { nextTick, onMounted, ref } from 'vue';
import { throttle } from 'lodash';interface propsType {menuList: Array<{label: string;value: string;}>;parentClass: string;
}
const props = withDefaults(defineProps<propsType>(), {menuList: () => [],
});const active = ref(props.menuList[0].value);const offsetTopArr = ref([]);
const curIndex = ref(0);const init = () => {const parentNode = document.querySelector(props.parentClass);const childNodesAll = parentNode.childNodes;for (let index = 0; index < childNodesAll.length; index++) {const child = childNodesAll[index];if (child.nodeType === 1) offsetTopArr.value.push(child.offsetTop);}
};const handleScroll = throttle((e) => {curIndex.value = offsetTopArr.value.findIndex((item) => {return e.target.scrollTop <= item;});active.value = props.menuList[curIndex.value].value;
}, 200);onMounted(() => {nextTick(init);
});
</script><style lang="scss" scoped>
.tab-list {height: 100%;width: 120px;
}
.scroll-content {width: 100%;height: 100%;overflow-y: auto;
}
</style>

这篇关于vue3组件 描点定位以及监听滚动切换对应activeTab的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/940902

相关文章

Java实现将HTML文件与字符串转换为图片

《Java实现将HTML文件与字符串转换为图片》在Java开发中,我们经常会遇到将HTML内容转换为图片的需求,本文小编就来和大家详细讲讲如何使用FreeSpire.DocforJava库来实现这一功... 目录前言核心实现:html 转图片完整代码场景 1:转换本地 HTML 文件为图片场景 2:转换 H

C#使用Spire.Doc for .NET实现HTML转Word的高效方案

《C#使用Spire.Docfor.NET实现HTML转Word的高效方案》在Web开发中,HTML内容的生成与处理是高频需求,然而,当用户需要将HTML页面或动态生成的HTML字符串转换为Wor... 目录引言一、html转Word的典型场景与挑战二、用 Spire.Doc 实现 HTML 转 Word1

Vue3绑定props默认值问题

《Vue3绑定props默认值问题》使用Vue3的defineProps配合TypeScript的interface定义props类型,并通过withDefaults设置默认值,使组件能安全访问传入的... 目录前言步骤步骤1:使用 defineProps 定义 Props步骤2:设置默认值总结前言使用T

java实现多数据源切换方式

《java实现多数据源切换方式》本文介绍实现多数据源切换的四步方法:导入依赖、配置文件、启动类注解、使用@DS标记mapper和服务层,通过注解实现数据源动态切换,适用于实际开发中的多数据源场景... 目录一、导入依赖二、配置文件三、在启动类上配置四、在需要切换数据源的类上、方法上使用@DS注解结论一、导入

Linux升级或者切换python版本实现方式

《Linux升级或者切换python版本实现方式》本文介绍在Ubuntu/Debian系统升级Python至3.11或更高版本的方法,通过查看版本列表并选择新版本进行全局修改,需注意自动与手动模式的选... 目录升级系统python版本 (适用于全局修改)对于Ubuntu/Debian系统安装后,验证Pyt

基于Python Playwright进行前端性能测试的脚本实现

《基于PythonPlaywright进行前端性能测试的脚本实现》在当今Web应用开发中,性能优化是提升用户体验的关键因素之一,本文将介绍如何使用Playwright构建一个自动化性能测试工具,希望... 目录引言工具概述整体架构核心实现解析1. 浏览器初始化2. 性能数据收集3. 资源分析4. 关键性能指

Go语言使用select监听多个channel的示例详解

《Go语言使用select监听多个channel的示例详解》本文将聚焦Go并发中的一个强力工具,select,这篇文章将通过实际案例学习如何优雅地监听多个Channel,实现多任务处理、超时控制和非阻... 目录一、前言:为什么要使用select二、实战目标三、案例代码:监听两个任务结果和超时四、运行示例五

C#监听txt文档获取新数据方式

《C#监听txt文档获取新数据方式》文章介绍通过监听txt文件获取最新数据,并实现开机自启动、禁用窗口关闭按钮、阻止Ctrl+C中断及防止程序退出等功能,代码整合于主函数中,供参考学习... 目录前言一、监听txt文档增加数据二、其他功能1. 设置开机自启动2. 禁止控制台窗口关闭按钮3. 阻止Ctrl +

Olingo分析和实践之OData框架核心组件初始化(关键步骤)

《Olingo分析和实践之OData框架核心组件初始化(关键步骤)》ODataSpringBootService通过初始化OData实例和服务元数据,构建框架核心能力与数据模型结构,实现序列化、URI... 目录概述第一步:OData实例创建1.1 OData.newInstance() 详细分析1.1.1

从入门到精通详解LangChain加载HTML内容的全攻略

《从入门到精通详解LangChain加载HTML内容的全攻略》这篇文章主要为大家详细介绍了如何用LangChain优雅地处理HTML内容,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录引言:当大语言模型遇见html一、HTML加载器为什么需要专门的HTML加载器核心加载器对比表二