removeEventListener ("timeUpdate", myFunction) нестабилен во время воспроизведения видео - PullRequest
0 голосов
/ 11 мая 2019

Прослушиватель событий добавляется после начала воспроизведения моего видео.То есть

document.getElementById("myVideo").addEventListener("timeUpdate", myFunction);

, а затем, непосредственно перед тем, как заканчивается видео, я хочу, чтобы что-то произошло (возможно, затухание) вместе с последними несколькими секундами видео (или, для простоты, я просто собираюсьвместо этого напишите что-то вроде alert("goodbye");).

, и когда я использую этот фрагмент кода

 var myVideo = document.getElementById ("myVideo");
 function myFunction(){
   if(myVideo.currentTime >= (myVideo.duration-3) )
   {
     alert("this goodbye message is supposed to be displayed only once and exactly three seconds before the video ends");
     myVideo.removeEventListener("timeupdate", myFunction);
   }
  }

, он работает в Chrome, но работает нестабильно.Иногда это работает нормально, но в других случаях предупреждение продолжает появляться несколько раз, прежде чем прослушиватель событий фактически удаляется (что в моем случае плохо).В Firefox это еще хуже, так как срабатывает много разЯ знаю, что разные браузеры запускают событие timeupdate с очень разными интервалами.

Так что вы думаете?Должен ли я отказаться от пары addEventListener() removeEventListener() и использовать setInterval()clearInterval(), чтобы проверить, где находится точка воспроизведения, и делать вещи, когда придет время.Таким образом, вместо временных интервалов, зависящих от браузера, я мог установить свой собственный временной интервал для согласованности.Но кто-нибудь знает, есть ли надежный способ сделать это с timeUpdate?

1 Ответ

0 голосов
/ 11 мая 2019

Я использовал вместо этого таймер, и теперь он работает отлично.

var checkThePlayheadPositionTenTimesASecond = setInterval(myTimer, 100);
function myTimer()
      {
        if(myVideo.currentTime >= (myVideo.duration-3) )
           {
             alert("this video is going to end in three seconds");
             clearInterval(checkThePlayheadPositionTenTimesASecond);
           }
      }

Тем не менее, я собираюсь оставить этот пост активным на тот случай, если кто-нибудь скажет.

...