• Остановить таймер с помощью checknet js?

    StepanTur
    @StepanTur
    fullstack node js react native mobile developer
    function updateExamTimer() {
    
        var timeLeft = EXAM_TIME_LEFT - elapsedTime;
        elapsedTime += 1;
    
        var minutes = Math.floor(timeLeft / 60);
        var seconds = timeLeft % 60;
        var hours = Math.floor(minutes / 60);
        var minutes = minutes % 60;
    
        if (hours < 10) { hours = '0' + hours; }
        if (minutes < 10) { minutes = '0' + minutes; }
        if (seconds < 10) { seconds = '0' + seconds; }
    
    
        if (timeLeft <= 0) {
    
            alert('Sizning imtihon topshirish muddatingiz yakunlandi.');
    
            // If we're in ajax mode, submit via ajax - otherwise, redirect to the completion page
            if (jQuery('#exam-ui').length) {
                finishExam(false);
            } else {
                document.location.href = 'complete.php?id=' + EXAM_REQUEST_ID;
            }
    
        } else {
            jQuery('#exam-time-left').val(hours + ':' + minutes + ':' + seconds);
       if(navigator.onLine) {
        // Устройство в интернете
    setTimeout('updateExamTimer()', 1000);
    } else {
        // Устройство не подключено к интернету
    }
        }
    
    }
    Ответ написан
    1 комментарий
  • Остановить таймер с помощью checknet js?

    Athanor
    @Athanor
    Лайк + Решение: не жмись, нажми
    ваш таймер работает через рекурсивный setTimeout. Каждую секунду вызывается функция updateExamTimer, которая в конце выполнения планирует отложенный вызов себя же через 1 секунду.

    Особенность функции setTimeout заключается в том, что при вызове она возвращает timerId, который если успеть передать в clearTimeout, то таймер(на выполнение функции updateExamTimer) отменится.

    Следовательно, вам нужно изменить код так, чтоб при отключении интернета вызывался clearTimeout и в него передавался timerId, который вам нужно куда-то сохранять каждый раз при вызове setTimeout
    После включения интернета, вам потребуется снова вызвать setTimeout('updateExamTimer()', 1000);, чтоб запустить таймер

    Подробней

    НО так же у вас фигурирует загадочная переменная EXAM_TIME_LEFT, которая неизвестно откуда берется. Если это константа и она просто объявлена выше по коду, описанный мной вариант, скорее всего, будет работать, если она прилетает с сервера(и при обновлении страницы она меняется), то ничего работать не будет и отключать таймер придется на сервере в том числе.
    Ответ написан
    5 комментариев