9 lines
3.0 KiB
JavaScript
Executable File
9 lines
3.0 KiB
JavaScript
Executable File
var w=window,d=document,e=d.documentElement,g=d.getElementsByTagName('body')[0],window_width=w.innerWidth||e.clientWidth||g.clientWidth,window_height=w.innerHeight||e.clientHeight||g.clientHeight;var navbar_toggle=document.querySelector('.navbar-toggle');var navbar=document.querySelector('.navbar-wrapper');var navbar_items=navbar.querySelector('.nav');var scroll=0.0;var navbarHeight=navbar.offsetHeight;const OFFSET_TOP=30.0;window.addEventListener('scroll',function(){scroll=window.pageYOffset||document.documentElement.scrollTop||document.body.scrollTop||0;toggle_nav_style()});window.addEventListener('resize',function(){window_width=w.innerWidth||e.clientWidth||g.clientWidth;window_height=w.innerHeight||e.clientHeight||g.clientHeight;toggle_nav_style()});toggle_nav_style(!0);window.dispatchEvent(new Event('scroll'));window.dispatchEvent(new Event('resize'));function toggle_nav_style(force){if(scroll>=OFFSET_TOP||window_width<1024){nav_alt(force)}else{nav_normal(force)}}
|
|
function nav_normal(force){if(!navbar.classList.contains('bg-white')&&!force)return!1;navbar.classList.remove('bg-white');navbar.classList.remove('shadow-md')}
|
|
function nav_alt(force){if(navbar.classList.contains('bg-white')&&!force)return!1;navbar.classList.add('bg-white');navbar.classList.add('shadow-md')}
|
|
function scrollIt(destination,duration=200,easing='linear',callback){const easings={linear(t){return t},easeInQuad(t){return t*t},easeOutQuad(t){return t*(2-t)},easeInOutQuad(t){return t<0.5?2*t*t:-1+(4-2*t)*t},easeInCubic(t){return t*t*t},easeOutCubic(t){return(--t)*t*t+1},easeInOutCubic(t){return t<0.5?4*t*t*t:(t-1)*(2*t-2)*(2*t-2)+1},easeInQuart(t){return t*t*t*t},easeOutQuart(t){return 1-(--t)*t*t*t},easeInOutQuart(t){return t<0.5?8*t*t*t*t:1-8*(--t)*t*t*t},easeInQuint(t){return t*t*t*t*t},easeOutQuint(t){return 1+(--t)*t*t*t*t},easeInOutQuint(t){return t<0.5?16*t*t*t*t*t:1+16*(--t)*t*t*t*t}};const start=window.pageYOffset;const startTime='now' in window.performance?performance.now():new Date().getTime();const documentHeight=Math.max(document.body.scrollHeight,document.body.offsetHeight,document.documentElement.clientHeight,document.documentElement.scrollHeight,document.documentElement.offsetHeight);const windowHeight=window.innerHeight||document.documentElement.clientHeight||document.getElementsByTagName('body')[0].clientHeight;const destinationOffset=typeof destination==='number'?destination:destination.offsetTop-navbarHeight;const destinationOffsetToScroll=Math.round(documentHeight-destinationOffset<windowHeight?documentHeight-windowHeight:destinationOffset);if('requestAnimationFrame' in window===!1){window.scrollTo(0,destinationOffsetToScroll);if(callback){callback()}
|
|
return}
|
|
function scroll(){const now='now' in window.performance?performance.now():new Date().getTime();const time=Math.min(1,((now-startTime)/duration));const timeFunction=easings[easing](time);window.scrollTo(0,Math.ceil((timeFunction*(destinationOffsetToScroll-start))+start));if(window.pageYOffset===destinationOffsetToScroll){if(callback){callback()}
|
|
return}
|
|
requestAnimationFrame(scroll)}
|
|
scroll()} |