【问题标题】:Change navigation bar background when scrolling Bootstrap [duplicate]滚动 Bootstrap 时更改导航栏背景 [重复]
【发布时间】:2021-10-10 06:22:37
【问题描述】:

我试图让我的导航栏在滚动时从透明背景变为黑色背景。喜欢这个模板:https://www.templatemonsterpreview.com/demo/58900.html?_gl=1*vx82om*_ga*MTc0ODAzMTI4OS4xNjI3NTcxNDQw*_ga_FTPYEGT5LY*MTYyNzYwNzQ4Mi40LjEuMTYyNzYwODA2NC40Nw..&_ga=2.184031919.825417510.1627571440-1748031289.1627571440。我已经尝试了来自 How to Change Navigation Bar Background with Scroll?Changing nav-bar color after scrolling? 的答案,但它似乎对我不起作用。

这是我的html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>Cuppela</title>
    <script src="js/jquery.min.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    <script src="js/popper.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">
    <link rel="stylesheet" href="css/test.css" type="text/css">
</head>
<body>
<div id="nav-menu">
    <nav id="main-nav" class="navbar navbar-expand-md fixed-top navbar-dark bg-transparent">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
            <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="collapsibleNavbar">
            <ul class="nav navbar-nav mx-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Shop</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </nav>
</div>
<div class="container-fluid" id="top-main"> 

    <div id="top_text">
        <h1>Cuppela Made With Sugar</h1>
        <p style="font-size: x-large;">Delicious Homemade Cakes</p>
    </div>
    
</div>

<div id="best-sellers "class="container">
    <h2>Best Sellers</h2>
    <hr>
    <div id="best-seller-cakes" class="row">
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/chocolate_cake.jpg">
            <h4>Good<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/red_velvet_cake.jpeg">
            <h4>Awesome<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/strawberry_cake.jpg">
            <h4>Great<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/cake_seven.jpg">
            <h4>Delicious<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
    </div>
</div>

<footer>
    <div class="container-fluid" id="footer-content">
    <h3>Test</h3>
    </div>
</footer>

<script type="text/javascript">
$(document).ready(function(){
    $(window).on("scroll",function(){

        if($(document).scrollTop() > 50)
        {
            $("#nav-menu").css({background:"black"});
        }
        else
        {
            $("#nav-menu").css({background:"transparent"});
        }
    })
});
</script>

</body>
</html>

这是我的 CSS:

body{
    margin: 0px;
}

li a:hover {
    background-color: #ff9900;
    border-radius: 10px;
}

li a{
    color: white !important;
}

.nav-link{
    padding: 0 0 .2rem
}

#top-main{
    background-image: url(../images/cake_six_two.jpg);
    height: 100vh;
}

#nav-menu{
    font-size: medium;
    position: relative;
}

#top_text{
    color: white;
    text-align: center;
    position: relative;
    top: 50%;
    left: 50%;
    /* bring your own prefixes */
    transform: translate(-50%, -50%);
}

h1{
    font-size: 500%;
    text-align: center;
}


h2{
    text-align: center;
}

#best-sellers{
    text-align: center;
}

#best-seller-cakes{
    text-align: center;
}

h4
{
    font-size: x-large;
    font-weight: bold;
    font-family: Georgia, 'Times New Roman', Times, serif;
}

#footer-content
{
    text-align: center;
}

【问题讨论】:

  • 您可以像 $('#main-nav').removeClass('bg-transparent')$('# main-nav').addClass('bg-dark');

标签: javascript html jquery css bootstrap-4


【解决方案1】:

#main-nav而不是#nav-menu上通过jQuery添加/删除类。

参见下面运行 sn-p。

$(document).ready(function () {
    $(window).on("scroll", function () {
        if ($(document).scrollTop() > 50) {
            $("#main-nav").addClass('bg-dark').removeClass('bg-transparent');
        }
        else {
            $("#main-nav").addClass('bg-transparent').removeClass('bg-dark');
        }
    })
});
li a:hover {
    background-color: #ff9900;
    border-radius: 10px;
}
li a{
    color: white !important;
}
.nav-link{
    padding: 0 0 .2rem
}
#top-main{
    background-image: url(https://i.stack.imgur.com/Z12tw.png);
    height: 100vh;
}
#nav-menu{
    font-size: medium;
    position: relative;
}
#top_text{
    color: white;
    text-align: center;
    position: relative;
    top: 50%;
    left: 50%;
    /* bring your own prefixes */
    transform: translate(-50%, -50%);
}
h1{
    font-size: 500%;
    text-align: center;
}
h4{
    font-size: x-large;
    font-weight: bold;
    font-family: Georgia, 'Times New Roman', Times, serif;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.min.js" ></script>


<div id="nav-menu">
    <nav id="main-nav" class="navbar navbar-expand-md fixed-top navbar-dark bg-transparent">
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="collapsibleNavbar">
            <ul class="nav navbar-nav mx-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Shop</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </nav>
</div>

<div class="container-fluid" id="top-main">
    <div id="top_text">
        <h1>Cuppela Made With Sugar</h1>
        <p style="font-size: x-large;">Delicious Homemade Cakes</p>
    </div>
</div>

<div id="best-sellers" class="container text-center">
    <h2>Best Sellers</h2>
    <hr>
    <div id="best-seller-cakes" class="row text-center">
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Good<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Awesome<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Great<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Delicious<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
    </div>
</div>

<footer>
    <div class="container-fluid text-center" id="footer-content">
        <h3>Test</h3>
    </div>
</footer>

【讨论】:

    【解决方案2】:

    好的,您正在使用 Bootstrap。首先你需要删除类 bg-transparent 因为它有 !important 背景颜色:

    这里是为您测试的有效解决方案:

    (function($){
        $(window).on("scroll",function(){
            var $navbar = $('#main-nav');
            if($(document).scrollTop() > ($navbar.height()+10))
            {
                $navbar
                    .removeClass('bg-transparent')
                    .addClass('bg-dark');
            }
            else
            {
                $navbar
                    .addClass('bg-transparent')
                    .removeClass('bg-dark');
            }
        });
    }(jQuery || window.jQuery));
    

    这是如何工作的?

    通常,在滚动过程中,我会检查文档与屏幕顶部的距离。我采用标题高度并为其添加 10px 以获得一些偏移量。

    当文档的位置大于标题时(当我们向下滚动时),我删除透明背景并添加黑色背景。如果我向上滚动,我会移除黑色背景并恢复透明背景。

    我只是在标题中自动添加和删除类。

    【讨论】:

    • 您好,感谢您的回复。我想更好地理解代码,您介意添加一些解释吗?
    • 我更新了答案。很简单。
    • 感谢您的解释。现在我更明白了。
    【解决方案3】:

    试试这个方法

    我已将目标 #nav-menu 更改为 #main-nav

    $(document).ready(function(){
        $(window).on("scroll",function(){
    
            if($(document).scrollTop() > 50)
            {
                $("#main-nav").css('background', 'black !important;');
            }
            else
            {
                $("#main-nav").css('background','transparent !important;'});
            }
        })
    });
    

    【讨论】:

    • 您好,我已经更改了代码,但它似乎仍然不起作用。
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2017-04-30
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-18
    • 2017-10-28
    相关资源
    最近更新 更多