Видео не будет приостановлено с использованием Javascript

У меня есть проект, в котором есть видео, которое воспроизводится в цикле. Вот HTML-код для тега видео:

  <video playsinline autoplay muted loop id="myVid">
      <source src="River.mp4" type="video/mp4">
  </video>

Я хотел бы, чтобы видео было приостановлено после задержки, и я пытаюсь реализовать это с помощью JavaScript. Мой код JavaScript:

    function stopVideo() {

    var vid = document.getElementById('myVid');
    vid.pause();

    }

setTimeout(stopVideo, 900);

Это не работает. Есть идеи почему? Спасибо.

-------------------------------------------------- -------------РЕДАКТИРОВАТЬ------------------------------------ --------------------------

если это помогает, консоль ошибок дает мне сообщение:

TypeError: null is not an object (evaluating 'vid.pause')

3 ответа

Обновление на основе новой информации от OP:

null означает, что элемент не найден getElementById() указывает на то, что скрипт выполняется до сборки DOM (т. е. в теге head).

Просто запустите код скрипта следующим образом:

window.onload = function() {
  // code goes here
};

Или больше тега script внизу документа перед тегом закрытия тела.

Старый ответ -

Перед установкой тайм-аута убедитесь, что видео действительно воспроизводится. С небольшой задержкой в ​​900 мс (0,9 с) вы можете рисковать срабатыванием кода тайм-аута до начала воспроизведения видео.

Чтобы убедиться, что видео действительно воспроизводится, вы можете использовать такие события, как playing а также timeupdate, но в timeupdate скорее всего, не точен для этого сценария, поэтому одним из способов является запуск только при playing:

var vid = document.getElementById('myVid');
var reqId; // optional, prevents running more than one time

vid.addEventListener("playing", function() {
  if (!reqId) reqId = setTimeout(stopVideo.bind(this), 2000);
});

function stopVideo() {
  this.pause();
}
video {height:200px}
<video playsinline autoplay muted loop id="myVid">
  <source src="//media.w3.org/2010/05/sintel/trailer.mp4" type="video/mp4">
</video>

Работает нормально!

function stopVideo() {
  var vid = document.getElementById('myVid');
  vid.pause();
}
setTimeout(stopVideo, 5000);
<video playsinline autoplay muted loop id="myVid" width="400px" >
    <source src="http://mazwai.com/system/posts/videos/000/000/123/original/victor_ciurus--5d_mark_iii_magic_lantern_14_bits_raw_video.mp4" type="video/mp4">
</video>

может быть, просто увеличить таймер.

Я бы попробовал что-то вроде этого:

setTimeout(function () {stopVideo()}, 900);
Другие вопросы по тегам