smooth-scroll-into-view-if-needed v1.0.0-alpha.f7841b3e
This is a ponyfill for smooth scrolling scroll-into-view-if-needed.
Demo
Install
yarn add smooth-scroll-into-view-if-neededUsage
import scrollIntoView from 'smooth-scroll-into-view-if-needed'
const node = document.getElementById('hero')
// If all you want is for all your users to have stuff smooth scroll into view
scrollIntoView(node, { behavior: 'smooth' })
// combine it with any of the other options
scrollIntoView(node, {
behavior: 'smooth',
scrollMode: 'if-needed',
block: 'nearest',
inline: 'nearest',
})
// It returns a promise that is resolved when the animation is finished
const sequence = async () => {
const slide = document.getElementById('slide-3')
// First smooth scroll to hero
await scrollIntoView(node, { behavior: 'smooth' })
// Then we scroll to a slide in a slideshow
return scrollIntoView(slide, { behavior: 'smooth' })
}Custom scrolling transition
If the default smooth scrolling ponyfill isn't the duration or easing you want, you can provide your own scrolling logic by giving behavior a callback.
import scrollIntoView from 'smooth-scroll-into-view-if-needed'
const node = document.getElementById('hero')
scrollIntoView(node, {
// Your scroll actions will always be an array, even if there is nothing to scroll
behavior: scrollActions =>
// list is sorted from innermost (closest parent to your target) to outermost (often the document.body or viewport)
scrollActions.forEach(([el, scrollTop, scrollLeft]) => {
// implement the scroll anyway you want
el.scrollTop = scrollTop
el.scrollLeft = scrollLeft
// If you need the relative scroll coordinates, for things like window.scrollBy style logic, just do the math
const offsetTop = el.scrollTop - scrollTop
const offsetLeft = el.scrollLeft - scrollLeft
}),
// all the other options (scrollMode, block, inline) still work, so you don't need to reimplement them (unless you really really want to)
})More documentation will be added (hang in there)
2 years ago
2 years ago
3 years ago
4 years ago
5 years ago
5 years ago
5 years ago
5 years ago
6 years ago
6 years ago
6 years ago
6 years ago
6 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
7 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
8 years ago
