【问题标题】:Change navbar background color on page scroll在页面滚动时更改导航栏背景颜色
【发布时间】:2018-06-02 03:33:45
【问题描述】:

当我滚动页面时,我无法让我的固定顶部导航栏更改 background-color

这是JS中的函数:

$(document).ready(function(){       
    var scroll_start = 0;
    var startchange = $('#startchange');
    var offset = startchange.offset();
    if (startchange.length){
        $(document).scroll(function() { 
            scroll_start = $(this).scrollTop();
            if(scroll_start > offset.top) {
                $(".navbar").css('background-color', '#f0f0f0');
            } else {
                $('.navbar').css('background-color', 'transparent');
            }
        });
    }
 });

这是一个名为“custom.js”的文件,在我加载 bootstrap and jquery 后加载到页面底部(custom.jsindex.html 位于同一文件夹中)

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
<script src="custom.js"></script>

这里是 html 导航栏:

<div class="container">
    <nav class="navbar navbar-default navbar-fixed-top">
        <div class="container-fluid">
            <div class="navbar-header ">                  
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbarNav">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
            </div>

            <div id="navbarNav" class="navbar-collapse collapse ">
                <br/><br/>
                <ul class="nav navbar-nav navbar-right ">
                    <li><a href="#">ABOUT</a></li>
                    <li><a href="#">SERVICES</a></li>
                    <li><a href="#">CONTACT</a></li>
                    <li><a href="#">CALCULATORS</a></li>
                </ul>
            </div> 
        </div>
    </nav>
</div>

然后我只有 css 用于导航栏背景颜色的变化:

.navbar {
    background-color: transparent;
    border-color: transparent;
}

.navbar-toggle:hover, .navbar-default .navbar-toggle:focus{
    background-color: transparent !important;
}

【问题讨论】:

  • html中没有带有startchange id的dom元素
  • 所以我需要将该 ID 添加到导航栏??
  • 就在文档的某处,页面顶部没有的内容
  • 你能演示一下这样的标签是什么样的吗?我以前没有在 html 中使用过 ID。谢谢!
  • 添加 ID 的方式几乎与添加类的方式相同,但使用 id 而不是 class

标签: javascript html css twitter-bootstrap


【解决方案1】:

这是您当前的函数和 css 在具有 &lt;div&gt;id=startchange 的页面上所做的事情。在页面加载时,导航栏不透明。一旦您滚动导航栏就会变得透明(边框仍然可见)并且一旦带有id=startchange&lt;div&gt; 通过页面顶部,您的导航栏就会再次变得不透明。

如果你让你的 CSS 更具体,你可以让导航栏从无边框开始是透明的(在更大的屏幕尺寸下,你可能还想看看它在小屏幕上的样式)。

$(document).ready(function(){       
    var scroll_start = 0;
    var startchange = $('#startchange');
    var offset = startchange.offset();
    if (startchange.length){
        $(document).scroll(function() { 
            scroll_start = $(document).scrollTop();
            if(scroll_start > offset.top) {
                $(".navbar").css('background-color', '#f0f0f0');
            } else {
                $('.navbar').css('background-color', 'transparent');
            }
        });
    }
 });
.navbar.navbar-default.navbar-fixed-top {
    background-color: transparent;
    border-color: transparent;
    -webkit-transition: background-color 2s; /* Safari */
    transition: background-color 2s; 
}

.navbar-toggle:hover, .navbar-default .navbar-toggle:focus{
    background-color: transparent !important;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

<div class="container">
    <nav class="navbar navbar-default navbar-fixed-top">
        <div class="container-fluid">
            <div class="navbar-header ">                  
                <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbarNav">
                    <span class="sr-only">Toggle navigation</span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                    <span class="icon-bar"></span>
                </button>
            </div>

            <div id="navbarNav" class="navbar-collapse collapse ">
                <br/><br/>
                <ul class="nav navbar-nav navbar-right ">
                    <li><a href="#">ABOUT</a></li>
                    <li><a href="#">SERVICES</a></li>
                    <li><a href="#">CONTACT</a></li>
                    <li><a href="#">CALCULATORS</a></li>
                </ul>
            </div> 
        </div>
    </nav>
    
    <div id="page">
      Page Top
      <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
      <div id="startchange">Start Change Div</div>
      <br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br><br>
      Page Bottom
    </div>
</div>

【讨论】:

  • 只想对所有帮助表示感谢。你的解释正是我所需要的。我有一个跟进:有没有办法让颜色“淡入”?
  • 很容易,检查我上面的答案 css 部分。我已经向 css 添加了过渡。这为对该 css 属性的任何更改设置了转换时间(在这种情况下,背景颜色需要 2 秒)。
  • 正是我要找的东西,而你就这么简单地做到了。非常感谢!
【解决方案2】:

根据需要更改值 50,50px 是滚动后的页面位置

$(document).ready(function () {
                    $(window).scroll(function () {
                        if ($(window).scrollTop() >= 50) {
                            $(".navbar").css("background-color", "#222");
                        } else {
                            $(".navbar").css("background-color", "transparent");
                        }
                    });
                });

【讨论】:

    【解决方案3】:

    这种方法很简单;

    let blackToRed = [0,0,0,1];
    $(document).ready(function(){
        $(document).scroll(function() {
            blackToRed[0] = window.scrollY;
            $("#item").css('color', 'rgba(' + blackToRed + ')');
        });
    });
    

    【讨论】:

      【解决方案4】:

      这是使用纯 JavaScript HTML DOM 的最简单方法 将导航标签 id 设置为 id="navbar" 并且还取决于您要将 js 代码放置在哪里,如果您要在同一页面上应用它,请将以下代码放在脚本标签中,否则只需将代码粘贴为在你的 js 文件中 导航栏背景颜色是透明的,并且滚动导航栏更改为红色

      // When the user scrolls down 80px from the top of the document, resize the navbar's padding and the logo's font size
      window.onscroll = function() {scrollFunction()};
      
      function scrollFunction() {
        if (document.body.scrollTop > 80 || document.documentElement.scrollTop > 80) {
          document.getElementById("navbar").style.backgroundColor = "red";
          // document.getElementById("logo").style.fontSize = "25px";
        } else {
          document.getElementById("navbar").style.backgroundColor = "transparent";
          // document.getElementById("logo").style.fontSize = "35px";
        }
      }
      * {box-sizing: border-box;}
      
      body { 
        margin: 0;
        font-family: Arial, Helvetica, sans-serif;
      }
      
      #navbar {
        overflow: hidden;
        background-color: #f1f1f1;
        padding: 90px 10px;
        transition: 0.4s;
        position: fixed;
        width: 100%;
        top: 0;
        z-index: 99;
      }
      
      #navbar a {
        float: left;
        color: black;
        text-align: center;
        padding: 12px;
        text-decoration: none;
        font-size: 18px; 
        line-height: 25px;
        border-radius: 4px;
      }
      
      #navbar #logo {
        font-size: 35px;
        font-weight: bold;
        transition: 0.4s;
      }
      
      #navbar a:hover {
        background-color: #ddd;
        color: black;
      }
      
      #navbar a.active {
        background-color: dodgerblue;
        color: white;
      }
      
      #navbar-right {
        float: right;
      }
      
      @media screen and (max-width: 580px) {
        #navbar {
          padding: 20px 10px !important;
        }
        #navbar a {
          float: none;
          display: block;
          text-align: left;
        }
        #navbar-right {
          float: none;
        }
      <div id="navbar">
        <a href="#default" id="logo">CompanyLogo</a>
        <div id="navbar-right">
          <a class="active" href="#home">Home</a>
          <a href="#contact">Contact</a>
          <a href="#about">About</a>
        </div>
      </div>
      <div style="margin-top:210px;padding:15px 15px 2500px;font-size:30px">
        <p><b>changing nav bar on scroll.</b></p>
        <p>Scroll down  to see the effect!</p>
        <p>Scroll to the top to remove the effect.</p>
      What is Lorem Ipsum?
      Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book. It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged. It was popularised in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.
      
      Why do we use it?
      It is a long established fact that a reader will be distracted by the readable content of a page when looking at its layout. The point of using Lorem Ipsum is that it has a more-or-less normal distribution of letters, as opposed to using 'Content here, content here', making it look like readable English. Many desktop publishing packages and web page editors now use Lorem Ipsum as their default model text, and a search for 'lorem ipsum' will uncover many web sites still in their infancy. Various versions have evolved over the years, sometimes by accident, sometimes on purpose (injected humour and the like).
      
      </p>
      </div>

      【讨论】:

        猜你喜欢
        • 2017-12-27
        • 2017-04-30
        • 2020-04-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多