Skip to content

Instantly share code, notes, and snippets.

@MikeDigitize
Last active November 21, 2015 00:50
Show Gist options
  • Save MikeDigitize/4c7dc5576cfb32243cf9 to your computer and use it in GitHub Desktop.
Save MikeDigitize/4c7dc5576cfb32243cf9 to your computer and use it in GitHub Desktop.
export function scrollToElement(scrollAmount = 20) {
let findPos = (el, elPos = 0) => {
if (el.offsetParent) {
do {
elPos += el.offsetTop;
} while (el = el.offsetParent);
}
return elPos;
};
let scrollUp = (yPos, yStop) => {
let scroll = () => {
yPos -=scrollAmount;
window.scrollTo(0, yPos);
};
let timer = setInterval(() => {
if(scrollAmount > 0 && yPos <= yStop || scrollAmount < 0 && yPos >= yStop) {
clearInterval(timer);
}
else {
scroll();
}
}, 5);
};
return selector => {
let elementPos = findPos(document.querySelector(selector));
let scrollPos = window.pageYOffset;
scrollAmount = elementPos > scrollPos ? -Math.abs(scrollAmount) : +Math.abs(scrollAmount);
scrollUp(scrollPos, elementPos);
};
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment