Skip to content

Instantly share code, notes, and snippets.

@imyelo
Created December 29, 2016 07:12
Show Gist options
  • Save imyelo/6907454ebaf7563505ff2e8343d8253c to your computer and use it in GitHub Desktop.
Save imyelo/6907454ebaf7563505ff2e8343d8253c to your computer and use it in GitHub Desktop.
function focus (container = document.body) {
let focused = void 0
let originScrollTop = void 0
function focusin (e) {
focused = e.target
originScrollTop = container.originScrollTop
}
function focusout (e) {
focused = void 0
}
function resize (e) {
if (focused) {
container.scrollTop = focused.offsetTop - ((container.clientHeight / 2) - (focused.clientHeight / 2))
return
}
if (typeof originScrollTop !== 'undefined') {
container.scrollTop = originScrollTop
originScrollTop = void 0
return
}
}
container.addEventListener('focusin', focusin)
container.addEventListener('focusout', focusout)
window.addEventListener('resize', resize)
return function release () {
container.removeEventListener('focusin', focusin)
container.removeEventListener('focusout', focusout)
window.removeEventListener('resize', resize)
}
}
export default focus
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment