-
Notifications
You must be signed in to change notification settings - Fork 7
/
Copy pathpage-nav.js
41 lines (33 loc) · 1.05 KB
/
page-nav.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
PackeryDocs['page-nav'] = function( elem ) {
'use strict';
// only do on index page
if ( !document.body.classList.contains('index-page') ) {
return;
}
var pageNav = elem;
var wasAtTop = null;
// add initial class
var style = getComputedStyle( pageNav );
var navY = pageNav.offsetHeight / 2 + parseInt( style.top, 10 );
var what = document.querySelector('.what-is-packery');
var contentY = what.getBoundingClientRect().top + window.pageYOffset;
var scrollTimeout;
// debounce scroll
function onDebounceScroll() {
var isAtTop = window.pageYOffset + navY < contentY;
if ( ( isAtTop && wasAtTop === null ) || isAtTop != wasAtTop ) {
pageNav.classList[ isAtTop ? 'add' : 'remove' ]('is-at-top');
}
wasAtTop = isAtTop;
}
onDebounceScroll();
// only add scroll event if fixed
if ( style.position == 'fixed' ) {
window.addEventListener( 'scroll', function() {
if ( scrollTimeout ) {
clearTimeout( scrollTimeout );
}
scrollTimeout = setTimeout( onDebounceScroll, 100 );
});
}
};