У меня есть функция 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;
Как только я нажму «ОК», видео должно продолжиться, но я бы хотел, чтобы функция остановилась (или камера перестала работать), чтобы иметь возможность смотреть видео до конца, даже если вы моргаете. Спасибо большое.
Самый простой способ - иметь глобальное логическое значение, которое переключается каждой функцией. В этом случае мы назовем его положение дел:
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);
}
}
Теперь ваша функция будет запускаться только один раз, а затем, если вы нажмете «ОК» в сообщении, она сможет запуститься еще раз.
@MarcoTiberio, пожалуйста, посмотрите измененный ответ
Большое спасибо за изучение этого, я действительно ценю это. На самом деле подтверждение — это обходной путь, который мне пришлось использовать. Когда вы нажмете «ОК» в диалоговом окне, вы сможете продолжить играть с функцией. Вместо этого при ОТМЕНЕ страница перезагружается. Вы имеете в виду, что я должен избавиться от _start = new Date();
и добавить туда var status = false;
?
@MarcoTiberio, нет, что вы хотите сделать, это if (confirm("Ok or Cancel")){ status = false; }
Это откроет функцию для повторного запуска, если нажать «ОК».
отлично, теперь понял! Извините, я не знал, что вы уже изменили код, который вы предоставили. Большое спасибо!
извините, что снова беспокою. Но можете ли вы найти что-нибудь в этой функции, что фактически задерживает ее запуск после загрузки страницы?
У меня нет, Запуск медленный?
Спасибо за ваш ответ @ m4dm0nk3y. По какой-то причине функция не работает, когда я применяю это. Я немного новичок во всем этом, поэтому я могу делать что-то не так. Может быть, вы можете взглянуть на эту скрипку, где вы можете проверить функцию полностью jsfiddle.net/m_tibo/kpe5hmr3.