Отображение панели навигации при прокрутке с белым фоном

Я пытаюсь заставить мою навигационную панель иметь белый фон, как только пользователь прокручивает веб-сайт. Но по какой-то причине я не уверен, как заставить белый фон появляться на панели навигации, а мой продолжает исчезать, как только я прокручиваю

Таким образом, моя панель навигации выглядит нормально, без фона в верхней части страницы. Тогда мне нужно, как только пользователь прокручивает страницу вниз, она должна просто прилипать к верхней части экрана с белым фоном над ней.

Примерно так: Пример

Но, очевидно, у меня уже настроена панель навигации, мне просто нужно, чтобы появился фон

<body>
    <div class="parallax">
        <div class ="logo">
        <img src="Images/logo1.fw.png">
        </div> 

     <nav class="navbar navbar-default">
        <div class="container-fluid">
          <div class="navbar-header">
            <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar">
              <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="navbar" class="navbar-collapse collapse">
            <ul class="nav navbar-nav">
              <li><a href="#">Home</a></li>
              <li><a href="#">Timetable</a></li>
              <li><a href="#">Prices</a></li>
              <li><a href="#">About Us</a></li>
              <li><a href="#">Contact</a></li>
              <li><a href="#">Belt Rankings</a></li>
              <li><a href="#">Blog</a></li>
              <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Classes </a>
                <ul class="dropdown-menu">
                  <li><a href="#">Brazilian Jiu Jitsu</a></li>
                  <li><a href="#">Wrestling</a></li>
                  <li><a href="#">Boxing</a></li>
                  <li><a href="#">Yoga</a></li>
                  <li><a href="#">Women Self-Defence</a></li>
                  <li><a href="#">Treatments</a></li>
                  <li><a href="#">Kids</a></li>
                </ul>
              </li>
            </ul>
          </div><!--/.nav-collapse -->
        </div><!--/.container-fluid -->
      </nav>

          <div class="container">

        </div>





    </div>

    <div class="parallax1">
    </div>
          <!-- jQuery (necessary for Bootstrap's JavaScript plugins) -->
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
    <!-- Include all compiled plugins (below), or include individual files as needed -->
    <script src="js/bootstrap.js"></script>
    <script>
  $(document).ready(function(){

    // hide .navbar first
    $(".navbar").show();

    // fade in .navbar
    $(function () {
        $(window).scroll(function () {

        $('.navbar-default').css({
          backgroundColor:  $(this).scrollTop() > 100 ? 
            'white':
            'transparent'
        })
        });


    });

});
      </script>
</body>

CSS:

body {
    font-family: 'Open Sans', sans-serif, Arial;
    font-size: 16px;
    color: #6D6D6D;
    background-color: #F5F5F5;
    font-weight: 300;
}
h1,h2,h3,h4,h5,h6 {
    font-family: 'Montserrat', sans-serif, Arial;

    padding-bottom: 5px;
    color: #373432;
    line-height: 1em;
    font-weight: normal;
}
a {
    text-decoration: none;
    outline: none;
}


.parallax {
    background-image: url("../Images/back1.jpg");
    min-height: 1000px;
    background-attachment: fixed;
    background-position: center;
    background-repeat: no-repeat;
    background-size: cover;
    width: 100%;
}

.parallax1 {
    min-height: 1000px;
}



.logo {
  float: left;
  padding-top: 50px;
  padding-left: 40px;   
}

.logo h1 {
    text-transform: uppercase;
    font-weight: 900;
    font-size: 60px;
    letter-spacing: -5px;
    line-height: 50px;
    color: white;
}

.navbar-nav>li>a {
    line-height: 6px;
}


.navbar {
  float: right;
  padding-top: 50px;
  padding-right: 60px;
  font-size: 13px;
      text-transform: uppercase;
}

.navbar-default {
    background-color: transparent;
    border-top: 0px solid rgba(0, 0, 0, 0.5);
    border-bottom: 0px solid rgba(0, 0, 0, 0.5);
    border-left: 0px solid rgba(0, 0, 0, 0.5);
    border-right: 0px solid rgba(0, 0, 0, 0.5);
      -webkit-transition: background-color 200ms linear;
  -moz-transition: background-color 200ms linear;
  -o-transition: background-color 200ms linear;
  -ms-transition: background-color 200ms linear;
  transition: background-color 200ms linear;
}

.navbar-default .navbar-nav>li>a {
    color: #ffffff;
}

.navbar-default .navbar-nav > li > a:hover, 
.navbar-default .navbar-nav > li > a:focus {
      background-color: #F8BD23;
      text-decoration: none;
       color: #ffffff;
    -webkit-transition: background-color 200ms linear;
    -moz-transition: background-color 200ms linear;
    -o-transition: background-color 200ms linear;
    -ms-transition: background-color 200ms linear;
    transition: background-color 200ms linear;
    }

    .navbar-nav > li{
  padding-left:30px;

}

.container {
  width:100%;
  height:100%;
  display:flex;
  justify-content:center;
  flex-direction: column;
  align-items: center;
}

person RonTheOld    schedule 27.07.2017    source источник
comment
Быстрый вопрос: вы изменили свойства overflow-y ваших элементов body или html? Если это так, это мешает Chrome получить точное значение scrollTop() — оно всегда равно нулю. Я боролся с этим несколько раз, прежде чем обнаружил причину.   -  person arbuthnott    schedule 28.07.2017
comment
@arbuthnott нет, я не уверен, ха-ха :)   -  person RonTheOld    schedule 28.07.2017


Ответы (1)


В принципе нужно поменять:

...
if ($(this).scrollTop() > 100) {
  $('.navbar').fadeIn();
} else {
  $('.navbar').fadeOut();
}
...

... to ...

...
$('.navbar-default').css({
  backgroundColor:  $(this).scrollTop() > 100 ? 
    'white':
    'transparent'
})
...

Вы также можете добавить свойство перехода для background-color для .navbar-default в свой CSS, как вы сделали для своих ссылок:

.navbar-default {
  -webkit-transition: background-color 200ms linear;
  -moz-transition: background-color 200ms linear;
  -o-transition: background-color 200ms linear;
  -ms-transition: background-color 200ms linear;
  transition: background-color 200ms linear;
}

На практике вы хотите обернуть это внутри функции, которая вызывается не только для события scroll. А именно также на событиях load и resize, например:

var checkScrollBar = function(){
  $('.navbar-default').css({
    backgroundColor: $(this).scrollTop() > 100 ?
      'white' : 'transparent'
  })
}
$(window).on('load resize scroll', checkScrollBar)

Рабочий пример:

var checkScrollBar = function(){
  $('.navbar-default').css({
    backgroundColor: $(this).scrollTop() > 100 ?
      'white' : 'transparent'
  })
}
$(window).on('load resize scroll', checkScrollBar)
body {
  margin:0
}
body > div {
  background-color: red;
}
.parallax1 {
  min-height: 200vh;
}

/* 
 * all CSS above is just for for SO, don't use in project 
 */

nav.navbar-default {
  background-color: transparent;
  transition: background-color 200ms linear;
}
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet"/>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>
  
  <div class="parallax">
    <div class="logo">
      <img src="Images/logo1.fw.png">
    </div>
    <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="#navbar" aria-expanded="false" aria-controls="navbar">
              <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="navbar" class="navbar-collapse collapse">
          <ul class="nav navbar-nav">
            <li><a href="#">Home</a></li>
            <li><a href="#">Timetable</a></li>
            <li><a href="#">Prices</a></li>
            <li><a href="#">About Us</a></li>
            <li><a href="#">Contact</a></li>
            <li><a href="#">Belt Rankings</a></li>
            <li><a href="#">Blog</a></li>
            <li class="dropdown">
              <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-haspopup="true" aria-expanded="false">Classes </a>
              <ul class="dropdown-menu">
                <li><a href="#">Brazilian Jiu Jitsu</a></li>
                <li><a href="#">Wrestling</a></li>
                <li><a href="#">Boxing</a></li>
                <li><a href="#">Yoga</a></li>
                <li><a href="#">Women Self-Defence</a></li>
                <li><a href="#">Treatments</a></li>
                <li><a href="#">Kids</a></li>
              </ul>
            </li>
          </ul>
        </div>
        <!--/.nav-collapse -->
      </div>
      <!--/.container-fluid -->
    </nav>
    <div class="container">
    </div>
  </div>
  <div class="parallax1">
    
  </div>

person tao    schedule 27.07.2017
comment
привет, так что это работает, но только когда я прокручиваю вверх :) я ничего не прокручиваю вниз, но как только я прокручиваю страницу вверх, она работает на долю секунды :) - person RonTheOld; 28.07.2017
comment
Он должен работать. Что-то еще, что у вас есть, мешает этому или переопределяет этот CSS. Без возможности осмотра я больше ничем не могу вам помочь. Предоставьте минимально воспроизводимый пример. - person tao; 28.07.2017
comment
Я загрузил свой вопрос со всем своим кодом с моего сайта, но опять же я не уверен, что не так - person RonTheOld; 28.07.2017
comment
@RonTheOld, вся суть Stack Overflow заключается в помощи другим. Вам нужно создать фрагмент здесь, в вопросе, чтобы ваш вопрос и любой ответ на него продолжали помогать будущим посетителям с аналогичной проблемой еще долго после того, как ваш сайт изменится и больше не будет воспроизводить проблему. Согласно вашему комментарию выше, что-то еще мешает предоставленному мной сценарию. Вам нужно показать это в вопросе, поэтому а) я говорю вам, как это исправить; б) другие также узнают, как решить ту же проблему. На данный момент ваш вопрос не является фрагментом и не воспроизводит описанную проблему. - person tao; 28.07.2017
comment
Но это не может быть проблемой, мой друг, так как я показал вам весь свой код для моего примера, если вы понимаете, что я имею в виду? так что если вы запустите это в синппете, это не сработает, но я посмотрю - person RonTheOld; 28.07.2017
comment
@ Рон, я прекрасно понимаю, что ты имеешь в виду. Теперь вы, кажется, связываете js/bootstrap.js. Вы хоть представляете, чем отличается Bootstrap 3 от Bootstrap 4? Вы понимаете, что я имею в виду? Существуют буквально миллионы возможных причин, по которым происходит то, что вы описываете. Без возможности осмотреть элементы и использовать консольный журнал я не могу помочь. Скажите, пожалуйста, хотя бы какую версию Bootstrap вы используете. Я предполагаю, что это v3.*.*? - person tao; 28.07.2017
comment
@Ron, я сам сделал фрагмент и понял, в чем проблема: вам нужно запустить эту функцию на load событии вашей страницы, а не только на scroll событии. Я думаю, вы также хотите запустить его на resize. См. пример в обновленном ответе. - person tao; 28.07.2017
comment
Использование В настоящее время v3. попробую посмотреть в чем проблема - person RonTheOld; 28.07.2017