Search code examples
javascripthtmlcssscrollsticky

Header was shaking when scrolling down


Note: Please try to use mousewheel when scrolling down. Also please be nice to mousewheel. Move it slowly.

I have a little question about scrolling. I am trying to reduce the header height when page scrolled to the down as most creative websites do. But in this case when I was tried to scroll down with mouse screen was shaking. Also sometimes its do with scrolling with mousewheel. All files added to the js fiddle. Please look at jsfiddle below. I hope I can express myself. Thanks in advance.

$(document).ready(function () {
	$(window).scroll(function () {
    if ($(window).scrollTop() >= 30) {
      $('.header-bottom').addClass('sticky');
      $('.header-bottom').css('line-height','80px');
    } else {
      $('.header-bottom').removeClass('sticky');
      $('.header-bottom').css('line-height','160px');
    }
  });
});
body {
  margin: 0;
}
.header-top {
  line-height:30px;
  background: blue;
}
.header-bottom {
  line-height:160px;
  background: red;
  -webkit-transition: .45s;
  -moz-transition: .45s;
  -ms-transition: .45s;
  -o-transition: .45s;
  transition: .45s;
}
.sticky {
  position: sticky;
  top:0;
  width: 100%;
}

.content {
  margin-top: 20px;
}

.content > div {
  margin-bottom: 100px;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<div class="header-top">Content</div>
<div class="header-bottom">Content</div>
<div class="content">
  <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora nobis, suscipit consequuntur! Neque modi libero praesentium rerum, pariatur, assumenda obcaecati laudantium officia iste excepturi, molestias quibusdam quae sed nihil laborum.</div>
  <div>Necessitatibus, omnis odit ipsam, repudiandae beatae minima! Voluptates molestias vitae fuga officiis, aperiam earum quas laboriosam cupiditate hic vero reiciendis, numquam corporis, assumenda rem iure expedita animi magnam perferendis delectus.</div>
  <div>Eum odit hic delectus vel facilis nisi cupiditate ad enim recusandae ex, commodi sunt ullam distinctio, architecto quam nulla cumque possimus nihil qui unde magni provident ratione obcaecati fuga. Beatae.</div>
  <div>Iusto repellendus dolore atque architecto consequatur magni nulla animi possimus reiciendis, soluta similique recusandae voluptate reprehenderit, aspernatur repellat ab provident facere magnam sit unde, accusantium explicabo. Ducimus odit aliquid, minima!</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
  <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
</div>


Solution

  • You add <div class="header">. After header-top and header-bottom move into <div class="header">

    And add css; .header { height:190px;}

    If you using position:fixed insted position:sticky this could be useful.

    The problem will be solved.

    $(document).ready(function () {
    	$(window).scroll(function () {
        if ($(window).scrollTop() > 30) {
          $('.header-bottom').addClass('sticky');
        } else {
          $('.header-bottom').removeClass('sticky');
        }
      });
    });
    body {
      margin: 0;
    }
    .header {
      height:190px;
    }
    .header-top {
      line-height:30px;
      background: blue;
    }
    .header-bottom {
      line-height:160px;
      background: red;
      -webkit-transition: .5s;
      -moz-transition: .5s;
      -ms-transition: .5s;
      -o-transition: .5s;
      transition: .5s;
    }
    .sticky {
      position: fixed;
      line-height:80px;
      top:0;
      width: 100%;
    }
    
    .content {
      margin-top: 20px;
    }
    
    .content > div {
      margin-bottom: 100px;
    }
    
    .margin {
      margin-top:190px;
    }
    <script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
    <div class="header">
      <div class="header-top">Content</div>
      <div class="header-bottom">Content</div>
    </div>
    <div class="content">
      <div>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Tempora nobis, suscipit consequuntur! Neque modi libero praesentium rerum, pariatur, assumenda obcaecati laudantium officia iste excepturi, molestias quibusdam quae sed nihil laborum.</div>
      <div>Necessitatibus, omnis odit ipsam, repudiandae beatae minima! Voluptates molestias vitae fuga officiis, aperiam earum quas laboriosam cupiditate hic vero reiciendis, numquam corporis, assumenda rem iure expedita animi magnam perferendis delectus.</div>
      <div>Eum odit hic delectus vel facilis nisi cupiditate ad enim recusandae ex, commodi sunt ullam distinctio, architecto quam nulla cumque possimus nihil qui unde magni provident ratione obcaecati fuga. Beatae.</div>
      <div>Iusto repellendus dolore atque architecto consequatur magni nulla animi possimus reiciendis, soluta similique recusandae voluptate reprehenderit, aspernatur repellat ab provident facere magnam sit unde, accusantium explicabo. Ducimus odit aliquid, minima!</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
      <div>Et cum sapiente placeat quis. Aut nobis ea amet aliquid, voluptatibus laudantium, atque doloremque accusantium nulla iste tempore nemo. Totam non eos distinctio. Quaerat, dolorem, possimus. Dolores molestiae nam natus.</div>
    </div>