Как сделать загрузку изображения при загрузке видео HTML5? - PullRequest
11 голосов
/ 01 февраля 2012

Поскольку видеопроигрывателю требуется время для загрузки видео в формате mp4, поддерживает ли HTML5 воспроизведение логотипа «загрузки» при загрузке видео?

enter image description here

Начиная с моего asp.net apps - это мобильная страница, для воспроизведения которой необходимо, чтобы пользователь щелкнул видео (android, iphone не поддерживает автопроигрывание).Поэтому я не могу сделать «загрузочный» логотип в качестве постера, иначе пользователь будет смущен этим.Я хочу отобразить логотип загрузки, когда пользователь нажимает кнопку воспроизведения на iPad.

спасибо

Джо

Ответы [ 5 ]

18 голосов
/ 28 июня 2014

Мне потребовалось слишком много времени, чтобы понять, как это сделать, но я собираюсь поделиться этим здесь, потому что НАКОНЕЦ нашел способ!Что смешно, когда вы думаете об этом, потому что загрузка - это то, что должны делать все видео.Вы могли бы подумать, что они учли бы это при создании стандарта видео html5.

Моя оригинальная теория, которая, как я думал, должна была работать (но не сработала), заключалась в следующем:

  1. Добавить загрузку изображения bg к видео при загрузке через js и css
  2. Удалите, когда будете готовы играть

Просто, верно?Проблема заключалась в том, что я не мог заставить фоновое изображение показывать, когда были установлены исходные элементы или был установлен атрибут video.src.Последний штрих гения / удачи состоял в том, чтобы выяснить (посредством экспериментов), что фоновое изображение не исчезнет, ​​если плакат установлен на что-то.Я использую поддельное изображение плаката, но я думаю, что оно будет работать с прозрачным изображением 1x1 (но зачем беспокоиться о наличии другого изображения).Так что это делает это, вероятно, своего рода хаком, но это работает, и мне не нужно добавлять дополнительную разметку в мой код, что означает, что он будет работать во всех моих проектах с использованием видео html5.

HTML

<video controls="" poster="data:image/gif,AAAA">
    <source src="yourvid.mp4"
</video>

CSS (класс загрузки применяется к видео с JS)

video.loading {
  background: black url(/images/loader.gif) center center no-repeat;
}

JS

  $('#video_id').on('loadstart', function (event) {
    $(this).addClass('loading');
  });
  $('#video_id').on('canplay', function (event) {
    $(this).removeClass('loading');
    $(this).attr('poster', '');
  });

Это прекрасно работает для меня, но проверено только в Chrome и Safari на Mac.Дайте мне знать, если кто-нибудь найдет ошибки и / или улучшения!

4 голосов
/ 01 октября 2014

Также простое решение для добавления изображения предварительного загрузчика при загрузке видео: HTML:

<video class="bg_vid" autoplay loop poster="images/FFFFFF-0.png">

плакат представляет собой прозрачное изображение 1px.

CSS:

  video {
  background-image: url(images/preload_30x30.gif);
  background-repeat: no-repeat;
  background-size: 30px 30px;
  background-position: center;
  }
3 голосов
/ 01 февраля 2012

Использовать тег ID постера

    <video controls="controls" poster="/IMG_LOCATION/IMAGENAME">

Более подробную информацию можно найти http://www.w3schools.com/html5/att_video_poster.asp

1 голос
/ 10 марта 2018

Моим решением было добавить следующее в window.fbAsyncInit = function ():

var finished_rendering = function() {
    var el = document.querySelector('div#loading_msg');
    el.style.display="none";
}

FB.Event.subscribe('xfbml.render', finished_rendering);

Найдено: https://developers.facebook.com/docs/reference/javascript/FB.Event.subscribe/v2.12

1 голос
/ 01 февраля 2012

Вы, вероятно, могли бы сделать это с помощью JavaScript, создав наложение изображения с анимированным «загрузочным» GIF-файлом, который отображается только во время загрузки видео и не готов к воспроизведению.

Вам нужно написать JavaScript, чтобы связать его с Media API, чтобы определить, когда видео готово к воспроизведению и т. Д. (Чтобы вы могли скрыть изображение снова), но это должно быть возможно.

...