UNPKG

1.28 kBJavaScriptView Raw
1import { storageAvailable } from './dom-utils';
2const createScrollHistory = (win, applicationScrollKey = 'scrollPositions') => {
3 let scrollPositions = new Map();
4 const set = (key, value) => {
5 scrollPositions.set(key, value);
6 if (storageAvailable(win, 'sessionStorage')) {
7 const arrayData = [];
8 scrollPositions.forEach((value, key) => {
9 arrayData.push([key, value]);
10 });
11 win.sessionStorage.setItem('scrollPositions', JSON.stringify(arrayData));
12 }
13 };
14 const get = (key) => {
15 return scrollPositions.get(key);
16 };
17 const has = (key) => {
18 return scrollPositions.has(key);
19 };
20 const capture = (key) => {
21 set(key, [win.scrollX, win.scrollY]);
22 };
23 if (storageAvailable(win, 'sessionStorage')) {
24 const scrollData = win.sessionStorage.getItem(applicationScrollKey);
25 scrollPositions = scrollData ?
26 new Map(JSON.parse(scrollData)) :
27 scrollPositions;
28 }
29 if ('scrollRestoration' in win.history) {
30 history.scrollRestoration = 'manual';
31 }
32 return {
33 set,
34 get,
35 has,
36 capture
37 };
38};
39export default createScrollHistory;