scroll-stash
Version:
A JavaScript plugin to help preserve an element's scroll position.
34 lines (32 loc) • 1.04 kB
JavaScript
export const stateSave = (settings) => {
const state = {};
const scrolls = document.querySelectorAll(`[data-${settings.dataScroll}]`);
scrolls.forEach((el) => {
const id = el.getAttribute(`data-${settings.dataScroll}`);
if (id) state[id] = el.scrollTop;
});
localStorage.setItem(settings.saveKey, JSON.stringify(state));
document.dispatchEvent(new CustomEvent(settings.customEventPrefix + 'saved', {
bubbles: true,
detail: { state: state }
}));
return state;
};
export const stateSet = (settings) => {
if (localStorage.getItem(settings.saveKey)) {
let state = JSON.parse(localStorage.getItem(settings.saveKey));
Object.keys(state).forEach((key) => {
const item = document.querySelector(
`[data-${settings.dataScroll}="${key}"]`
);
if (item) item.scrollTop = state[key];
});
document.dispatchEvent(new CustomEvent(settings.customEventPrefix + 'applied', {
bubbles: true,
detail: { state: state }
}));
return state;
} else {
return {};
}
};