Bootstrap 5 Navbar 激活状态动态添加教程

bootstrap 5 navbar 激活状态动态添加教程

本文档旨在指导开发者如何在 Bootstrap 5 导航栏中动态添加 “active” 类,以实现当前选中页面的高亮显示。我们将探讨使用 JavaScript (包括 jQuery) 来监听导航链接的点击事件,以及如何在页面加载时根据 URL 自动设置激活状态。同时,提供示例代码和注意事项,帮助你轻松实现导航栏的动态激活效果。

动态添加 “active” 类

在 Bootstrap 5 中,通过给导航链接添加 active 类,可以使其在视觉上突出显示,表明当前页面所对应的导航项。本节将介绍几种动态添加 active 类的方法。

方法一:使用 jQuery 监听点击事件

以下代码演示了如何使用 jQuery 监听导航链接的点击事件,并在点击时移除其他链接的 active 类,然后将 active 类添加到当前点击的链接。

$('.navbar-nav .nav-item a').click(function(e) {    $('.navbar-nav .nav-item a').removeClass('active');    var $this = $(this);    if (!$this.hasClass('active')) {        $this.addClass('active');    }    // e.preventDefault();});

代码解释:

$(‘.navbar-nav .nav-item a’): 选择器选取所有导航栏中的链接。.click(function(e) { … }): 为每个链接绑定点击事件处理函数。$(‘.navbar-nav .nav-item a’).removeClass(‘active’): 在点击事件发生时,首先移除所有导航链接的 active 类。var $this = $(this): 将当前点击的链接保存到变量 $this 中。if (!$this.hasClass(‘active’)) { $this.addClass(‘active’); }: 检查当前链接是否已经有 active 类,如果没有,则添加。// e.preventDefault();: 注释掉的 e.preventDefault() 用于阻止链接的默认跳转行为。如果你的应用不是单页应用 (SPA),则应该注释掉这一行,允许链接跳转到目标页面。

注意事项:

确保你的 HTML 结构与选择器 .navbar-nav .nav-item a 相匹配。如果你的应用是单页应用 (SPA),你需要使用 e.preventDefault() 阻止链接的默认跳转行为,并通过 JavaScript 来处理页面切换。

方法二:使用纯 JavaScript

以下代码演示了如何使用纯 JavaScript 实现类似的功能。

var btns = document.querySelectorAll("#navigation .navbar-nav .nav-link");for (var i = 0; i < btns.length; i++) {    btns[i].addEventListener("click", function () {        var current = document.getElementsByClassName("active");        current[0].className = current[0].className.replace(" active", "");        this.className += " active";    });}

代码解释:

document.querySelectorAll(“#navigation .navbar-nav .nav-link”): 选择所有导航栏的链接遍历每个链接,并添加点击事件监听器点击事件触发时,获取当前激活的元素,并移除 active 类为当前点击的元素添加 active 类

方法三:页面加载时根据 URL 设置激活状态 (非单页应用)

对于非单页应用,每次页面加载时,都需要根据当前 URL 自动设置导航栏的激活状态。以下是一种实现方式:

$(document).ready(function() {    var currentUrl = window.location.href;    $('.navbar-nav .nav-item a').each(function() {        var linkUrl = $(this).attr('href');        if (currentUrl.indexOf(linkUrl) > -1) {            $('.navbar-nav .nav-item a').removeClass('active');            $(this).addClass('active');        }    });});

代码解释:

$(document).ready(function() { … }): 确保在 DOM 加载完成后执行代码。var currentUrl = window.location.href: 获取当前页面的 URL。$(‘.navbar-nav .nav-item a’).each(function() { … }): 遍历所有导航链接。var linkUrl = $(this).attr(‘href’): 获取当前链接的 href 属性值。if (currentUrl.indexOf(linkUrl) > -1) { … }: 检查当前 URL 是否包含链接的 href 值。如果包含,则认为当前链接对应于当前页面。$(‘.navbar-nav .nav-item a’).removeClass(‘active’): 移除所有导航链接的 active 类。$(this).addClass(‘active’): 将 active 类添加到当前链接。

注意事项:

indexOf 方法用于判断一个字符串是否包含另一个字符串。如果 currentUrl 包含 linkUrl,则 indexOf 方法返回 linkUrl 在 currentUrl 中首次出现的位置,否则返回 -1。这种方法假设链接的 href 属性值是 URL 的一部分。你需要根据你的实际应用场景调整判断逻辑。

方法四:监听滚动事件并动态添加active类

$(window).scroll(function () {    var distance = $(window).scrollTop();    $('.page-section').each(function (i) {        if ($(this).position().top            <= distance + 250) {                $('.navbar-nav a.active')                    .removeClass('active');                $('.navbar-nav a').eq(i)                    .addClass('active');        }    });}).scroll();

代码解释:

监听窗口的滚动事件获取滚动条距离顶部的距离遍历每个 .page-section 元素,并判断元素距离顶部的位置是否小于滚动条距离 + 250如果小于,则移除所有导航栏链接的 active 类,并为当前遍历到的 .page-section 元素对应的导航栏链接添加 active 类

总结

本文档介绍了多种在 Bootstrap 5 导航栏中动态添加 active 类的方法,包括使用 jQuery 监听点击事件、使用纯 JavaScript 实现类似功能,以及在页面加载时根据 URL 自动设置激活状态。你可以根据你的实际应用场景选择最适合的方法。 记住根据你的 HTML 结构调整选择器,并根据你的应用类型(单页应用或非单页应用)选择是否阻止链接的默认跳转行为。

以上就是Bootstrap 5 Navbar 激活状态动态添加教程的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1321168.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
php图片怎么裁剪_php实现图片裁剪的几种方法
上一篇 2025年12月12日 07:28:15
PHP如何处理HTTP请求_HTTP请求处理方法详解
下一篇 2025年12月12日 07:28:30

相关推荐

  • Java语法基础中main方法为什么必须是public static void

    Main方法必须声明为public static void以确保JVM能无访问限制地通过类名直接调用,且不依赖对象实例或返回值,符合JVM规范对程序入口的强制要求。 Main方法是Java程序的入口点,它的标准声明形式为:public static void main(String[] args)。…

    2026年9月23日
    100
  • Java语法基础中变量声明和赋值有什么区别

    变量声明定义类型和名称,赋值赋予具体数据,二者可合并为初始化。声明如int age;,赋值如age=25;,局部变量使用前必须赋值,否则编译错误。 在Java语法中,变量的声明和赋值是两个不同的操作,虽然它们经常一起出现,但各自有不同的作用。 变量声明:定义变量的存在 变量声明是指告诉编译器你将要使…

    2026年9月23日
    500
  • win11开机PIN码登录选项消失了怎么办_win11PIN码登录选项丢失修复方法

    首先尝试切换登录方式重置PIN,若无效则通过命令提示符启用管理员账户,再检查本地组策略设置并清除NGC文件夹以重建PIN凭据,最终恢复PIN登录功能。 如果您尝试在Windows 11开机时使用PIN码登录,却发现登录选项中缺少PIN码入口,这通常是由系统临时故障、策略设置或账户同步问题导致的。此问…

    2026年9月23日
    000
  • Java SimpleDateFormat如何格式化日期

    SimpleDateFormat是java.text包中用于格式化和解析日期的类,继承自DateFormat,通过模式字符串定义日期格式,如yyyy表示四位年份、MM表示两位月份、dd表示日期、HH表示24小时制小时、mm表示分钟、ss表示秒、SSS表示毫秒、EEEE表示星期几全称、MMM表示月份缩…

    2026年9月23日
    000
  • windows8无法弹出usb设备怎么办_windows8安全移除U盘失败解决方法

    先重启Windows资源管理器,再依次排查占用进程、使用文件资源管理器弹出、确保Plug and Play服务运行、禁用USB选择性暂停、修复注册表通知项,可解决U盘无法安全移除问题。 如果您尝试从Windows 8电脑上安全移除U盘或其他USB设备,但系统提示设备正在使用中或没有任何反应,则可能是…

    2026年9月23日
    200
  • Vue.js 项目中实现练习进度保存的策略与实践

    本文将探讨在vue.js项目中实现用户练习进度保存的最佳实践。针对需要跨会话保留用户进度的场景,我们将重点介绍如何利用浏览器localstorage进行数据持久化,包括数据的序列化与反序列化、在关键生命周期钩子中加载与保存数据,以及相关的注意事项,确保用户能够从上次中断的地方继续练习。 在开发基于V…

    2026年9月23日
    100
  • win10屏幕一直闪烁怎么办_win10屏幕闪烁问题修复方法

    1、屏幕闪烁主因显卡驱动异常或连接不稳定,可先用Win+Ctrl+Shift+B重置驱动;2、更新或回滚显卡驱动解决兼容性问题;3、切换电源计划至高性能避免节能模式干扰;4、修改注册表Timeout值为0防止误判故障;5、检查并清洁或更换视频线确保信号稳定。 如果您在使用Windows 10时遇到屏…

    2026年9月23日
    100
  • 如何使用Java制作简易的博客系统

    首先搭建Spring Boot后端,设计BlogPost实体类并用JPA实现数据持久化,通过BlogController处理页面请求,使用Thymeleaf模板引擎渲染index和create页面,配置H2内存数据库并启用控制台,最终实现文章的发布与展示功能。 用Java制作一个简易的博客系统,核心…

    2026年9月23日
    200
  • qq浏览器主页被篡改了如何修复_qq浏览器主页被篡改修复方法

    首先检查QQ浏览器设置中的主页地址并修正,接着查看桌面快捷方式目标路径是否被添加恶意网址并清理,然后使用腾讯电脑管家等工具扫描修复,最后可尝试重置浏览器或通过注册表编辑器锁定主页,防止再次被篡改。 QQ浏览器主页被篡改,通常是由恶意软件、插件或安全软件锁定导致的。修复的关键是检查多个可能被修改的位置…

    2026年9月23日
    100
  • Java中ConnectException连接异常的解决方法

    答案:Java中ConnectException通常因服务未启动、网络不通或配置错误导致,需检查服务状态、IP端口配置及防火墙设置,并合理设置连接超时与重试机制。 Java中出现ConnectException通常表示应用程序尝试连接到远程服务器时失败,最常见的原因是目标主机拒绝连接或网络不通。这个…

    2026年9月23日
    200
  • windows8系统怎么关闭屏幕键盘_windows8关闭虚拟键盘的设置

    1、通过任务栏图标关闭:在系统托盘找到键盘图标并点击关闭;2、控制面板禁用启动项:进入轻松访问设置,取消勾选“使用屏幕键盘”;3、任务管理器结束进程:强制结束osk.exe进程;4、删除启动文件夹中的快捷方式,防止开机自启。 如果您在使用Windows 8系统时发现屏幕键盘自动弹出或需要手动关闭,可…

    2026年9月23日
    100
  • FreeBSD 15.0 Beta 1 发布,优化系统性能和用户体验

    FreeBSD 15.0 Beta 1 现已推出,本次版本带来了多项重要更新,显著提升了系统运行效率、硬件适配能力以及整体使用体验。 主要更新内容 OpenZFS 升级至 2.4.0-rc2:带来更稳定的文件系统表现与性能提升,同时引入更先进的存储管理功能。 TCP LRO 性能优化:修复了特定网络…

    2026年9月23日
    100
  • Java Optional与集合结合使用方法

    Optional与集合结合可避免空指针异常。1. 用Optional.ofNullable包装可能为null的集合元素;2. Stream中filter后接findFirst返回Optional,安全查找;3. 对象属性为Optional时,通过flatMap展开提取值;4. 方法返回Optiona…

    2026年9月23日
    200
  • win11任务栏图标合并了怎么取消_win11任务栏图标合并设置方法

    首先通过系统设置将“合并任务栏按钮”设为从不,若无效则用注册表编辑器新建TaskbarGlomLevel并赋值2,或使用StartAllBack等工具自定义,同时排查第三方软件干扰。 如果您发现Win11任务栏上的程序图标被自动合并,导致无法清晰查看每个应用的独立窗口,可以通过系统设置或高级方法进行…

    2026年9月22日
    200
  • Java ListIterator如何实现双向遍历

    Java中的ListIterator接口支持双向遍历,即可以从前往后,也可以从后往前遍历列表。这与普通的Iterator只能单向向后遍历不同。ListIterator提供了更灵活的操作方式,特别适用于需要反向访问或在遍历过程中修改列表的场景。 1. ListIterator的基本特性 ListIte…

    2026年9月22日
    200
  • 解决TCPDF保存文件权限问题的完整指南

    本文旨在解决使用tcpdf在%ignore_a_1%中生成pdf并保存到服务器(’f’模式)时遇到的“permission denied”错误,尤其是在macos环境下。核心问题通常源于不正确的服务器文件路径或目标文件夹缺乏写入权限。教程将详细阐述如何构建正确的绝对文件路径,…

    2026年9月22日
    300
  • Java集合框架在实际项目中的最佳实践

    合理选择集合类型并预设容量,使用不可变集合保护数据,避免遍历中修改结构,可提升Java程序性能与安全性。 Java集合框架是开发中使用最频繁的工具之一,合理使用能显著提升代码的可读性、性能和稳定性。在实际项目中,遵循一些最佳实践可以避免常见陷阱,提高程序健壮性。 选择合适的集合类型 不同场景应选用最…

    2026年9月22日
    100
  • win10系统图标(如此电脑)太大怎么办_win10系统图标大小调整方法

    首先通过快捷键Ctrl加鼠标滚轮可快速调整桌面图标大小,其次在显示设置中修改缩放比例能全局调整界面元素,最后若因间距异常导致图标过大,可通过注册表将IconSpacing和IconVerticalSpacing值改为-1125后重启生效。 如果您发现Windows 10系统中的图标(如“此电脑”)显…

    2026年9月22日
    100
  • Java TreeMap如何自定义排序规则

    TreeMap默认按键的自然顺序排序,可通过构造函数传入Comparator自定义排序规则。例如字符串可按长度排序:TreeMap map = new TreeMap((s1, s2) -> s1.length() – s2.length()); 对自定义对象如Person可按年龄…

    2026年9月22日
    100
  • windows怎么开启或关闭休眠模式_休眠模式启用与禁用设置

    首先通过控制面板或命令提示符启用或禁用休眠功能,其次可设置自动休眠时间以节能;操作路径包括图形界面调整与管理员命令执行,适用于Windows 11系统环境。 如果您发现Windows系统的休眠功能未启用或希望禁用该功能以释放磁盘空间,可以通过系统电源设置或命令行工具进行配置。休眠模式会将当前系统状态…

    2026年9月22日
    100

发表回复

登录后才能评论
关注微信