Как остановить функцию после нажатия «ОК» в диалоговом окне подтверждения? - PullRequest
0 голосов
/ 10 апреля 2019

У меня есть функция JavaScript, включающая обнаружение мерцания, которая влияет на видео. Обычно, когда вы моргаете, видео, встроенное с Youtube, перестает воспроизводиться, и появляется диалоговое окно подтверждения, позволяющее вам продолжить просмотр видео или перезагрузить страницу. Как только я нажму «ОК», видео должно продолжиться, но я бы хотел, чтобы функция остановилась (или перестала работать камера), чтобы можно было смотреть видео до конца, даже если вы моргаете.

Я пытался поиграть с этой функцией, но не смог найти свою ошибку.

Вот вам основной код функции:

function blink() {
    _blinked = true;
    _total += 1;

    const now = new Date();
    const timeDiff = (now - _start) / 1000; //in s
    // get seconds
    const seconds = Math.round(timeDiff);
    if(confirm(`You lasted ${seconds} seconds without blinking! Click OK to
    keep playing or CANCEL to watch full video!`)){}
    else    window.location.replace("fullvideo.html");
    _start = new Date();

    if (_timeOut > -1) {
        clearTimeout(_timeOut);
    }

    _timeOut = setTimeout(resetBlink, 500);
}

function resetBlink() {
    _blinked = false;
}

let _initialized = false;

Как только я нажимаю «ОК», видео должно продолжаться, но я хотел бы, чтобы функция остановилась (или камера перестала работать), чтобы можно было смотреть видео до конца, даже если вы моргаете. Большое спасибо.

1 Ответ

1 голос
/ 10 апреля 2019

Самый простой способ - иметь глобальное логическое значение, которое переключается каждой функцией. Мы назовем это статус в этом случае:

var status = false;

function blink() {
    if (!status){
        status = true; // close function
        _blinked = true;
        _total += 1;

        const now = new Date();
        const timeDiff = (now - _start) / 1000; //in s
        // get seconds
        const seconds = Math.round(timeDiff);
        if(confirm(`You lasted ${seconds} seconds without blinking! Click OK to 
        keep playing or CANCEL to watch full video!`)){
        status = false; //open function to run again
        }
        else    window.location.replace("fullvideo.html");
        _start = new Date();

        if (_timeOut > -1) {
            clearTimeout(_timeOut);
        }

        _timeOut = setTimeout(resetBlink, 500);
    }
  }

Теперь ваша функция будет запускаться только один раз, затем, если вы нажмете «ОК» в сообщении, она сможет работать еще раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...