Как удалить localStorage через определенное время

100
09 октября 2021, 06:40

Есть функция которая показывает баннер, нужно сделать так что бы при клике по кнопке банер перестал показываться ровно один час. Делал путем записи в localStorage. Но почему то условия с временем не работают, вот сам код:

               function vspl(){
                      $('.vspl').css('display', 'flex');
                      $('.vspl-img2').css('display', 'flex');
                      $('.vspl-img2').animate({'left':'26%'},800);
                    }
                    $(document).ready(function() {
                        var ls2 = localStorage.getItem('ban');
                        var limit = 1 * 3600 * 1000;
                        if(localStorage.ban){
                        setTimeout(vspl, 333000);
                        }
                        else{
                        setTimeout(vspl, 3000);
                        }
                        $('.vspl-reset').click(function(){
                          $('.vspl').css('display', 'none');
                          var ls = localStorage.setItem('ban', +new Date());
                          var ls2 = localStorage.getItem('ban');
                          var ps = parseInt(ls2, 10);
                          if (ps === null) {
                            localStorage.setItem('ban', +new Date());
                          } 
                          else if(+new Date() - ps > limit){
                            localStorage.clear();
                            localStorage.setItem('ban', +new Date());
                            console.log("ready");
                        }
                        });
                        $('.vspl').click(function(){
                          $('.vspl').css('display', 'none');
                          var ls = localStorage.setItem('ban', +new Date());
                          var ls2 = localStorage.getItem('ban');
                          var ps = parseInt(ls2, 10);
                          if (ps === null) {
                            localStorage.setItem('ban', +new Date());
                          } 
                          else if(+new Date() - ps > limit){
                            localStorage.clear();
                            localStorage.setItem('ban', +new Date());
                            console.log("ready");
                        }
                    })
                    });

То-есть условие else if(+new Date() - ls > limit) - не срабатывает.

Answer 1
$(document).ready(() => {
  const $banner = $('.vspl');
  const blockTime = localStorage.getItem('blockTime');
  if (blockTime !== null) {
    // Сверяем время блокировки с текущим временем
    if (+new Date() >= parseInt(blockTime)) {
      // Если время блокировки вышло, то очищаем localStorage
      localStorage.removeItem('blockTime');
    } else {
      // Иначе скрываем элемент
      $banner.hide();
    }
  }
  $banner.click(() => {
    // Скрываем элемент
    $banner.hide();
    // Устанавливаем время блокировки (текущее время + 1 час)
    localStorage.setItem('blockTime', +new Date() + (3600 * 1000));
  }); 
});
Answer 2

Что может означать этот код?

    var ls = localStorage.setItem('ban', +new Date());
    if (ls === null) {

... и чему здесь равно ls?

https://developer.mozilla.org/en-US/docs/Web/API/Storage/setItem

READ ALSO
Как обнулить setInterval? [дубликат]

Как обнулить setInterval? [дубликат]

Добрый день есть такой код

84
Почему выводится первый элемент в цикле

Почему выводится первый элемент в цикле

Здравствуйне подскажете, почему выводится первый элемент цикла как undefined

71
js, как в строке в каждом слове сделать первую букву в верхний регистр?

js, как в строке в каждом слове сделать первую букву в верхний регистр?

как в строке в каждом слове сделать первую букву в верхний регистр ? Точнее как сделать это регуляркой ?

72
Uncaught ReferenceError: changeImportant is not defined

Uncaught ReferenceError: changeImportant is not defined

Я делаю простую todo программу с помощью vuejs, при запуске программа выдаёт ошибку: Todo

127