updateNav()
let oldScrollY = window.scrollY
- const _downDelay = 15
- let downDelay = 0
- const _upDelay = 5
- let upDelay = _upDelay
- const navUp = () => nav.style.top = Math.min(parseInt(nav.style.top,10) + (oldScrollY - window.scrollY), 0) + 'px'
- const navDown = () => nav.style.top = Math.max(parseInt(nav.style.top,10) - (window.scrollY - oldScrollY), -nav.offsetHeight) + 'px'
- nav.style.top = 0 + 'px'
+ const _downDelay = 32
+ let downDelay = _downDelay
+ const _upDelay = 16
+ let upDelay = 0
+ nav.style.top = '0px'
+ let top = 0
const navUpdate = () => {
if (window.matchMedia("(orientation: portrait)").matches) {
if (window.scrollY < oldScrollY) /* up */ {
- if (upDelay-- <= 0)
+ if (top === 0)
downDelay = _downDelay
- navUp()
+ else if (upDelay-- <= 0) {
+ top = Math.min(top + (oldScrollY - window.scrollY), 0)
+ nav.style.top = top + 'px'
+ }
}
- else {
+ else if (window.scrollY > oldScrollY) /* down */{
+ if (downDelay-- <= 0) {
+ top = Math.max(top - (window.scrollY - oldScrollY), -nav.offsetHeight)
+ nav.style.top = top + 'px'
+ }
upDelay = _upDelay
- if(downDelay-- <= 0)
- navDown()
- else
- navUp()
}
- oldScrollY = window.scrollY
+ window.requestAnimationFrame(navUpdate)
}
- window.requestAnimationFrame(navUpdate)
+ else {
+ if (top != 0) {
+ top = 0
+ nav.style.top = '0px'
+ upDelay = _upDelay
+ downDelay = _downDelay
+ }
+ setTimeout(navUpdate, 1000)
+ }
+ oldScrollY = window.scrollY
}
navUpdate();
}