当前位置: 首页 > news >正文

Vue3吸顶导航的实现

吸顶导航实现

【实现目标】:

在Layout页面中,浏览器上下滚动时,距离顶部距离大于80px吸顶导航显示,小于则隐藏。

【实现过程】:

  • 通过layout接口获取分类列表内容并使用categorystore进行状态管理,获取到内容进行页面渲染。

  • 在外层包裹stick,内层放置RouterLink渲染导航跳转,使用v-on的类名增强控制 stick的show属性

  • 安装VueUse,参考官方手册:VueUse,导入useScroll函数,此处只用获取窗口的y坐标,来控制show属性是否生效

  • 更改stick的样式,状态一:向上平移+完全透明;状态二:show属性生效时,移除平移+完全不透明

  • 此处增加了一个插值表达式 {{y}}来监视目前y坐标值

在这里插入图片描述

<script setup>
// 获取滚动距离
import { useScroll } from '@vueuse/core'
const { y } = useScroll(window)import { useCategoryStore } from '@/stores/categoryStore'
const categoryStore = useCategoryStore()
</script><template><div class="app-header-sticky" :class="{ show: y > 80 }"><div class="container"><RouterLink class="logo" to="/" />{{ y }}<!-- 导航区域 --><ul class="app-header-nav"><li class="home"><RouterLink to="/">首页</RouterLink></li><li class="home" v-for="item in categoryStore.categoryList" :key="item.id"><RouterLink active-class="active" :to="`/category/${item.id}`">{{item.name}}</RouterLink></li></ul></div></div>
</template><style scoped lang="scss">
.app-header-sticky {width: 100%;height: 80px;position: fixed;left: 0;top: 0;z-index: 999;background-color: #fff;border-bottom: 1px solid #e4e4e4;// 关键样式// 状态一:往上平移自身高度 + 完全透明transform: translateY(-100%);opacity: 0;// 状态二:移除平移 + 完全不透明&.show {transition: all 0.3s linear;transform: none;opacity: 1;}.container {display: flex;align-items: center;}.logo {width: 200px;height: 80px;background: url('@/assets/images/logo.png') no-repeat right 2px;background-size: 160px auto;}
}.app-header-nav {width: 820px;display: flex;padding-left: 40px;position: relative;z-index: 998;li {margin-right: 40px;width: 38px;text-align: center;a {font-size: 16px;line-height: 32px;height: 32px;display: inline-block;&:hover {color: pink;border-bottom: 1px solid pink;}}.active {color: pink;border-bottom: 1px solid $Color;}}
}
</style>

相关文章:

  • Nginx配置与应用案例详解
  • 每周靶点:STEAP1、NPR1及文献分享
  • 快速定位到源码位置的插件 - vite/webpack
  • 量子算法:开启计算新时代的技术密码
  • Java基础之静态代理和动态代理
  • Excel中批量对多个结构相同的工作表执行操作,可以使用VBA宏来实现
  • HCIP(BFD)
  • 音频生成技术的前沿探索:从语音合成到智能Podcast
  • C# winform 日志 NLog
  • LeetCode 热题 100 230. 二叉搜索树中第 K 小的元素
  • Apollo学习——键盘控制速度
  • 白盒测试——基本路径测试法
  • 【网络协议】TCP、HTTP、MQTT 和 WebSocket 对比
  • uni-app vue3版本打包h5后 页面跳转报错(uni[e] is not a function)
  • Lighthouse 自定义审计
  • SpringAI更新:废弃tools方法、正式支持DeepSeek!
  • Linux `whoami` 命令深度解析与高阶应用指南
  • “强强联手,智启未来”凯创未来与绿算技术共筑高端智能家居及智能照明领域新生态
  • 《Python星球日记》 第72天:问答系统与信息检索
  • 一文介绍电路交换、报文交换和分组交换
  • 普京确定俄乌谈判俄方代表团名单
  • 张涌任西安市委常委,已卸任西安市副市长职务
  • 3年多来俄乌要首次直接对话?能谈得拢吗?
  • 菲律宾中期选举初步结果出炉,杜特尔特家族多人赢得地方选举
  • 白玉兰奖征片综述丨动画的IP生命力
  • 国台办:台湾自古属于中国,历史经纬清晰,法理事实清楚