【问题标题】:Bootstrap 5 navbar background color is not changing on scrollBootstrap 5导航栏背景颜色在滚动时不会改变
【发布时间】:2021-11-18 16:44:09
【问题描述】:

我正在构建一个使用 Bootstrap 5 的 Angular 应用程序。我创建了一个透明导航栏,我希望在滚动页面时看到背景颜色从透明变为深色。它不起作用。每次滚动页面时,它仍然使我的导航栏保持透明而不是深色。

我的导航栏代码:

<nav class="navbar fixed-top navbar-expand-lg navbar-dark p-md-3">
  <div class="container-fluid">
    <a href="#" class="navbar-brand">WorkonPro</a>
    <button
      type="button"
      class="navbar-toggler"
      data-bs-target="#navbarNav"
      data-bs-toggle="collapse"
      arial-controls="navbarNav"
      aria-expanded="false"
      aria-label="Toggle Navbar"
    >
      <span class="navbar-toggler-icon"></span>
    </button>

    <div class="collapse navbar-collapse" id="navbarNav">
      <div class="mx-auto"></div>
      <ul class="navbar-nav">
        <li class="nav-item">
          <a class="nav-link active item-space" href="#" aria-current="page"
            >Home</a
          >
        </li>
        <li class="nav-item">
          <a class="nav-link item-space" href="#">About</a>
        </li>
        <li class="nav-item">
          <a class="nav-link item-space" href="#"> Healthcare </a>
        </li>
        <li class="nav-item">
          <a class="nav-link item-space" href="#">Tech</a>
        </li>
        <li class="nav-item">
          <a
            href="#"
            class="nav-link btn btn-sm item-space grey-button"
            style="color: #fff"
            role="button"
            >Login
          </a>
        </li>
        <li class="nav-item">
          <a
            href="#"
            class="nav-link btn btn-sm item-space green-button"
            style="color: #fff"
            role="button"
            ><strong>Create account</strong>
          </a>
        </li>
      </ul>
    </div>
  </div>
</nav>

我为实现这一目标而编写的 JS 脚本。 (请注意,我写了与我的 html 页面相同的正文)

<script src="../../../../node_modules/bootstrap/dist/js/bootstrap.min.js"></script>
<script>
  var nav = document.querySelector('nav');
  window.addEventListener('scroll', function() {
    if (window.pageYOffset > 100) {
      nav.classList.add('bg-dark', 'shadow');
    } else {
      nav.classList.remove('bg-dark', 'shadow');
    }
  });
</script>

我与导航栏有关的风格如下:

.bg-dark {
  background-color: #101011 !important;
}

.navbar-dark .navbar-brand {
  padding: 20px 0 10px 10px;
  color: #fff;
}
.navbar-nav .nav-link {
  color: #101011;
}
.navbar-dark .navbar-nav .nav-link {
  color: rgba(255, 255, 255, 1);
}
.navbar-dark .navbar-brand {
   margin: 0;
   width: 50%;
   float: left;
   display: inherit;
}
.navbar-brand {
  color: #101011;
  padding: 20px 0 10px 10px;
}

body .navbar {
  padding: 6px 0 !important;
}

body .navbar-brand {
  background: none;
}

请有人告诉我我做错了什么?我错过了什么?以及我该如何解决它。

提前致谢。

【问题讨论】:

    标签: javascript html css bootstrap-4


    【解决方案1】:

    只需给你的导航栏一个 id 并输入到目前为止它对我有用的代码

    // Changing nav color
    const navbar = document.getElementById("navbar");
    window.onscroll = (e) => {
     if (window.scrollY > 100) {
     navbar.classList.replace("navbartransparent", "navbarcolored");
     } else {
     navbar.classList.replace("navbarcolored", "navbartransparent");
     }};
    

    【讨论】:

      【解决方案2】:

      您的代码对我来说工作正常.. 请检查您的身体长度.. 由于给定的条件,运行您的 js 需要 100vh + 100px 的身体高度 这正是你的代码,但它对我很有效。

      <!DOCTYPE html>
      <html>
      <head>
        <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous">
        <style>
          .bg-dark {
            background-color: #101011 !important;
          }
      
          .navbar-dark .navbar-brand {
            padding: 20px 0 10px 10px;
            color: #fff;
          }
          .navbar-nav .nav-link {
            color: #101011;
          }
          .navbar-dark .navbar-nav .nav-link {
            color: rgba(255, 255, 255, 1);
          }
          .navbar-dark .navbar-brand {
             margin: 0;
             width: 50%;
             float: left;
             display: inherit;
          }
          .navbar-brand {
            color: #101011;
            padding: 20px 0 10px 10px;
          }
      
          body .navbar {
            padding: 6px 0 !important;
          }
      
          body .navbar-brand {
            background: none;
          }
        </style>
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
      
      <body style=height:120vh class="bg-info">
      
      <nav class="navbar fixed-top navbar-expand-lg navbar-dark p-md-3">
        <div class="container-fluid">
          <a href="#" class="navbar-brand">WorkonPro</a>
          <button
            type="button"
            class="navbar-toggler"
            data-bs-target="#navbarNav"
            data-bs-toggle="collapse"
            arial-controls="navbarNav"
            aria-expanded="false"
            aria-label="Toggle Navbar"
          >
            <span class="navbar-toggler-icon"></span>
          </button>
      
          <div class="collapse navbar-collapse" id="navbarNav">
            <div class="mx-auto"></div>
            <ul class="navbar-nav">
              <li class="nav-item">
                <a class="nav-link active item-space" href="#" aria-current="page"
                  >Home</a
                >
              </li>
              <li class="nav-item">
                <a class="nav-link item-space" href="#">About</a>
              </li>
              <li class="nav-item">
                <a class="nav-link item-space" href="#"> Healthcare </a>
              </li>
              <li class="nav-item">
                <a class="nav-link item-space" href="#">Tech</a>
              </li>
              <li class="nav-item">
                <a
                  href="#"
                  class="nav-link btn btn-sm item-space grey-button"
                  style="color: #fff"
                  role="button"
                  >Login
                </a>
              </li>
              <li class="nav-item">
                <a
                  href="#"
                  class="nav-link btn btn-sm item-space green-button"
                  style="color: #fff"
                  role="button"
                  ><strong>Create account</strong>
                </a>
              </li>
            </ul>
          </div>
        </div>
      </nav>
      <script src="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/js/bootstrap.bundle.min.js" integrity="sha384-MrcW6ZMFYlzcLA8Nl+NtUVF0sA7MsXsP1UyJoMp4YLEuNSfAP+JcXn/tWtIaxVXM" crossorigin="anonymous"></script>
      <!-- <script src="js/jquery-3.6.0.min.js" charset="utf-8"></script> -->
      <script>
        var nav = document.querySelector('nav');
        window.addEventListener('scroll', function() {
          if (window.pageYOffset > 100) {
            nav.classList.add('bg-dark', 'shadow');
          } else {
            nav.classList.remove('bg-dark', 'shadow');
          }
        });
      </script>
      

      复制粘贴

      【讨论】:

      • window.pageYOffset > 100 减少到大约 80 或 50
      • 抱歉回复晚了。它仍然不适合我。我通过将 style.scss 文件中的 100% 更改为 120vh 来更改身体高度,并将 window.pageYOffset > 100 更改为 window.pageYOffset > 70 并更改了我之前在底部编写脚本的方式身体你写你的方式,它仍然没有工作。它对你有用,对我不起作用?我很困惑,tbh。
      • 我不知道为什么会这样。您确定您在没有更改任何内容的情况下完全尝试了代码。当我输入这个时,我也运行我发布的上述代码。它对我来说很好。好的,你有没有用这个其他 js 或其他一些 css 添加任何东西。你是插入完整的引导 css 还是只是你上面提到的东西(我建议插入 bootstrap.min.css )。
      • 你确定bootstrap css和js插入正确,即路径正确
      • 在我的 angular.json 文件中,我的样式和脚本是这样写的:"styles": [ "./node_modules/@angular/material/prebuilt-themes/deeppurple-amber.css", "./node_modules/bootstrap/dist/css/bootstrap.min.css", "src/styles.scss" ], "scripts": [ "./node_modules/jquery/dist/jquery.min.js", "./node_modules/@popperjs/core/dist/umd/popper.min.js", "./node_modules/bootstrap/dist/js/bootstrap.min.js" ]
      猜你喜欢
      • 2017-12-27
      • 1970-01-01
      • 2017-04-30
      • 2020-04-18
      • 1970-01-01
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多