@angelzzz

Как убрать мерцание при transition?

При прокрутке сайта настроил шапку, чтобы в ней уменьшался логотип и менялись маргины у других элементов. При первом скроле резко пропадает на 1 секунду вся шапка и потом медленно изменяется размер логотипа
<header>
      <div id="navigation">
        <nav class="navbar navbar-default">
          <div class="container">
            <!-- Brand and toggle get grouped for better mobile display -->
            <div class="navbar-header">
              <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#bs-example-navbar-collapse-1">
                <span class="sr-only">Toggle navigation</span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
                <span class="icon-bar"></span>
              </button>
              <a class="navbar-brand" href="#"><img class="logo" src="/images/logo.png"></a>
            </div>

            <!-- Collect the nav links, forms, and other content for toggling -->
            <div class="collapse navbar-collapse" id="bs-example-navbar-collapse-1">
              <ul class="nav navbar-nav navbar-right">
                <li class="active"><a href="#">test3<span class="sr-only">(current)</span></a></li>
                <li><a href="#">test2</a></li>
                <li><a href="#">test1</a></li>
                <p class="navbar-text phone-number">+7 (495) 000 00 00</p>
              </ul>
            </div><!-- /.navbar-collapse -->
          </div><!-- /.container-fluid -->
        </nav>
      </div>
      <!--navbar-->
    </header>


<script>
      $(window).scroll(function() {
          if ($(this).scrollTop() > 1){  
              $('header').addClass("sticky");
              $('header .logo').addClass("sticky");
              $('header .navbar-right').addClass("sticky");
          }
          else{
              $('header').removeClass("sticky");
              $('header .logo').removeClass("sticky");     
              $('header .navbar-right').removeClass("sticky");            
          }
      });
    </script>


.logo, .navbar-right, .navbar {
	-webkit-transition: all 0.4s linear;
    transition: all 0.4s linear;
     -moz-transition: all 0.4s linear;
     -o-transition: all 0.4s linear;  	
}    
header {
	-webkit-transition: all 0.4s linear;
    transition: all 0.4s linear;
     -moz-transition: all 0.4s linear;
     -o-transition: all 0.4s linear;  
    z-index: 1;
}
header.sticky {
    position: fixed;
    width: 100%;
    z-index: 1;    
}


Как сделать плавным этот процесс, как например в этом примере demo.qodeinteractive.com/bridge3 ?
  • Вопрос задан
  • 1443 просмотра
Решения вопроса 1
paradokso
@paradokso
Начинающий фронт-эндер
У вас стоит transition для всех параметров (all), тем самым когда хедер переходит в фиксированное положение он выпадает из потока. Считайте его высота = 0%. Если убрать транзишн - то вы не увидите этого эффекта, а вот с ним - шапка пропадает. В тразинше необходимо прописать только те свойства, которые вы хотите изменять - ширину, маргины.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Я бы еще отсечку прописал, чтобы зря JS не гонять
$(window).scroll(function() {
    if ($(this).scrollTop() > 1){
        if (!$('header').hasClass("sticky")) {
        $('header').addClass("sticky");
        $('header .logo').addClass("sticky");
        $('header .navbar-right').addClass("sticky");
        }
    }
    else{
        $('header').removeClass("sticky");
        $('header .logo').removeClass("sticky");     
        $('header .navbar-right').removeClass("sticky");            
    }
});

тогда, возможно, и transition один раз проидет, без наложения.

P.S. не повторяйте свойство z-index для смежных классов (header и header.sticky как пример), не забывайте, что через transition можно менять не все свойства CSS список возможных
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы