You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在滚动时实现Bootstrap导航栏的动画收缩效果?

解决Bootstrap导航栏滚动收缩(含Logo)的问题

现有代码

<form id="form1" runat="server">
        
            <div>
                <nav class="navbar navbar-expand-lg navbar-dark shadow-5-strong fixed-top" id="navbar_top" style="background-color:rgba(0, 0, 0, 0.80); backdrop-filter:blur(25px);">
                    <a class="navbar-brand" href="#"> <img src="imgs/vmc_logo.png" height="50" /></a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>

                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul class="navbar-nav mr-auto">
                            <li class="nav-item active">
                                <a class="nav-link" href="homepage.aspx">Home</a>
                            </li>
                        </ul>
                    </div>
                </nav>
            </div>

问题描述

我的Bootstrap导航栏无法实现滚动收缩效果,由于导航栏中包含Logo,使用sticky-top类表现不佳。目前仅找到基于sticky-top和jQuery的解决方案,未能满足需求。


解决方案(原生JS+CSS实现,无jQuery依赖)

步骤1:调整HTML结构,添加过渡基础样式

给导航栏加上过渡属性,同时给Logo添加专属类名方便控制:

<form id="form1" runat="server">
        
            <div>
                <nav class="navbar navbar-expand-lg navbar-dark shadow-5-strong fixed-top" id="navbar_top" style="background-color:rgba(0, 0, 0, 0.80); backdrop-filter:blur(25px); transition: all 0.3s ease;">
                    <a class="navbar-brand" href="#"> <img src="imgs/vmc_logo.png" height="50" class="navbar-logo" /></a>
                    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
                        <span class="navbar-toggler-icon"></span>
                    </button>

                    <div class="collapse navbar-collapse" id="navbarSupportedContent">
                        <ul class="navbar-nav mr-auto">
                            <li class="nav-item active">
                                <a class="nav-link" href="homepage.aspx">Home</a>
                            </li>
                        </ul>
                    </div>
                </nav>
            </div>

步骤2:定义收缩状态的CSS样式

/* 导航栏收缩后的整体样式 */
.navbar-shrink {
    background-color: rgba(0, 0, 0, 0.95) !important;
    padding-top: 0.5rem !important;
    padding-bottom: 0.5rem !important;
}

/* Logo收缩后的尺寸调整 */
.navbar-shrink .navbar-logo {
    height: 35px !important;
    transition: height 0.3s ease;
}

步骤3:添加滚动监听的原生JS代码

const navbar = document.getElementById('navbar_top');

window.addEventListener('scroll', function() {
    // 滚动超过50px时触发收缩,可根据需求调整阈值
    if (window.scrollY > 50) {
        navbar.classList.add('navbar-shrink');
    } else {
        navbar.classList.remove('navbar-shrink');
    }
});

方案说明

  • 用原生JS替代jQuery,避免额外依赖
  • 通过CSS过渡实现平滑动画,覆盖导航栏背景、内边距和Logo尺寸的变化
  • 滚动触发阈值(50px)可根据页面布局自由修改

内容的提问来源于stack exchange,提问作者Dhruv Varia

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 21:11:29