-
-
Save lionelB/288e5dd5747adbd0ab8afee4af592bd2 to your computer and use it in GitHub Desktop.
Detect and change the scroll position when a focused element is under a sticky element
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// sticky element | |
var stickyHeader = document.querySelector( '.intro-banner' ); | |
function handleFocus( e ){ | |
// don't try to change the scroll if the focused element is in the sticky element | |
if( stickyHeader.contains( e.target )){ | |
return; | |
} | |
// quick & dirty client height on each focus | |
// get the sticky element's height (can be done on mediaquery change instead of each time) | |
var headerHeight = stickyHeader.clientHeight; | |
// get the screen position of the focused element | |
var focusTop = e.target.offsetTop; | |
// get the current scroll | |
var scrollTop = document.documentElement.scrollTop || document.body.scrollTop; | |
// scroll when the focused element is under the sticky element | |
if( focusTop === scrollTop || ( focusTop > scrollTop && focusTop < (scrollTop + headerHeight) ) ){ | |
document.documentElement.scrollTop = document.body.scrollTop = focusTop - headerHeight; | |
} | |
} | |
document.body.addEventListener( 'focus', handleFocus, true ); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment