дёргается навбар при прокрутке

79
22 сентября 2019, 00:20

есть страница с навбаром, который с помощью JS уменьшается при прокрутке вниз, при этом всегда оставаясь вверху (position: sticky). если быстро и сильно прокручивать всё работает правильно, если же прокрутить немного, то навбар начинает дёргатся вверх-вниз как аццкий сотона, в примере ниже видно. есть идеи как исправить?

я вообще понимаю, что это из-за того самого position: sticky, так как если поставить fixed, то скроллится нормально, только вот fixed не работает с flexbox.

navbar_scroll(); 
 
function navbar_scroll() { 
  $(window).scroll(function() { 
    if ($(document).scrollTop() > 30) { 
      $('nav').css('height', '50px'); 
      $('[id=nav-link]').css('padding', '15px 20px'); 
      $('[id=nav-icon]').css('padding', '15px 10px'); 
    } else { 
      $('nav').css('height', '160px'); 
      $('[id=nav-link]').css('padding', '71px 20px'); 
      $('[id=nav-icon]').css('padding', '71px 10px'); 
    } 
  }); 
}
body { 
  margin: 0; 
} 
 
nav { 
  display: -webkit-box; 
  display: -ms-flexbox; 
  display: flex; 
  -webkit-box-pack: justify; 
  -ms-flex-pack: justify; 
  justify-content: space-between; 
  -webkit-box-align: center; 
  -ms-flex-align: center; 
  align-items: center; 
  height: 160px; 
  position: -webkit-sticky; 
  position: sticky; 
  top: 0; 
  -webkit-transition: all .4s ease; 
  transition: all .4s ease; 
  background: white; 
} 
 
nav .nav-section-logo { 
  margin-left: 60px; 
} 
 
nav .nav-section-link { 
  margin-right: 60px; 
} 
 
nav .nav-link { 
  font-size: 17px; 
  font-family: 'Major Mono Display', monospace; 
  padding: 71px 20px; 
  text-decoration: none; 
  color: black; 
  font-weight: bolder; 
  -webkit-transition: all .2s ease; 
  transition: all .2s ease; 
} 
 
nav .nav-link:hover { 
  color: coral; 
} 
 
nav .nav-icon { 
  padding: 71px 10px; 
} 
 
p.lorem { 
  padding: 600px 0; 
  background-color: #323232; 
  margin: 0 60px 20px; 
}
<nav class="nav"> 
  <div class="nav-section-logo"> 
    <a href="#" id="nav-link" class="nav-link">logo</a> 
  </div> 
  <div class="nav-section-link"> 
    <a href="{{ url_for('index') }}" id="nav-link" class="nav-link">Main</a> 
    <a href="#" id="nav-link" class="nav-link">Portfolio</a> 
    <a href="#" id="nav-link" class="nav-link">Photography</a> 
    <a href="#" id="nav-link" class="nav-link">About me</a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-instagram fa-lg"></i> 
    </a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-facebook fa-lg"></i> 
    </a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-github fa-lg"></i> 
    </a> 
  </div> 
</nav> 
 
<p class="lorem">lorem</p> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

Answer 1

navbar_scroll(); 
 
function navbar_scroll() { 
  $(window).scroll(function() { 
    if ($(document).scrollTop() > parseInt($('nav').css('height')) - 20) { 
      $('nav').css('height', '50px'); 
      $('[id=nav-link]').css('padding', '15px 20px'); 
      $('[id=nav-icon]').css('padding', '15px 10px'); 
    } else { 
      $('nav').css('height', '160px'); 
      $('[id=nav-link]').css('padding', '71px 20px'); 
      $('[id=nav-icon]').css('padding', '71px 10px'); 
    } 
  }); 
}
body { 
  margin: 0; 
} 
 
nav { 
  display: -webkit-box; 
  display: -ms-flexbox; 
  display: flex; 
  -webkit-box-pack: justify; 
  -ms-flex-pack: justify; 
  justify-content: space-between; 
  -webkit-box-align: center; 
  -ms-flex-align: center; 
  align-items: center; 
  height: 160px; 
  position: -webkit-sticky; 
  position: sticky; 
  top: 0; 
  -webkit-transition: all .4s ease; 
  transition: all .4s ease; 
  background: white; 
} 
 
nav .nav-section-logo { 
  margin-left: 60px; 
} 
 
nav .nav-section-link { 
  margin-right: 60px; 
} 
 
nav .nav-link { 
  font-size: 17px; 
  font-family: 'Major Mono Display', monospace; 
  padding: 71px 20px; 
  text-decoration: none; 
  color: black; 
  font-weight: bolder; 
  -webkit-transition: all .2s ease; 
  transition: all .2s ease; 
} 
 
nav .nav-link:hover { 
  color: coral; 
} 
 
nav .nav-icon { 
  padding: 71px 10px; 
} 
 
p.lorem { 
  padding: 600px 0; 
  background-color: #323232; 
  margin: 0 60px 20px; 
}
<nav class="nav"> 
  <div class="nav-section-logo"> 
    <a href="#" id="nav-link" class="nav-link">logo</a> 
  </div> 
  <div class="nav-section-link"> 
    <a href="{{ url_for('index') }}" id="nav-link" class="nav-link">Main</a> 
    <a href="#" id="nav-link" class="nav-link">Portfolio</a> 
    <a href="#" id="nav-link" class="nav-link">Photography</a> 
    <a href="#" id="nav-link" class="nav-link">About me</a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-instagram fa-lg"></i> 
    </a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-facebook fa-lg"></i> 
    </a> 
    <a href="#" id="nav-icon" class="nav-link nav-icon"> 
      <i class="fab fa-github fa-lg"></i> 
    </a> 
  </div> 
</nav> 
 
<p class="lorem">lorem</p> 
 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

READ ALSO
Переход на gulp 4 версии,

Переход на gulp 4 версии,

Смотрю курс по верстке html письма и видимо после обновления gulp стала вылетать ошибка, как мне её исправить, я уже читал документацию, смотрел...

106
Проблемы запроса к АРI Vue CLI

Проблемы запроса к АРI Vue CLI

Вот код apijs Vue CLI, что в нем не так?

112
Canvas / Создание эффекта (маски) миража для изображения

Canvas / Создание эффекта (маски) миража для изображения

Подскажите, есть ли легкий способ создать эффекта миража(марева) на технологиях canvas / svg для изображенияВ приведенном примере используется...

88
Проблема с отсчетом setInterval в Javascript

Проблема с отсчетом setInterval в Javascript

у меня такой вопрос: почему, для того, чтобы отсчет шел до 0, нужно i = -2(Естественно когда i = 0, отсчет идет до 2)Вот код:

77