имеется код показа уведомлений через n время, нужно чтобы время не сбрасывалось при обновлении страницы а хранилось в сессии

`var time = setTimeout(noti, 9000);
function noti() {
  document.getElementById('notifications').style.display = "flex";
  time = setTimeout(noti,9000);
}
function clock(){
/*код на кнопку "закрывает уведомление" - сбрасывает таймер и запускает время снова*/
    clearInterval(time);
    setTimeout(noti,9000);
}`

Ответы (1 шт):

Автор решения: CbIPoK2513

Я бы сделал так:

При когда пользователь закрывает уведомление, мы сохраняем в localStorage timestamp и я бы ещё сохранял через какое время показать повторно.
Выглядело бы это следующим образом:

//                         Разделитель, чтоб попроще ↴
localStorage.setItem('notifyTime', new Date().now()+':'+9000);

Далее, когда пользователь обновляет страницу, мы в начале получаем данные которые сохраняли делим через .split(), складываем их, и сверяем, если полученное число больше текущего timestamp - то можно показывать уведомление, ибо время прошло.
Если меньше, то мы вычитаем сохранённый timestamp от текущего и получим время сколько осталось до конца, с этим временем запускаем таймер, по истечению которого показываем уведомление снова.

let old = localStorage.getItem('notifyTime').split(':'),
    cur = new Date().now();

old = Number(old[0]) + Number(old[1]);

if(old > cur) {
  // Показываем уведомление
} else {
  setTimeout(function(){
    // Показываем уведомление
  }, cur-old);
}

После первого запуска советую запустить таймер, чтобы пользователю показало уведомление, если вдруг пользователь не надумает обновлять страницу.

→ Ссылка