Запустить событие на странице через 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, время: 00:56. |