简体   繁体   中英

Smooth scroll header with fixed position

How to create smooth scroll when I change the position to fixed. I try to add the animation but it does not work. Better use jquery animation();

 $(window).scroll(function() { var sticky = $('.mobile-menu'), scroll = $(window).scrollTop(); if (scroll >= 40) sticky.addClass('fixed'); else sticky.removeClass('fixed'); }); 
 header { padding: 20px 40px; background: gray; width: 100%; -webkit-transition: position 10s; -moz-transition: position 10s; -ms-transition: position 10s; -o-transition: position 10s; transition: position 10s; } section { height: 150vh; } .fixed { position: fixed; top: 0; left: 0; width: 100%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <header class="mobile-menu">Text here</header> <section>Sugar plum muffin cookie pastry oat cake icing candy canes chocolate. Gummi bears chupa chups fruitcake dessert jelly. Muffin cookie ice cream soufflé pastry lollipop gingerbread sweet. Unerdwear.com bonbon candy marzipan bonbon gummies chocolate cake gummi bears powder. Unerdwear.com tart halvah chocolate cake dragée liquorice. Sugar plum chocolate bar pastry liquorice dragée jelly powder. Jelly tootsie roll applicake caramels. Marzipan candy tootsie roll donut. Gummies ice cream macaroon applicake.</section> 

You can use @keyframes to add some transition effects to the scroll.

 $(window).scroll(function() { var sticky = $('.mobile-menu'), scroll = $(window).scrollTop(); if (scroll >= 40) { sticky.addClass('fixed'); } else { sticky.removeClass('fixed'); } }); 
 header { padding: 20px 40px; background: gray; width: 100%; -webkit-transition: all 0.5s ease; -moz-transition: position 10s; -ms-transition: position 10s; -o-transition: position 10s; transition: all 0.5s ease; } section { height: 150vh; } .fixed { position: fixed; top: 0; left: 0; animation: smoothScroll 1s forwards; } @keyframes smoothScroll { 0% { transform: translateY(-40px); } 100% { transform: translateY(0px); } } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <header class="mobile-menu">Text here</header> <section>Sugar plum muffin cookie pastry oat cake icing candy canes chocolate. Gummi bears chupa chups fruitcake dessert jelly. Muffin cookie ice cream soufflé pastry lollipop gingerbread sweet. Unerdwear.com bonbon candy marzipan bonbon gummies chocolate cake gummi bears powder. Unerdwear.com tart halvah chocolate cake dragée liquorice. Sugar plum chocolate bar pastry liquorice dragée jelly powder. Jelly tootsie roll applicake caramels. Marzipan candy tootsie roll donut. Gummies ice cream macaroon applicake.</section> 

EDITED based on comment.

If you change position to fixed while scrolling, it will generate undesired jump behavior.

Your best bet would be to prevent positioning while scrolling, setting fixed after 40px or from the start is pretty much the same, so I'd suggest you remove this part on your jQuery, and make your header fixed from the start:

//if (scroll >= 40) sticky.addClass('fixed');
//else sticky.removeClass('fixed');

Snippet below:

 $(window).scroll(function() { var sticky = $('.mobile-menu'), scroll = $(window).scrollTop(); }); 
 body { position: relative; } header { padding: 20px 40px; background: gray; width: 100%; -webkit-transition: position 10s; -moz-transition: position 10s; -ms-transition: position 10s; -o-transition: position 10s; transition: position 10s; } section { height: 150vh; position: relative; top: 60px; } .fixed { position: fixed; z-index: 1; top: 0; left: 0; right: 0; width: 100%; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <header class="mobile-menu fixed">Text here</header> <section>Sugar plum muffin cookie pastry oat cake icing candy canes chocolate. Gummi bears chupa chups fruitcake dessert jelly. Muffin cookie ice cream soufflé pastry lollipop gingerbread sweet. Unerdwear.com bonbon candy marzipan bonbon gummies chocolate cake gummi bears powder. Unerdwear.com tart halvah chocolate cake dragée liquorice. Sugar plum chocolate bar pastry liquorice dragée jelly powder. Jelly tootsie roll applicake caramels. Marzipan candy tootsie roll donut. Gummies ice cream macaroon applicake.</section> 

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM