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

У меня есть функция 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;

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

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
109
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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);
    }
  }

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

Спасибо за ваш ответ @ m4dm0nk3y. По какой-то причине функция не работает, когда я применяю это. Я немного новичок во всем этом, поэтому я могу делать что-то не так. Может быть, вы можете взглянуть на эту скрипку, где вы можете проверить функцию полностью jsfiddle.net/m_tibo/kpe5hmr3.

Marco Tiberio 10.04.2019 10:03

@MarcoTiberio, пожалуйста, посмотрите измененный ответ

KR34T1V 10.04.2019 10:10

Большое спасибо за изучение этого, я действительно ценю это. На самом деле подтверждение — это обходной путь, который мне пришлось использовать. Когда вы нажмете «ОК» в диалоговом окне, вы сможете продолжить играть с функцией. Вместо этого при ОТМЕНЕ страница перезагружается. Вы имеете в виду, что я должен избавиться от _start = new Date(); и добавить туда var status = false;?

Marco Tiberio 10.04.2019 10:17

@MarcoTiberio, нет, что вы хотите сделать, это if (confirm("Ok or Cancel")){ status = false; } Это откроет функцию для повторного запуска, если нажать «ОК».

KR34T1V 10.04.2019 10:22

отлично, теперь понял! Извините, я не знал, что вы уже изменили код, который вы предоставили. Большое спасибо!

Marco Tiberio 10.04.2019 10:26

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

Marco Tiberio 10.04.2019 19:21

У меня нет, Запуск медленный?

KR34T1V 11.04.2019 08:52

Другие вопросы по теме