Відтворюйте нескінченно циклічне відео під час завантаження в HTML5


92

Я хочу розмістити відео на сторінці HTML5, яке почнеться відтворюватися при завантаженні сторінки, а після завершення повернеться до початку без перерви. Відео також НЕ повинно мати жодних елементів керування, пов’язаних із ним, або бути сумісним із усіма „сучасними” браузерами, або мати можливість поліфілу.

Раніше я б робив це за допомогою Flashі FLVPlayback, але волів би триматися подалі від Flashсфери HTML5. Я думаю, що я міг би використати javascript setTimeoutдля створення плавного циклу, але що слід використовувати для вбудовування самого відео? Чи є там щось, що транслюватиме відео так, як FLVPlaybackце робить?

Відповіді:


156

Атрибут циклу повинен це робити:

<video width="320" height="240" autoplay loop>
  <source src="movie.mp4" type="video/mp4" />
  <source src="movie.ogg" type="video/ogg" />
  Your browser does not support the video tag.
</video>

Якщо у вас виникають проблеми з атрибутом циклу (як це було раніше), прослухайте videoEndподію та викликайте play()метод, коли він спрацює.

Примітка 1. Я не впевнений у поведінці iPad / iPhone від Apple, оскільки вони мають певні обмеження autoplay.

Примітка2: loop="true"і autoplay="autoplay"застаріли


1
Дійсно, хороша порада, сер. Я закінчив, використовуючи javascriptдля прослуховування videoEndподії, і повернення до початку, оскільки з того, що я можу сказати, loopатрибут підтримується не всіма браузерами. Для пристроїв iOS вони autoplayжодним чином не підтримують форму чи форму iOS 5, тому я щойно використав резервне зображення для мобільних пристроїв. Знову дякую.
stefmikhail

10
використання <video loop = "true"> є недійсним w3.org/TR/html-markup/video.html - використовуйте або <video loop = "loop">, або просто <video loop> - це правило діє майже для ВСІХ тегів HTML5 (або просто tagname, або tagname = "tagname" для XHTML5)

@vaxquis дякуємо за оновлення, Ви можете редагувати зміни API в наступний раз!
longi

5
Не біда, приятелю, завжди радий допомогти. Тим не менше, я б не змішував атрибути типу XHTML 'autoplay = "autoplay"' з HTML-циклом 'loop' - я б хотів використовувати або <video ... autoplay loop>, аналізувати як HTML5 або <video .. autoplay = "autoplay" loop = "loop">, аналізується як HTML5 або XHTML5. змішування стилів робить розмітку, яка як і раніше недійсна як XHTML, але надто багатослівна для HTML.

1
Як правило, autoplayу Safari працює лише якщо ви також використовуєте muted: webkit.org/blog/7734/auto-play-policy-changes-for-macos
andreyrd

38

Станом на квітень 2018 року, Chrome (поряд з кількома іншими основними браузерами) в даний час вимагають в mutedатрибут теж.

Тому вам слід використовувати

<video width="320" height="240" autoplay loop muted>
  <source src="movie.mp4" type="video/mp4" />
</video>

14

Для iPhone це працює, якщо ви додаєте також playsinline так:

<video width="320" height="240" autoplay loop muted playsinline>
  <source src="movie.mp4" type="video/mp4" />
</video>

Реквізит для JSX:autoPlay loop muted playsInline
Помбер

2

Це можна зробити двома способами:

1) Використання loopатрибута у відеоелементі (згадане у першій відповіді):

2) і ви можете використовувати endedмедіа-подію:

window.addEventListener('load', function(){
    var newVideo = document.getElementById('videoElementId');
    newVideo.addEventListener('ended', function() {
        this.currentTime = 0;
        this.play();
    }, false);

    newVideo.play();

});
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.