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

Bootstrap中自适应导航栏Logo滚动切换响应式适配问题求解

解决思路

当前Logo切换逻辑仅判断页面滚动距离,未适配响应式断点下的导航栏背景规则:视口宽度≤992px时导航栏默认背景为白色,无需等待滚动就应该显示黑色Logo。

修改方案

方案1:调整原有JS逻辑(适配现有代码习惯)

在Logo切换逻辑中新增视口宽度判断,同时增加窗口大小变化监听,适配用户手动调整浏览器宽度的场景,修改后完整JS代码如下:

(function($) {
  "use strict";

  // Collapse Navbar 
  var navbarCollapse = function() {
    // 判断是否为桌面端(宽度>992px)
    const isDesktop = $(window).width() > 992;
    // 移动端直接显示黑色Logo
    if (!isDesktop) {
      $("#mainNav").addClass("navbar-shrink");
      $(".logo").attr("src", "https://www.orticaweb.it/wp-content/uploads/2019/09/Twitter-00-Logo-Nero.png");
      return;
    }
    // 桌面端保留原有滚动判断逻辑
    if ($("#mainNav").offset().top > 100) {
      $("#mainNav").addClass("navbar-shrink")
      $(".logo").attr("src", "https://www.orticaweb.it/wp-content/uploads/2019/09/Twitter-00-Logo-Nero.png");
    } else {
      $("#mainNav").removeClass("navbar-shrink")
      $(".logo").attr("src", "https://loghi-famosi.com/wp-content/uploads/2020/04/Twitter-Logo-650x366.png");
    }
  };
  // 页面加载时立即执行适配
  navbarCollapse();
  // 监听页面滚动触发适配
  $(window).scroll(navbarCollapse);
  // 监听窗口大小变化触发适配
  $(window).resize(navbarCollapse);

  // Smooth scrolling using jQuery easing 
  $('a.js-scroll-trigger[href*="#"]:not([href="#"])').click(function() {
    if (
      location.pathname.replace(/^\//, "") ==
      this.pathname.replace(/^\//, "") &&
      location.hostname == this.hostname
    ) {
      var target = $(this.hash);
      target = target.length ?
        target :
        $("[name=" + this.hash.slice(1) + "]");
      if (target.length) {
        $("html, body").animate({
            scrollTop: target.offset().top - 70,
          },
          1000,
          "easeInOutExpo"
        );
        return false;
      }
    }
  });

})(jQuery);

可以额外为resize事件添加防抖逻辑,避免频繁调整窗口大小时触发多次执行,提升性能。


方案2:纯CSS实现(更稳定,无Logo加载闪烁)

无需修改JS逻辑,通过媒体查询控制两个Logo的显隐,适配所有场景:

  1. 修改HTML的Logo部分代码
<a class="navbar-brand js-scroll-trigger" href="#home">
  <img class="img-fluid logo logo-mobile" src="https://www.orticaweb.it/wp-content/uploads/2019/09/Twitter-00-Logo-Nero.png" width="50px">
  <img class="img-fluid logo logo-desktop" src="https://loghi-famosi.com/wp-content/uploads/2020/04/Twitter-Logo-650x366.png" width="50px">
  Logo Agency
</a>
  1. 新增对应CSS规则
/* 移动端默认显示黑色Logo */
.logo-desktop {
  display: none;
}
@media (min-width: 992px) {
  /* 桌面端默认显示白色Logo */
  .logo-desktop {
    display: inline-block;
  }
  .logo-mobile {
    display: none;
  }
  /* 桌面端导航栏收缩时切换为黑色Logo */
  #mainNav.navbar-shrink .logo-desktop {
    display: none;
  }
  #mainNav.navbar-shrink .logo-mobile {
    display: inline-block;
  }
}

使用该方案后可以删除原有JS中修改Logosrc属性的代码,仅保留导航栏navbar-shrink类的切换逻辑即可。


内容的提问来源于stack exchange,提问作者Elia d'Albenzio

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 08:36:03