Sticky One Page Scroll Navigation With jQuery And CSS3
| File Size: | 2.97 KB |
|---|---|
| Views Total: | 15280 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Makes use of jQuery, CSS3 animations and flexbox model to create a sticky top navigation for your one page scroll websites, with support for scrollspy and smooth scroll.
How to use it:
1. Add sliding content to your one page scroll website as this:
<main class="spa-main">
<section class="spa-slide" id="tab-1">
<h1>Section 1</h1>
<h3>This is section 1</h3>
</section>
<section class="spa-slide" id="tab-2">
<h1>Section 2</h1>
<h3>This is section 2</h3>
</section>
<section class="spa-slide" id="tab-3">
<h1>Section 3</h1>
<h3>This is section 3</h3>
</section>
...
</main>
2. Create a navigation for the sliding content.
<section class="sticky-nav-tabs"> <h1>Sticky Navigation</h1> <div class="sticky-nav-tabs-container"> <a class="sticky-nav-tab" href="#tab-1">Section 1</a> <a class="sticky-nav-tab" href="#tab-2">Section 2</a> <a class="sticky-nav-tab" href="#tab-3">Section 3</a> <span class="sticky-nav-tab-slider"></span> </div> </section>
3. The required CSS/CSS3 styles for the sticky top navigation.
.sticky-nav-tabs, .spa-slide {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: vertical;
-webkit-box-direction: normal;
-ms-flex-direction: column;
flex-direction: column;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
height: 100vh;
position: relative;
background: #eee;
text-align: center;
padding: 0 2em;
}
.sticky-nav-tabs h1, .spa-slide h1 {
font-size: 2rem;
margin: 0;
letter-spacing: 1rem;
}
.sticky-nav-tabs h3, .spa-slide h3 {
font-size: 1rem;
letter-spacing: 0.3rem;
opacity: 0.6;
}
.sticky-nav-tabs-container {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-orient: horizontal;
-webkit-box-direction: normal;
-ms-flex-direction: row;
flex-direction: row;
position: absolute;
bottom: 0;
width: 100%;
height: 75px;
box-shadow: 0 0 20px rgba(0, 0, 0, 0.1);
background: #fff;
z-index: 1;
-webkit-transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
}
.sticky-nav-tabs-container--top-first {
position: fixed;
top: 75px;
-webkit-transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
transition: all 0.3s cubic-bezier(0.19, 1, 0.22, 1);
}
.sticky-nav-tabs-container--top-second {
position: fixed;
top: 0;
}
.sticky-nav-tab {
display: -webkit-box;
display: -ms-flexbox;
display: flex;
-webkit-box-pack: center;
-ms-flex-pack: center;
justify-content: center;
-webkit-box-align: center;
-ms-flex-align: center;
align-items: center;
-webkit-box-flex: 1;
-ms-flex: 1;
flex: 1;
color: #000;
letter-spacing: 0.1rem;
-webkit-transition: all 0.5s ease;
transition: all 0.5s ease;
font-size: 0.8rem;
}
.sticky-nav-tab:hover {
color: white;
background: rgba(102, 177, 241, 0.8);
-webkit-transition: all 0.5s ease;
transition: all 0.5s ease;
}
.sticky-nav-tab-slider {
position: absolute;
bottom: 0;
width: 0;
height: 6px;
background: #66B1F1;
-webkit-transition: left 0.3s ease;
transition: left 0.3s ease;
}
4. Load the needed jQuery JavaScript library at the end of the document.
<script src="//code.jquery.com/jquery-3.1.1.min.js"></script>
5. The core JavaScript (jQuery script) to active the sticky top navigation.
class StickyNavigation {
constructor() {
this.currentId = null;
this.currentTab = null;
this.tabContainerHeight = 70;
this.lastScroll = 0;
let self = this;
$('.sticky-nav-tab').click(function() {
self.onTabClick(event, $(this));
});
$(window).scroll(() => { this.onScroll(); });
$(window).resize(() => { this.onResize(); });
}
onTabClick(event, element) {
event.preventDefault();
let scrollTop = $(element.attr('href')).offset().top - this.tabContainerHeight + 1;
$('html, body').animate({ scrollTop: scrollTop }, 600);
}
onScroll() {
this.checkHeaderPosition();
this.findCurrentTabSelector();
this.lastScroll = $(window).scrollTop();
}
onResize() {
if(this.currentId) {
this.setSliderCss();
}
}
checkHeaderPosition() {
const headerHeight = 75;
if($(window).scrollTop() > headerHeight) {
$('.spa-header').addClass('spa-header--scrolled');
} else {
$('.spa-header').removeClass('spa-header--scrolled');
}
let offset = ($('.sticky-nav-tabs').offset().top + $('.sticky-nav-tabs').height() - this.tabContainerHeight) - headerHeight;
if($(window).scrollTop() > this.lastScroll && $(window).scrollTop() > offset) {
$('.spa-header').addClass('spa-header--move-up');
$('.sticky-nav-tabs-container').removeClass('sticky-nav-tabs-container--top-first');
$('.sticky-nav-tabs-container').addClass('sticky-nav-tabs-container--top-second');
}
else if($(window).scrollTop() < this.lastScroll && $(window).scrollTop() > offset) {
$('.spa-header').removeClass('spa-header--move-up');
$('.sticky-nav-tabs-container').removeClass('sticky-nav-tabs-container--top-second');
$('.sticky-nav-tabs-container').addClass('sticky-nav-tabs-container--top-first');
}
else {
$('.spa-header').removeClass('spa-header--move-up');
$('.sticky-nav-tabs-container').removeClass('sticky-nav-tabs-container--top-first');
$('.sticky-nav-tabs-container').removeClass('sticky-nav-tabs-container--top-second');
}
}
findCurrentTabSelector(element) {
let newCurrentId;
let newCurrentTab;
let self = this;
$('.sticky-nav-tab').each(function() {
let id = $(this).attr('href');
let offsetTop = $(id).offset().top - self.tabContainerHeight;
let offsetBottom = $(id).offset().top + $(id).height() - self.tabContainerHeight;
if($(window).scrollTop() > offsetTop && $(window).scrollTop() < offsetBottom) {
newCurrentId = id;
newCurrentTab = $(this);
}
});
if(this.currentId != newCurrentId || this.currentId === null) {
this.currentId = newCurrentId;
this.currentTab = newCurrentTab;
this.setSliderCss();
}
}
setSliderCss() {
let width = 0;
let left = 0;
if(this.currentTab) {
width = this.currentTab.css('width');
left = this.currentTab.offset().left;
}
$('.sticky-nav-tab-slider').css('width', width);
$('.sticky-nav-tab-slider').css('left', left);
}
}
new StickyNavigation();
This awesome jQuery plugin is developed by ettrics. For more Advanced Usages, please check the demo page or visit the official website.











