Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите улучшить таймер. Работает только когда пользователь на странице (https://javascript.ru/forum/events/75843-pomogite-uluchshit-tajjmer-rabotaet-tolko-kogda-polzovatel-na-stranice.html)

crystaltrumpet 11.11.2018 14:19

Помогите улучшить таймер. Работает только когда пользователь на странице
 
Прошу помощи в добавлении функции проверки: на странице ли пользователь или нет.
если нет то таймер стоит и ждет когда пользователь зайдет. Сам таймер:
function startClock() {
        if (vtime == stattime) {
            document.getElementById('blockwait').style.display = 'none';
            document.getElementById('blocktimer').style.display = '';
        }
        if (vtime >= 0) {
            document.forms['frm'].clock.value = vtime;
            vtime --;
            tm = setTimeout("startClock(0)", 1000);
        } else {
            if (tm)
                clearTimeout(tm);

        }
    }

Нашел вот такой вариант с созданием переменной mya:
window.onfocus = function(){ mya = true; }   
window.onblur = function(){ mya = false; }

но как это реализовать в моем таймере у меня не выходит :-?

Плюс у меня еще есть php переменная $add_bonus = 1 или 0; Так вот нужно сделать что когда $add_bonus = 1 то таймер останавливается при переходе на другую вкладку, а когда на 0 то продолжает идти.

рони 11.11.2018 14:35

crystaltrumpet,
if (vtime >= 0 && mya )

window.onfocus = function(){ mya = true; startClock()}
window.onblur = function(){ mya = false; clearTimeout(tm);}

crystaltrumpet 11.11.2018 14:55

Я сделал так Вы сказали но видимо где то я ошибся. не хочет работать.:
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        window.onfocus = function(){ mya = true; startClock()}
        window.onblur = function(){ mya = false; clearTimeout(tm);}

    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}

но что то не работает

crystaltrumpet 11.11.2018 15:02

http://prntscr.com/lgy9cb

рони 11.11.2018 15:47

crystaltrumpet,
строки 11 и 12 уберите из функции

crystaltrumpet 11.11.2018 15:53

Так а если я их уберу - это же самые главные строки
как тогда отлеживать события будут?
Я убрал получилось вот так и ничего не работает:
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {

        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        
        

    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}

рони 11.11.2018 15:54

crystaltrumpet,
а добавить эти строки после скрипта?

crystaltrumpet 11.11.2018 15:59

Сделал вот так - результат не изменился:
function startClock() {
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }
    var mya = true;
    if (vtime >= 0 && mya ) {
        document.forms['frm'].clock.value = vtime;
        vtime --;
        tm = setTimeout("startClock(0)", 1000);
        

    } else {
        if (tm)
            clearTimeout(tm);
        nextstep(0, cnt);
    }
}
        window.onfocus = function(){ mya = true; startClock()}
        window.onblur = function(){ mya = false; clearTimeout(tm);}

рони 11.11.2018 16:00

crystaltrumpet,
var mya = true, tm;
function startClock() {
    clearTimeout(tm);
    if (vtime == stattime) {
        document.getElementById('blockwait').style.display = 'none';
        document.getElementById('blocktimer').style.display = '';
    }

    if (vtime > 0 && mya ) {
        vtime--;
        document.forms['frm'].clock.value = vtime;
        tm = setTimeout(startClock, 1000);
    }
}

 window.onfocus = function(){ mya = true; startClock()}
 window.onblur = function(){ mya = false;}

crystaltrumpet 11.11.2018 16:05

Не работает - когда я перехожу на соседнюю вкладку - таймер продолжает работать
Но когда я на странице кликаю вверху - время останавливается
когда внизу - начинает идти
http://prntscr.com/lgyrtj


Часовой пояс GMT +3, время: 16:52.