Skip to content

Instantly share code, notes, and snippets.

@capJavert
Last active January 23, 2019 15:51
Show Gist options
  • Save capJavert/7a8a0325953c5afdfecfd7b4d2f41478 to your computer and use it in GitHub Desktop.
Save capJavert/7a8a0325953c5afdfecfd7b4d2f41478 to your computer and use it in GitHub Desktop.
Wallpaper style banner sticky functionality. Respects header/footer margins.
/**
* Wallpaper style banner sticky functionality
* Respects header/footer margins
*
* [wallpaperStickyBanner banner element handle]
*/
var elementSelector = '#wallpaperStickyBanner'
var headerHeight = 140
var footerHeight = 315
function handleWallpaperScroll() {
if (!window.wallpaperStickyBanner) {
var wallpaperStickyBanner = document.querySelector(elementSelector)
if (!wallpaperStickyBanner) {
return
}
window.wallpaperStickyBanner = wallpaperStickyBanner
}
var iframeWindowDiff = window.innerHeight - window.wallpaperStickyBanner.height
var distanceFromFooter = document.documentElement.scrollHeight - window.innerHeight - window.pageYOffset
if (window.pageYOffset >= headerHeight && distanceFromFooter + (iframeWindowDiff > 0 ? iframeWindowDiff : 0) > footerHeight) {
window.wallpaperStickyBanner.style.position = 'fixed'
window.wallpaperStickyBanner.style.top = '0px'
} else {
if (distanceFromFooter + (iframeWindowDiff > 0 ? iframeWindowDiff : 0) <= footerHeight) {
window.wallpaperStickyBanner.style.position = 'absolute'
window.wallpaperStickyBanner.style.bottom = '450px'
window.wallpaperStickyBanner.style.top = 'auto'
} else {
window.wallpaperStickyBanner.style.top = '0px'
window.wallpaperStickyBanner.style.position = 'absolute'
}
}
}
handleWallpaperScroll()
window.addEventListener('scroll', handleWallpaperScroll)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment