Подтвердить что ты не робот

Уменьшение полосы навигации при прокрутке вниз (bootstrap3)

Я хотел бы создать эффект навигационной панели, как на http://dootrix.com/ на моей странице (после прокрутки вниз полосы и логотип меняется). Я использую bootstrap 3 для своей страницы. Есть ли простой способ реализовать это с помощью бутстрапа?

4b9b3361

Ответ 1

Sticky navbar:

Чтобы сделать липкий навигатор, вам нужно добавить класс navbar-fixed-top к вашему nav

Официальная документация:
http://getbootstrap.com/components/#navbar-fixed-top

Официальный пример:
http://getbootstrap.com/examples/navbar-fixed-top/

Простой пример кода:

<nav class="navbar navbar-default navbar-fixed-top" role="navigation">
  <div class="container">
    ...
  </div>
</nav>

со связанными jsfiddle: http://jsfiddle.net/ur7t8/

Изменение размера навигационной панели:

Если вы хотите изменить навигационную панель при прокрутке страницы, вы можете взглянуть на этот пример: http://www.bootply.com/109943

JS

$(window).scroll(function() {
  if ($(document).scrollTop() > 50) {
    $('nav').addClass('shrink');
  } else {
    $('nav').removeClass('shrink');
  }
});

CSS

nav.navbar.shrink {
  min-height: 35px;
}

Анимация:

Чтобы добавить анимацию во время прокрутки, все, что вам нужно сделать, это установить переход на nav

CSS

nav.navbar{
  background-color:#ccc;
   // Animation
   -webkit-transition: all 0.4s ease;
   transition: all 0.4s ease;
}

Я сделал jsfiddle с полным примером кода: http://jsfiddle.net/Filo/m7yww8oa/

Ответ 2

toggleClass тоже работает:

$(window).on("scroll", function() {
    $("nav").toggleClass("shrink", $(this).scrollTop() > 50)
});

Ответ 3

Вы можете комбинировать "прокрутку" и "scrollstop" для достижения желаемого результата:

$(window).on("scroll",function(){
   $('nav').addClass('shrink');
}); 
$(window).on("scrollstop",function(){
   $('nav').removeClass('shrink');
}); 

Ответ 4

Если вы используете AngularJS, и используете Angular Bootstrap: https://angular-ui.github.io/bootstrap/

Вы можете сделать это так приятно, как это:

HTML:

<nav id="header-navbar" class="navbar navbar-default" ng-class="{'navbar-fixed-top':scrollDown}" role="navigation" scroll-nav>
    <div class="container-fluid top-header">
        <!--- Rest of code --->
    </div>
</nav>

CSS: (Обратите внимание, что я использую отступы как более мощные навигация для сжатия без дополнения, которые вы можете изменить, как хотите)

nav.navbar {
  -webkit-transition: all 0.4s ease;
  transition: all 0.4s ease;

  background-color: white;
  margin-bottom: 0;
  padding: 25px;
}

.navbar-fixed-top {
  padding: 0;
}

И затем добавьте свою директиву

Директива: (Обратите внимание, что вам может потребоваться изменить this.pageYOffset >= 50 от 50 до более или менее, чтобы удовлетворить ваши потребности)

angular.module('app')
.directive('scrollNav', function ($window) {
  return function(scope, element, attrs) {
    angular.element($window).bind("scroll", function() {
      if (this.pageYOffset >= 50) {
        scope.scrollDown = true;
      } else {
        scope.scrollDown = false;
      }
      scope.$apply();
    });
  };
});

Это сделает работу красиво, анимированной и крутой.

Ответ 5

Для тех, кто не хочет использовать jQuery, здесь используется метод Vanilla Javascript, который делает то же самое с помощью classList:

function runOnScroll() {
    var element = document.getElementsByTagName('nav')  ;
    if(document.body.scrollTop >= 50) {
        element[0].classList.add('shrink')
    } else {
        element[0].classList.remove('shrink')
    }
    console.log(topMenu[0].classList)

};

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

Ответ 6

Я использую этот код для своего проекта

$(window).scroll ( function() {
    if ($(document).scrollTop() > 50) {
        document.getElementById('your-div').style.height = '100px'; //For eg
    } else {
        document.getElementById('your-div').style.height = '150px';
    }    
}
);

Вероятно, это поможет