Прикрепленная панель навигации мерцает при достижении нижней части страницы

Недавно я зашел в свой навигационный бар, чтобы действовать как липкая панель навигации, которая придерживается верхней части моей страницы после прокрутки вниз до определенной точки, однако, когда я добираюсь до нижней части моей страницы, весь навигационный бар мерцает, и даже иногда исчезает. Подумайте об этом как о старом телевизоре, который будет мерцать, и вы в конечном итоге окажетесь на стороне, чтобы остановить мерцание. Как бы я ударил свой навигационный бар, чтобы он не мерцал. Здесь - мой сайт, чтобы вы могли засвидетельствовать всю славу мерцания.

Вот мой HTML для навигации:

<div id="nav-wrapper">
<div id="nav" class="navbar navbar-inverse affix-top" data-spy="affix">
  <div class="navbar-inner" data-spy="affix-top">
    <div class="container">

      <!-- .btn-navbar is used as the toggle for collapsed navbar content -->
      <a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </a>

      <!-- Everything you want hidden at 940px or less, place within here -->
      <div class="nav-collapse collapse">
        <ul class="nav">
            <li><a href="#home">Home</a></li>
            <li><a href="#service-top">Services</a></li>
            <li><a href="#contact-arrow">Contact</a></li>
        </ul><!--/.nav-->
      </div><!--/.nav-collapse collapse pull-right-->
    </div><!--/.container-->
  </div><!--/.navbar-inner-->
</div><!--/#nav /.navbar navbar-inverse-->
</div><!--/#nav-wrapper-->

И вот мой JS:

<script>
    $(document).ready(function() {
        $('#nav-wrapper').height($("#nav").height());
        $('#nav').affix({
            offset: 675
        });
    });
</script>

Важно отметить, что это началось только после того, как я изменил смещение в моем JS от offset: $('#nav').position() до offset: 675. Вы могли бы сказать, просто измените его, но со старым смещением мой липкий nav прыгнет преждевременно на вершину.

Спасибо за помощь, которую вы можете мне предоставить!

Ответ 1

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

Проблема заключалась в том, что аффикс-код применяет класс (например, affix или affix-bottom) к прикрепленному элементу на основе его вертикальной позиции на странице. Я назову эти "зоны".

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

Ключ для меня состоял в том, чтобы гарантировать, что значения data-offset-top/data-offset-bottom и классы CSS были установлены так, чтобы элемент больше не перемещался вертикально, когда аффикс переключается. И.Е. Что-то вроде:

<div class="someClass" data-spy="affix" data-offset-top="20" data-offset-bottom="300">
  ...
</div>

(data-offset-bottom заключается в повторном подключении элемента, чтобы он не врезался, например, в высокий нижний колонтитул и не всегда был необходим.) И затем:

.someClass.affix {
  /* position: fixed; already applied in .affix */
  top: 10px;
  /* might also need e.g. width: 300px; as position: fixed; removes the element from its parent. */
}
.someClass.affix-bottom {
  position: absolute; /* Start scrolling again. */
  top: auto; /* Override the top position above. */
  bottom: 20px; /* It should stop near the bottom of its parent. */
}

Иногда скачок при изменении классов CSS подталкивает элемент дальше в зону, в которую он входит, что приводит к одному "щелчку" на границе, но не повторению мерцания.

N.B. Я думаю, что очень незначительный скачок, когда ваше меню станет фиксированным, можно было бы сгладить таким образом, сделав очень небольшую корректировку вертикального положения элемента при прикреплении и/или установив data-offset-top на некоторое подходящее значение.

Приветствия,

Лео

Ответ 2

Ответа на этот вопрос Bootstrap 3 Fixed Navbar...

Просто добавьте следующее в .navbar

.navbar
{
   -webkit-backface-visibility: hidden;
}

Ответ 3

Проблема для меня заключалась в том, что содержимое моей страницы было меньше моего меню, поэтому, когда меню было изменено на фиксированную позицию, это вызвало узкую страницу. Я установил содержание min-height с этим (coffeescript):

$ ->
  $('.content').css('min-height', ->
    $('.bs-docs-sidebar').height())

И все работало как шарм.

Ответ 4

Просто добавьте это в свой класс CSS.

.navbar-fixed-top, .navbar-fixed-bottom { position:unset; }