Vue.js组件开发-实现左侧浮动菜单跟随页面滚动

embedded/2025/2/4 15:30:04/

使用 Vue 实现左侧浮动菜单跟随页面滚动

实现步骤

  1. 创建 Vue 项目:使用 Vue CLI 创建一个新的 Vue 项目。
  2. 设计 HTML 结构:包含一个左侧浮动菜单和一个主要内容区域。
  3. 编写 CSS 样式:设置菜单的初始样式和滚动时的样式。
  4. 使用 Vue 的生命周期钩子和事件监听:监听页面滚动事件,根据滚动位置动态改变菜单的样式。

详细代码

<template><!-- 整个页面的容器 --><div id="app"><!-- 左侧浮动菜单 --><div class="sidebar" :class="{ 'fixed': isFixed }"><ul><!-- 菜单项 --><li><a href="#">Home</a></li><li><a href="#">About</a></li><li><a href="#">Services</a></li><li><a href="#">Contact</a></li></ul></div><!-- 主要内容区域 --><div class="content"><!-- 模拟大量内容 --><p v-for="i in 50" :key="i">This is some sample text. This is some sample text. This is some sample text.</p></div></div>
</template><script>
export default {data() {return {// 用于标记菜单是否固定的状态isFixed: false,// 菜单开始固定的滚动阈值scrollThreshold: 0};},mounted() {// 获取侧边栏元素const sidebar = this.$el.querySelector('.sidebar');// 计算侧边栏距离页面顶部的距离,作为滚动阈值this.scrollThreshold = sidebar.offsetTop;// 监听页面滚动事件window.addEventListener('scroll', this.handleScroll);},beforeDestroy() {// 在组件销毁前移除滚动事件监听,防止内存泄漏window.removeEventListener('scroll', this.handleScroll);},methods: {handleScroll() {// 获取当前页面的滚动位置const scrollTop = window.pageYOffset || document.documentElement.scrollTop;// 如果滚动位置超过阈值,将 isFixed 设为 true,否则设为 falsethis.isFixed = scrollTop >= this.scrollThreshold;}}
};
</script><style scoped>
/* 整个页面的样式 */
#app {display: flex;margin: 0;padding: 0;
}/* 左侧浮动菜单的初始样式 */
.sidebar {width: 200px;background-color: #f4f4f4;padding: 20px;position: relative;
}/* 菜单固定时的样式 */
.sidebar.fixed {position: fixed;top: 0;
}/* 主要内容区域的样式 */
.content {flex: 1;padding: 20px;
}/* 菜单项的样式 */
.sidebar ul {list-style-type: none;padding: 0;
}.sidebar li {margin-bottom: 10px;
}.sidebar a {text-decoration: none;color: #333;
}
</style>

代码注释说明

  1. HTML 部分

    • <div class="sidebar" :class="{ 'fixed': isFixed }">:侧边栏菜单,根据 isFixed 状态动态添加 fixed 类。
    • <div class="content">:主要内容区域,包含大量模拟文本。
  2. JavaScript 部分

    • data:定义 isFixed 用于标记菜单是否固定,scrollThreshold 用于存储菜单开始固定的滚动阈值。
    • mounted:在组件挂载后,计算侧边栏距离页面顶部的距离作为滚动阈值,并监听页面滚动事件。
    • beforeDestroy:在组件销毁前移除滚动事件监听,防止内存泄漏。
    • handleScroll:处理滚动事件,根据滚动位置更新 isFixed 状态。
  3. CSS 部分

    • .sidebar:侧边栏菜单的初始样式,使用 position: relative
    • .sidebar.fixed:菜单固定时的样式,使用 position: fixed

使用说明

  1. 创建项目:使用 Vue CLI 创建一个新的 Vue 项目。
  2. 替换代码:将上述代码复制到 src/App.vue 文件中。
  3. 运行项目:在终端中运行 npm run serve 启动开发服务器。
  4. 查看效果:打开浏览器,访问 http://localhost:8080,滚动页面,观察左侧浮动菜单的滚动效果。

http://www.ppmy.cn/embedded/159501.html

相关文章

使用大语言模型在表格化网络安全数据中进行高效异常检测

论文链接 Efficient anomaly detection in tabular cybersecurity data using large language models 论文主要内容 这篇论文介绍了一种基于大语言模型&#xff08;LLMs&#xff09;的创新方法&#xff0c;用于表格网络安全数据中的异常检测&#xff0c;称为“基于引导式提示…

Linux:宏观搭建网络体系

一、计算机网络背景 1、独立模式&#xff1a;计算机之间相互独立 可是这样的话&#xff0c;如果我们想要做协作就必然需要交互数据&#xff0c;就必须得使用U盘进行拷贝&#xff0c;效率很低&#xff0c;所以我们需要网络互联&#xff0c;将计算机连向同一台服务器&#xff0c…

初入机器学习

写在前面 本专栏专门撰写深度学习相关的内容&#xff0c;防止自己遗忘&#xff0c;也为大家提供一些个人的思考 一切仅供参考 概念辨析 深度学习&#xff1a; 本质是建模&#xff0c;将训练得到的模型作为系统的一部分使用侧重于发现样本集中隐含的规律难点是认识并了解模型&…

设计模式Python版 桥接模式

文章目录 前言一、桥接模式二、桥接模式示例三、桥接模式与适配器模式的联用 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&…

mysql_init和mysql_real_connect的形象化认识

解析总结 1. mysql_init 的作用 mysql_init 用于初始化一个 MYSQL 结构体&#xff0c;为后续数据库连接和操作做准备。该结构体存储连接配置及状态信息&#xff0c;是 MySQL C API 的核心句柄。 示例&#xff1a; MYSQL *conn mysql_init(NULL); // 初始化连接句柄2. mysql_…

openmv的端口被拆分为两个 导致电脑无法访问openmv文件系统解决办法 openmv USB功能改动 openmv驱动被更改如何修复

我之前误打误撞遇到一次&#xff0c;直接把openmv的全部端口删除卸载然后重新插上就会自动重新装上一个openmv端口修复成功&#xff0c;大家可以先试试不行再用下面的方法 全部卸载再重新插拔openmv 要解决OpenMV IDE中出现的两个端口问题&#xff0c;可以尝试以下步骤&#x…

C#/.NET/.NET Core技术前沿周刊 | 第 23 期(2025年1.20-1.26)

前言 C#/.NET/.NET Core技术前沿周刊&#xff0c;你的每周技术指南针&#xff01;记录、追踪C#/.NET/.NET Core领域、生态的每周最新、最实用、最有价值的技术文章、社区动态、优质项目和学习资源等。让你时刻站在技术前沿&#xff0c;助力技术成长与视野拓宽。 欢迎投稿、推荐…

ESP32-c3实现获取土壤湿度(ADC模拟量)

1硬件实物图 2引脚定义 3使用说明 4实例代码 // 定义土壤湿度传感器连接的模拟输入引脚 const int soilMoisturePin 2; // 假设连接到GPIO2void setup() {// 初始化串口通信Serial.begin(115200); }void loop() {// 读取土壤湿度传感器的模拟值int sensorValue analogRead…