Я относительно новичок в веб-программировании и, следовательно, имею проблемы с сохранением моего кода. Работая над последним проектом, среди прочего, я должен был сделать следующее:Загрузка видео на лету
- автозапуска на главной странице один из восьми доступных видео (например, главный-VID-3.webm);
- Когда это закончится, начните играть следующее (в этом случае main-vid-4.webm);
- Затем воспроизведите следующее видео и так далее. После восьмого видео необходимо воспроизвести main-vid-1.
Если я начал играть в следующее видео сразу после предыдущего, у меня было отставание, так как новое видео еще не было загружено. Мое решение проблемы:
- Два видеотега на странице, один из них имеет отображение: нет;
- Когда видео с дисплеем: конец блока, он скрывается, когда появляется другое видео и начинает воспроизведение;
- Когда это видео воспроизводится, источник скрытого видео изменяется с помощью JS и начинает загрузку (но пока не воспроизводится);
- повторить шаг 2;
Это сработало, но мой код (особенно JS-часть и необходимость иметь два видео-тега на странице) не кажется мне чистым и прекрасным. Есть ли лучшее решение проблемы?
<section id="main-page-top">
\t \t <video id="bgvid-<?php echo $vidId; ?>" autoplay width="100%">
\t \t \t <source src="<?php echo get_template_directory_uri(); ?>/inc/main-vid-<?php echo $vidId; ?>.webm" type="video/webm">
\t \t </video>
\t \t <video id="bgvid-<?php echo ($vidId + 1); ?>" class="hidden" width="100%">
\t \t \t <source src="<?php echo get_template_directory_uri(); ?>/inc/main-vid-<?php echo $vidIdAlt; ?>.webm" type="video/webm">
\t \t </video>
</section>
document.getElementById('#main-page-top video:nth-child(1)').addEventListener('ended', function() {
document.getElementById('#main-page-top video:nth-child(1)').style.display = "none";
document.getElementById('#main-page-top video:nth-child(2)').style.display = "block";
document.getElementById('#main-page-top video:nth-child(2)').play();
var vidNum = parseInt(document.getElementById('#main-page-top video:nth-child(1)').id.substring(6));
if (vidNum === 7) {
vidNum = -1;
} else if (vidNum === 8) {
vidNum = 0;
}
document.getElementById('#main-page-top video:nth-child(1)').setAttribute('id', 'bgvid-' + (vidNum + 2));
document.getElementById('#main-page-top video:nth-child(1) source').setAttribute('src', 'http://u0065000.isp.regruhosting.ru/template/inc/main-vid-' + (vidNum + 2) + '.webm');
document.getElementById('#main-page-top video:nth-child(1)').setAttribute("poster", "http://u0065000.isp.regruhosting.ru/template/inc/main-vid-" + (vidNum + 2) + ".jpg");
document.getElementById('#main-page-top video:nth-child(1)').load();
document.getElementById('#main-page-top video:nth-child(1)').pause();
});
document.getElementById('#main-page-top video:nth-child(2)').addEventListener('ended', function() {
document.getElementById('#main-page-top video:nth-child(2)').style.display = "none";
document.getElementById('#main-page-top video:nth-child(1)').style.display = "block";
document.getElementById('#main-page-top video:nth-child(1)').play();
var vidNum = parseInt(document.getElementById('#main-page-top video:nth-child(2)').id.substring(6));
if (vidNum === 7) {
vidNum = -1;
} else if (vidNum === 8) {
vidNum = 0;
}
document.getElementById('#main-page-top video:nth-child(2)').setAttribute('id', 'bgvid-' + (vidNum + 2));
document.getElementById('#main-page-top video:nth-child(2) source').setAttribute('src', 'http://u0065000.isp.regruhosting.ru/template/inc/main-vid-' + (vidNum + 2) + '.webm');
document.getElementById('#main-page-top video:nth-child(2)').setAttribute("poster", "http://u0065000.isp.regruhosting.ru/template/inc/main-vid-" + (vidNum + 2) + ".jpg");
document.getElementById('#main-page-top video:nth-child(2)').load();
document.getElementById('#main-page-top video:nth-child(2)').pause();
});
тег два видео часть хорошо, и, вероятно, нужна, но другая часть по-разному чрезмерно повторяющийся, и вы используете getElementById() вместо querySelector() – dandavis
Ну, раньше это был запросSelector(), поэтому в скобках перед id есть #. Я только что прочитал статью https://jsperf.com/getelementbyid-vs-queryselector/11, тест показывает, что getElementById работает быстрее в таких случаях, как мой, поэтому я решил изменить код. Я удалю все хэш-теги позже. – Lzhelenin
исполнение либо бессмысленно; обратите внимание, что jsperf выполняет миллионы запусков, вы выполняете пару десятков. большая точка, которую я хотел сделать, заключается в том, что вам нужен только один или два вызова такого метода вместо дюжины, и повторное использование элемента ref будет радикально очищать ваш код. просто определите, ex 'var e2 = document.getElementById ('# main-page-top video: nth-child (2)')', а затем замените все вхождения этой длинной строки только 'e2', ex:' e2.load(); e2.pause(); ' – dandavis