sortarage
@sortarage
Я тучка-тучка-тучка, я вовсе не медведь

Регулярная проверка значения в LocalStorage?

Преамбула: есть код, представленный глубокоуважаемым товарищем Сергей Мельников , который позволяет отслеживать событие происходящее через определенный период времени (в данной ситуации через 2 минуты), вне зависимости от перемещения посетителя по страницам сайта.

Зачем это нужно: для отслеживание целей в Яндекс.Метрике по времени пребывания на сайте.

Суть: код срабатывает каждый раз при заходе на какую-либо страницу, и если к тому времени 2 минуты уже прошло - срабатывает событие, все ок. Но, если пользователь уйдет со страницы не переходя на новую - событие не сработает.

Что нужно: хочу сделать так, чтобы скрипт проверял условия запуска события каждую секунду, например через setInterval, буду благодарен за совет или вариант решения.

Со своей стороны пытался делать функцию с setInterval после else (и в разных других местах), выполняя ее каждую секунду, но не работает, и я даже подозреваю почему.

$(function(){
    checkTime(function(){
        alert('2 minutes')
    });
});

function checkTime(callback){
    var time = 120; //время, в секундах
    if ( localStorage ) {        
        if (localStorage.userEnter == "end") return;
        if (!localStorage.userEnter) localStorage.userEnter = new Date().getTime();
        else if ((new Date().getTime() - localStorage.userEnter) > time * 1000 ) {
            callback && callback();
            localStorage.userEnter = "end";
        }
    }    
}


Буду благодарен за помощь.
  • Вопрос задан
  • 3565 просмотров
Решения вопроса 1
Anonym
@Anonym
Программирую немного )
Попробуйте так:
$(function() {
    var time = 20; // Time in seconds
    var callback = function() {
        alert(time + ' seconds');
    };
    (function checkTime() {
        if (!localStorage) return;
        localStorage.userEnter = localStorage.userEnter || new Date().getTime();
        if ((new Date().getTime() - localStorage.userEnter) >= time * 1000) {
            localStorage.removeItem('userEnter');
            callback();
            return;
        }
        setTimeout(checkTime, 5000);
    })();
});
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
mlnkv
@mlnkv
JavaScript Developer
$(function() {

	check(function(){
		alert("Done");
	}, 10);
    
});

function check(callback, seconds){	
	var LS = localStorage;
	if (!LS || LS.enter == "done") return;
	LS.enter = LS.enter || new Date().getTime();
	if ((new Date().getTime() - LS.enter) >= period * 1000) (LS.enter = "done") && callback();
	else setTimeout(check, 5000, callback, seconds);
}


где то так )
Ответ написан
mlnkv
@mlnkv
JavaScript Developer
а еще так можно:

$(function() {

	check("first_event", function(){
		alert("First Event Done");
	}, 10);

	check("second_event", function(){
		alert("Second Event Done");
	}, 20);

	check("thirthd_event",  function(){
		alert("Thirthd Event Done");
	}, 40);
    
});

function check(key, callback, seconds){	
	var LS = localStorage;
	if (!LS || LS["check_"+key] == "done") return;
	LS["check_"+key] = LS["check_"+key] || new Date().getTime();
	if ((new Date().getTime() - LS["check_"+key]) >= seconds * 1000) (LS["check_"+key] = "done") && callback();
	else setTimeout(check, 5000, key, callback, seconds);
}
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы