имеется код показа уведомлений через 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 шт):
Я бы сделал так:
При когда пользователь закрывает уведомление, мы сохраняем в 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);
}
После первого запуска советую запустить таймер, чтобы пользователю показало уведомление, если вдруг пользователь не надумает обновлять страницу.