vue3页面点击按钮滚动条置顶、tabs滚动监听亮显、点击锚点跳转整合

news/2024/10/16 23:23:49/
1、点击按钮滚动到页面头部

hooks文件夹>useBackTop.js

import { ref } from 'vue';export default function useBackTop() {const scrollTop = ref(0);const backTopFlag = ref(false);const scrollToTop = () => {scrollTop.value = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop;// 为了计算距离顶部的高度,当高度大于60显示回顶部图标,小于60则隐藏backTopFlag.value = scrollTop.value > 60;};const goBackTop = () => {window.scrollTo({top: 0,behavior: 'smooth',});};window.addEventListener('scroll', scrollToTop);return {scrollToTop,backTopFlag,goBackTop,};
}

页面中使用

<template><div v-if="backTopFlag" class="return-top" @click="goBackTop"></div>
</template>
<script setup>
import useBackTop from '@/hooks/useBackTop';
const {backTopFlag,goBackTop,
} = useBackTop();
</script>
2、tabs滚动监听亮显、点击锚点跳转

安装瞄点定位插件依赖

npm i smooth-scroll-into-view-if-needed

hooks文件夹>useBackTop.js

import { ref, onBeforeUnmount } from 'vue';
import scrollIntoView from 'smooth-scroll-into-view-if-needed';export default function useScroll(navList) {const navCurrent = ref(navList[0]?.value);navCurrent.value = navList[0]?.value;const isFixed = ref(false);const scrollNav = (sections) => {const scrollTop = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop; // 滚动条偏移量// 导航吸顶const weTabs = document.querySelector('.wd-tabs').offsetTop;isFixed.value = scrollTop >= weTabs;sections.forEach((item, index) => {if (item.offsetTop - 100 <= scrollTop) {navCurrent.value = navList[index].value;}});};const navigate = (tab) => {navCurrent.value = tab;const node = document.querySelector(`.${tab}`);scrollIntoView(node, {scrollMode: 'if-needed',block: 'start',inline: 'nearest',});};document.onscroll = () => {scrollNav(document.querySelectorAll('.scroll-item'));};onBeforeUnmount(() => {document.onscroll = '';});return {isFixed,navCurrent,navigate,scrollNav,};
}

页面中使用

<template><div class="page"><div class="wd-tabs"><div class="wd-tabs-content" :class="{ fixed: isFixed }"><div class="main-content wd-advice"><div v-for="(item,index) in navList" :key="index" class="tabs-item" :class="{ active: navCurrent === item.value } " @click="navigate(item.value)"><div class="name">{{item.title}}</div></div></div></div></div><div class="scroll-item" v-for="(item, index) in navList":key="index" :class="item.value">{{item.title}}</div></div>
</template>
<script setup>
import { ref, computed, onBeforeMount } from 'vue';
import { useRoute } from 'vue-router';
import useScroll from '@/hooks/useScroll';const route = useRoute();
const id = computed(() => route.params.id);const navList = ref([{ title: '产品优势', value: 'advantages' },{ title: '产品功能', value: 'features' },{ title: '产品架构', value: 'architecture' },{ title: '应用场景', value: 'scenario' },{ title: '业务案例', value: 'business' },{ title: '产品动态', value: 'dynamics' },
]);
const {isFixed,navCurrent,navigate,
} = useScroll(navList.value);onBeforeMount(async () => {});
</script>


http://www.ppmy.cn/news/998323.html

相关文章

Microsoft LinkedIn产品线梳理

目录 前言 1. LinkedIn 2. LinkedIn Learning 3. LinkedIn Sales Navigator 4. LinkedIn Talent Solutions 5. LinkedIn Marketing Solutions

04 Ubuntu中的中文输入法的安装

在Ubuntu22.04这种版本相对较高的系统中安装中文输入法&#xff0c;一般推荐使用fctix5&#xff0c;相比于其他的输入法&#xff0c;这款输入法的推荐词要好得多&#xff0c;而且不会像ibus一样莫名其妙地失灵。 首先感谢文章《滑动验证页面》&#xff0c;我是根据这篇文章的教…

SpringBoot+Freemark根据html模板动态导出PDF

SpringBootFreemark根据html模板导出PDF 1、引入maven2、两个工具类2.1 test.html模板2.2 test.html模板中的Freemark语法 3、controller导出pdf 1、引入maven 导出pdf的一些必要jar包 <dependency><groupId>org.projectlombok</groupId><artifactId>…

Python入门指南:从零开始学习Python编程

文章目录 前言安装Python变量以及数据类型总结 前言 Python是一种简单而又强大的编程语言&#xff0c;它在全球范围内广受欢迎&#xff0c;适用于各种应用场景&#xff0c;包括Web开发、数据分析、人工智能和科学计算等。本篇博客将为初学者提供一份Python入门指南&#xff0c;…

C++设计模式之建造者设计模式

C建造者设计模式 什么是建造者设计模式 建造者设计模式是一种创建型设计模式&#xff0c;它是一种将复杂对象的分解为多个独立部分的模式&#xff0c;以便于构建对象的过程可以被抽象出来并独立变化。 该模式有什么优缺点 优点 灵活性&#xff1a;建造者设计模式允许对象的…

R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析

在自然和社会科学领域有大量与地理或空间有关的数据&#xff0c;这一类数据一般具有严重的空间异质性&#xff0c;而通常的统计学方法并不能处理空间异质性&#xff0c;因而对此类型的数据无能为力。以地理加权回归为基础的一系列方法&#xff1a;经典地理加权回归&#xff0c;…

对 Redis 实现分布式事务的探索与实现

对 Redis 实现分布式事务的探索与实现 一、简介简介优势 二、Redis 的事务机制事务WATCH 命令MULTI 命令EXEC 命令UNWATCH 命令 三、Redis 的分布式事务集群架构分布式事务分布式事务实现方式1. 两阶段提交&#xff08;2PC&#xff09;方式Paxos 算法实现方式Raft 算法实现方式…

利用MMPreTrain微调图像分类模型

前言 MMPreTrain是一款基于PyTorch的开源深度学习预工具箱&#xff0c;是OpenMMLab项目的成员之一MMPreTrain的主要特性有&#xff1a; 支持多元化的主干网络与预训练模型支持多种训练策略&#xff08;有监督学习&#xff0c;无监督学习&#xff0c;多模态学习等&#xff09;提…