Показать сообщение отдельно
  #4 (permalink)  
Старый 02.12.2022, 15:02
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Какой то такой скрипт вставляется на каждую страницу
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);
});
Ответить с цитированием