Запустить событие на странице через X секунд
Всем привет. Мне необходимо после определенного времени, проведенного пользователем на сайте (например, 5 секунд), запускать событие "vasyaPupkin". Как можно это сделать?
Пример моего кода: if ( timer_var > 5) // запустить событие vasyaPupkin Но поскольку пользователь ничего не делает на странице, то триггера на выполнение кода никакого нет. А как его задать, чтобы он сработал? Пользователь может при этом перемещаться по сайту и тогда в timer_var записывается его общее время пребывания, и оно не обнуляется после перезагрузки страницы, поэтому setTimeout и setInterval, как я понимаю, не подойдут. Если поставить timer_var > 90, то событие должно сработать на сайте через полторы минуты, не важно на какой странице находится пользователь и что он при этом делает - сидит и ничего не делает, скроллит, смотрит видео и т.д. Спасибо |
В sessionStorage записываешь время прихода на первую страницу сайта
https://developer.mozilla.org/en-US/...sessionStorage На каждой странице должен работать таймер (каждую секунду) и проверяешь, если текущее время больше времени прихода на условно 90сек, то вызываешь событие. Но это придется делать на каждой странице. Единственное, надо предусмотреть, что пользователь может открыть другую страницу в новой вкладке. Поэтому надо останавливать таймеры на неактивных вкладках. А когда вкладка стала активной снова запускать. https://developer.mozilla.org/en-US/...tychange_event |
Я сохраняю начало сессии в cookie session-start (см. скрин) в формате Unix. Текущее время тоже могу извлечь да, с помощью Date.now()
Разница session-start - Date.now() / 1000 даст нам количество секунд с момента начала сессии? То есть у меня должно быть условие вида: function TimeEvent() { var Date.now(); var session-start; var topTime = (session-start - Date.now() / 1000); if (time_var > 5) // запустить событие vasyaPupkin } setTimeout(TimeEvent, topTime); Про активность вкладок узнал, это на данный момент не нужно учитывать. Просто если старт сессии начался, то фиксируем это время и от него X секунд: |
Какой то такой скрипт вставляется на каждую страницу
window.addEventListener('load', () => { const DEADLINE = 10 * 1000; // Если нет записи, пишем в sessionStorage if (!sessionStorage.getItem('timebeg')) sessionStorage.setItem('timebeg', Date.now() + ''); // Вызов события const timerevent = (d) => { alert('TIMEREVENT ' + d); }; // Функция таймера const timerfun = () => { const t0 = +sessionStorage.getItem('timebeg'); const t1 = Date.now(); const d = t1 - t0; if (d < DEADLINE) { timer = setTimeout(timerfun, 1000); } else { // время истекло // пишем запись wasevent, что бы не вызывать повторно sessionStorage.setItem('wasevent', 'true'); timerevent(d); } }; let timer; const stateChange = () => { // событие уже вызывалось if (sessionStorage.getItem('wasevent')) return; if (document.visibilityState === 'visible') { // страница стала видимой - запустить таймер timer = setTimeout(timerfun, 1000); } else { // страница стала не видимой - отключаем таймер clearTimeout(timer); } }; document.addEventListener('visibilitychange', stateChange); //запускаем таймер первый раз, если еще не сработал if (!sessionStorage.getItem('wasevent')) timer = setTimeout(timerfun, 1000); }); |
Часовой пояс GMT +3, время: 14:42. |