Задать вопрос
@focusss

Как вызвать функцию через промежуток времени?

Есть код, если есть кука, то баннер не открывается, если её нет, то баннер открывается. Мне теперь нужно эту функцию вызывать через 90 секунд в общей сложности, не зависимо на какой я страницы нахожусь.

То есть, если я зашёл на главную и там пробыл 20 секунд, а затем перешёл ещё на одну страницу и там провёл 70 секунд, то вызывать функцию.

Можете подсказать порядок действий, а то я загнался. Гугл тоже не помог.

let popupoverlay = document.querySelector('.popup-ero');
    let popupoblock = document.querySelector('.popup-block');
    let popupclose = document.querySelector('.popup-close');
    // let datecookie = new Date(Date.now() + 86400e3 * 10); 10 дней
    let datecookie = new Date(Date.now() + 60000); //60 секунд
    datecookie = datecookie.toUTCString();

    

    function check_cookie_name(name) 
    {
        let match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
      if (match) {
        console.log(match[2]);
        console.log('есть кука, не открываем баннер');
      }
      else{
        //куки нет, открываем баннер навешивая классы и записываем куку на 10 дней.
        popupoverlay.classList.add('active');
        popupoblock.classList.add('active');
        document.cookie = "visit2=1; expires=" + datecookie;
      }
   }

   // Вот эту функцию нужно вызывать

    check_cookie_name('visit2');

    // Вот эту функцию нужно вызывать

У меня в планах так:

1. При заходе на сайт создаю куку с нынешним временем.
2. Потом создаю функцию.
3. Внутри функцию SetInterval каждые 3 секунды, где происходит сравнение. Если нынешние время больше заданной куки на 90 секунд, то дальше в if() {вывод функции}

Верно? Пытался, но запутался.
  • Вопрос задан
  • 593 просмотра
Подписаться 2 Простой 7 комментариев
Решения вопроса 1
@StiflerProger
// эту функцию запускать при открытии страницы
function init() {
  const timeToBanner = 20; // время в секундах до показа баннера
  const cookieName = 'time-to-banner';

  // сразу проверяем текущую куку
  if (!getCookie(cookieName)) setCookie(cookieName, Math.floor(Date.now() / 1000)); // Date.now даёт время в мс. переводим в секунды для удобства

  // теперь остаётся только проверить прошло ли `timeToBanner` времени с момента установки куки
  if (Number(getCookie(cookieName)) < Math.floor(Date.now() / 1000) - timeToBanner) {
    // прошло `timeToBanner` секунд. Можно показывать баннер
    console.log(`Прошло ${timeToBanner} секунд. Показывай баннер! =)`)

    setCookie(cookieName, null, -1); // удаляем куки с браузера
  } else {
    // до банера время не дошло
    setTimeout(init, 1000);
  }
  
}

function getCookie(name) {
  const value = `; ${document.cookie}`;
  const parts = value.split(`; ${name}=`);
  if (parts.length === 2) return parts.pop().split(';').shift();
}

function setCookie(name, value, days) {
  let expires = "";
  if (days) {
    let date = new Date();
    date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
    expires = "; expires=" + date.toUTCString();
  }
  document.cookie = name + "=" + (value || "") + expires + "; path=/";

  return value;
}


Нужно просто вызывать init()
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@ikotyax
Попробуй через setTimeout()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы