2016-03-03 2 views
1

В настоящее время работает над страницей, содержащей видео, которое необходимо приостановить в определенных точках (например, в главах). Так что я сделал функцию, которая будет остановить видео, когда она попадает в следующий «маркер времени», который выглядит следующим образом:Функция Javascript не срабатывает при просмотре видео

function vidPause(nextMarker){ 
 
    var timeMarker = nextMarker; 
 

 
    if(videoPlayer.currentTime >= timeMarker) { 
 
    videoPlayer.pause(); 
 
    videoPlayer.removeEventListener('timeupdate', vidPause()); 
 
    } 
 
};

И я пытаюсь стрелять это так:

videoPlayer.addEventListener('timeupdate', vidPause(nextMarker));

Но это только кажется, что огонь, когда видео загружается. Ничего не происходит, когда воспроизводится видео (проверено с помощью console.log(videoPlayer.currentTime); внутри функции vidPause).

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

Заранее благодарим за любые предложения!

ответ

0

Функция вызывается один раз в строке addEventListener, но на самом деле она не передается как обратный вызов.

Попробуйте это:

function videoUpdate(e) { 
    vidPause(nextMarker, videoPlayer.currentTime;); // Now call your function 
} 

function vidPause(nextMarker, timeStamp){ 
    var timeMarker = nextMarker; 

    if (timeStamp >= timeMarker) { 
    videoPlayer.pause(); 
    videoPlayer.removeEventListener('timeupdate', videoUpdate); 
    } 
}; 

videoPlayer.addEventListener('timeupdate', videoUpdate); // Note no brackets, as it's passing a ref to the function rather than calling it 

Я не знаю, что сфера nextMarker есть, но вы должны быть в состоянии начать консольный регистрацию и узнать.

+0

Спасибо за ответ. Я попробовал, и он не работает, он приостанавливает видео через 1 секунду или около того, даже если nextMarker установлен на другое значение. Кажется, он не удаляет прослушиватель событий. Но я не понимаю цели timeStamp var, не могли бы вы объяснить это? Кроме того, область nextMarker является глобальной, любая функция может получить к ней доступ, поскольку она определена в верхней части моего общего сценария. – EatTheFood

+0

ОК, сделал пару изменений - 1. event.timeStamp - это не правильное свойство, чтобы получить текущее время воспроизведения видео. 2. Пробовал преобразовать определение видеообъявления, чтобы убедиться, что оно определено при создании замыкания для vidPause. Это может быть или не быть причиной проблемы, но это, вероятно, другой вопрос tbh –

Смежные вопросы