HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>16 дек 2025</li>
2 <ul><li>16 дек 2025</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Добавляем котиков и не только.</p>
4 </ul><p>Добавляем котиков и не только.</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
5 <p>Иллюстрация: Polina Vari для Skillbox Media</p>
6 <p>Автор статей о программировании. 14 лет в IT. Умеет рассказывать о технологиях простыми словами. Автор спецпроекта Advertising for Social Change.</p>
6 <p>Автор статей о программировании. 14 лет в IT. Умеет рассказывать о технологиях простыми словами. Автор спецпроекта Advertising for Social Change.</p>
7 <p>За добавление роликов на сайт отвечает тег &lt;video&gt;. Он позволяет выводить встроенный плеер, управлять автозапуском, показывать обложку до старта, подключать субтитры и выбирать форматы файлов под разные браузеры.</p>
7 <p>За добавление роликов на сайт отвечает тег &lt;video&gt;. Он позволяет выводить встроенный плеер, управлять автозапуском, показывать обложку до старта, подключать субтитры и выбирать форматы файлов под разные браузеры.</p>
8 <p>В этой статье разберём, как корректно вставить видео в HTML, какие форматы поддерживаются популярными браузерами, как настроить загрузку, внешний вид и субтитры, а также что учитывать при работе с мобильными устройствами.</p>
8 <p>В этой статье разберём, как корректно вставить видео в HTML, какие форматы поддерживаются популярными браузерами, как настроить загрузку, внешний вид и субтитры, а также что учитывать при работе с мобильными устройствами.</p>
9 <p><strong>Содержание</strong></p>
9 <p><strong>Содержание</strong></p>
10 <ul><li><a>Зачем нужен тег &lt;video&gt;</a></li>
10 <ul><li><a>Зачем нужен тег &lt;video&gt;</a></li>
11 <li><a>Как встроить видео в HTML</a></li>
11 <li><a>Как встроить видео в HTML</a></li>
12 <li><a>Какие видеоформаты работают в браузерах</a></li>
12 <li><a>Какие видеоформаты работают в браузерах</a></li>
13 <li><a>Как добавить субтитры на разных языках</a></li>
13 <li><a>Как добавить субтитры на разных языках</a></li>
14 <li><a>Как управлять загрузкой и автовоспроизведением</a></li>
14 <li><a>Как управлять загрузкой и автовоспроизведением</a></li>
15 <li><a>Как настроить внешний вид плеера</a></li>
15 <li><a>Как настроить внешний вид плеера</a></li>
16 <li><a>Какие особенности у видео на мобильных устройствах</a></li>
16 <li><a>Какие особенности у видео на мобильных устройствах</a></li>
17 <li><a>Практика: как создать интерактивное видео через значение metadata</a></li>
17 <li><a>Практика: как создать интерактивное видео через значение metadata</a></li>
18 </ul><p>До HTML5 вставлять видео на сайты было очень сложно: для этого требовался Flash или самописные видеоплееры. Теперь видео вставляется так же, как картинка: в теге прописывается путь к файлу и дополнительные атрибуты.</p>
18 </ul><p>До HTML5 вставлять видео на сайты было очень сложно: для этого требовался Flash или самописные видеоплееры. Теперь видео вставляется так же, как картинка: в теге прописывается путь к файлу и дополнительные атрибуты.</p>
19 <p>С помощью &lt;video&gt; можно контролировать, как видео запускается и выглядит. Можно сделать так, чтобы видео начиналось автоматически, или показывать картинку-обложку до старта, а ещё можно добавить субтитры на разных языках.</p>
19 <p>С помощью &lt;video&gt; можно контролировать, как видео запускается и выглядит. Можно сделать так, чтобы видео начиналось автоматически, или показывать картинку-обложку до старта, а ещё можно добавить субтитры на разных языках.</p>
20 <p>Внешний вид плеера тоже можно подправить. По умолчанию браузер показывает стандартные кнопки, однако с помощью CSS можно изменить цвета и размеры или спрятать лишние функции. JavaScript позволит менять громкость, скорость воспроизведения или реагировать на события вроде окончания ролика.</p>
20 <p>Внешний вид плеера тоже можно подправить. По умолчанию браузер показывает стандартные кнопки, однако с помощью CSS можно изменить цвета и размеры или спрятать лишние функции. JavaScript позволит менять громкость, скорость воспроизведения или реагировать на события вроде окончания ролика.</p>
21 <p>Чтобы добавить ролик на страницу, нужно обернуть его в тег &lt;video&gt; и указать путь к файлу. Браузер выведет встроенный плеер с элементами управления - пользователь сможет запускать, останавливать и перематывать видео.</p>
21 <p>Чтобы добавить ролик на страницу, нужно обернуть его в тег &lt;video&gt; и указать путь к файлу. Браузер выведет встроенный плеер с элементами управления - пользователь сможет запускать, останавливать и перематывать видео.</p>
22 <p>Кроме того, у &lt;video&gt; есть настройки: можно включить автозапуск, задать обложку до старта воспроизведения или подключить субтитры.</p>
22 <p>Кроме того, у &lt;video&gt; есть настройки: можно включить автозапуск, задать обложку до старта воспроизведения или подключить субтитры.</p>
23 <p>Простейший синтаксис выглядит так:</p>
23 <p>Простейший синтаксис выглядит так:</p>
24 &lt;video src="video.mp4" controls&gt;&lt;/video&gt;<p>Здесь src указывает путь к ролику, а controls включает элементы управления: кнопки воспроизведения и паузы, регулятор громкости и полосу прогресса.</p>
24 &lt;video src="video.mp4" controls&gt;&lt;/video&gt;<p>Здесь src указывает путь к ролику, а controls включает элементы управления: кнопки воспроизведения и паузы, регулятор громкости и полосу прогресса.</p>
25 <p>Все браузеры по-разному относятся к форматам роликов. Универсального варианта нет - поэтому чаще всего указывают несколько источников. Браузер сам выберет первый подходящий файл и начнёт его воспроизводить.</p>
25 <p>Все браузеры по-разному относятся к форматам роликов. Универсального варианта нет - поэтому чаще всего указывают несколько источников. Браузер сам выберет первый подходящий файл и начнёт его воспроизводить.</p>
26 <ul><li><strong>MP4</strong> - самый надёжный формат. Его поддерживают почти все современные браузеры: Chrome, Safari, Firefox и Edge.</li>
26 <ul><li><strong>MP4</strong> - самый надёжный формат. Его поддерживают почти все современные браузеры: Chrome, Safari, Firefox и Edge.</li>
27 <li><strong>WebM</strong> - открытый формат, который хорошо работает в Chrome, Firefox и Opera. Он позволяет уменьшить размер файла, сохраняя при этом нормальное качество. Обычно его указывают как альтернативу.</li>
27 <li><strong>WebM</strong> - открытый формат, который хорошо работает в Chrome, Firefox и Opera. Он позволяет уменьшить размер файла, сохраняя при этом нормальное качество. Обычно его указывают как альтернативу.</li>
28 <li><strong>OGG</strong> - устаревший формат, который многие браузеры не поддерживают. Знать о нём полезно, но использовать не стоит. Если хотите, можете указать его вместе с MP4 и WebM, но двух форматов вполне достаточно.</li>
28 <li><strong>OGG</strong> - устаревший формат, который многие браузеры не поддерживают. Знать о нём полезно, но использовать не стоит. Если хотите, можете указать его вместе с MP4 и WebM, но двух форматов вполне достаточно.</li>
29 </ul><p>Для добавления нескольких разных форматов внутри &lt;video&gt; используйте несколько вложенных тегов &lt;source&gt;:</p>
29 </ul><p>Для добавления нескольких разных форматов внутри &lt;video&gt; используйте несколько вложенных тегов &lt;source&gt;:</p>
30 &lt;video controls&gt; &lt;source src="video.mp4" type="video/mp4"&gt; &lt;source src="video.webm" type="video/webm"&gt; &lt;source src="video.ogv" type="video/ogg"&gt; Ваш браузер не поддерживает тег video. &lt;/video&gt;<p>Каждый &lt;source&gt; описывает отдельный файл и его формат. Если браузер не поддерживает ни один из форматов (или тег &lt;video&gt;), пользователь увидит текст "Ваш браузер не поддерживает тег video" - это лучше, чем просто пустое место.</p>
30 &lt;video controls&gt; &lt;source src="video.mp4" type="video/mp4"&gt; &lt;source src="video.webm" type="video/webm"&gt; &lt;source src="video.ogv" type="video/ogg"&gt; Ваш браузер не поддерживает тег video. &lt;/video&gt;<p>Каждый &lt;source&gt; описывает отдельный файл и его формат. Если браузер не поддерживает ни один из форматов (или тег &lt;video&gt;), пользователь увидит текст "Ваш браузер не поддерживает тег video" - это лучше, чем просто пустое место.</p>
31 <p>Субтитры помогают людям с ограниченными возможностями и тем, кто не владеет языком, звучащим на видеозаписи. Их добавляют с помощью вложенного тега &lt;track&gt;, который загружает текстовые дорожки из файлов и делает видео доступным для всех. Посмотрите пример с субтитрами на двух языках:</p>
31 <p>Субтитры помогают людям с ограниченными возможностями и тем, кто не владеет языком, звучащим на видеозаписи. Их добавляют с помощью вложенного тега &lt;track&gt;, который загружает текстовые дорожки из файлов и делает видео доступным для всех. Посмотрите пример с субтитрами на двух языках:</p>
32 &lt;video controls&gt; &lt;source src="movie.mp4" type="video/mp4"&gt; &lt;track src="subtitles_ru.vtt" kind="subtitles" srclang="ru" label="Русский"&gt; &lt;track src="subtitles_en.vtt" kind="subtitles" srclang="en" label="English"&gt; &lt;/video&gt;<p>У тега &lt;track&gt; есть несколько атрибутов. Первый из них - kind. Он сообщает браузеру, какого типа субтитры добавлены в видео. Это важно, поскольку разные типы отображаются по-разному. У атрибута kind четыре основных значения:</p>
32 &lt;video controls&gt; &lt;source src="movie.mp4" type="video/mp4"&gt; &lt;track src="subtitles_ru.vtt" kind="subtitles" srclang="ru" label="Русский"&gt; &lt;track src="subtitles_en.vtt" kind="subtitles" srclang="en" label="English"&gt; &lt;/video&gt;<p>У тега &lt;track&gt; есть несколько атрибутов. Первый из них - kind. Он сообщает браузеру, какого типа субтитры добавлены в видео. Это важно, поскольку разные типы отображаются по-разному. У атрибута kind четыре основных значения:</p>
33 <ul><li>subtitles - обычные субтитры.</li>
33 <ul><li>subtitles - обычные субтитры.</li>
34 <li>captions - субтитры с описанием звуковых эффектов. В них текстом обозначаются диалоги, смех, шаги, закрывающиеся двери и другие важные для понимания контекста звуки. Они сделаны для людей с нарушениями слуха, чтобы передать полную звуковую картину происходящего.</li>
34 <li>captions - субтитры с описанием звуковых эффектов. В них текстом обозначаются диалоги, смех, шаги, закрывающиеся двери и другие важные для понимания контекста звуки. Они сделаны для людей с нарушениями слуха, чтобы передать полную звуковую картину происходящего.</li>
35 <li>descriptions - краткие описания происходящего на экране: "персонаж поднимает голову", "на экране появляется схема", "камера приближается к объекту". Браузер не показывает этот текст поверх видео и не озвучивает его. Такие субтитры предназначены для программ экранного доступа, которые читают текст вслух людям с нарушениями зрения.</li>
35 <li>descriptions - краткие описания происходящего на экране: "персонаж поднимает голову", "на экране появляется схема", "камера приближается к объекту". Браузер не показывает этот текст поверх видео и не озвучивает его. Такие субтитры предназначены для программ экранного доступа, которые читают текст вслух людям с нарушениями зрения.</li>
36 <li>metadata - служебные данные, которые не видит пользователь. Например, можно создать таймер, который покажет подсказку или подсветит кнопку, когда пользователь досмотрит до определённого момента. В разделе "Практика" мы разберём на примере, как работать с этими субтитрами.</li>
36 <li>metadata - служебные данные, которые не видит пользователь. Например, можно создать таймер, который покажет подсказку или подсветит кнопку, когда пользователь досмотрит до определённого момента. В разделе "Практика" мы разберём на примере, как работать с этими субтитрами.</li>
37 </ul><p>Помимо kind, у тега &lt;track&gt; есть атрибуты srclang и label. Атрибут srclang указывает двухбуквенный код языка субтитров по стандарту<a>ISO 639-1</a>(например, en для английского). Атрибут label задаёт понятное пользователю название дорожки субтитров, которое отображается в меню выбора языка плеера.</p>
37 </ul><p>Помимо kind, у тега &lt;track&gt; есть атрибуты srclang и label. Атрибут srclang указывает двухбуквенный код языка субтитров по стандарту<a>ISO 639-1</a>(например, en для английского). Атрибут label задаёт понятное пользователю название дорожки субтитров, которое отображается в меню выбора языка плеера.</p>
38 <p>У тега &lt;video&gt; есть несколько атрибутов, которые управляют поведением плеера.</p>
38 <p>У тега &lt;video&gt; есть несколько атрибутов, которые управляют поведением плеера.</p>
39 - <p>Атрибут autoplay запускает воспроизведение сразу после загрузки страницы. В большинстве браузеров он работает вместе с muted. Атрибут muted включает видео без звука - пользователь может включить звук самостоятельно:</p>
39 + <p>Атрибут autoplay запускает воспроизведение сразу после загрузки страницы. В большинстве браузеров он работает вместе с muted. Атрибут muted влючает видео без звука - пользователь может включить звук самостоятельно:</p>
40 &lt;video src="movie.mp4" autoplay muted&gt;&lt;/video&gt;<p>Атрибут loop зацикливает ролик, чтобы он снова запускался после окончания:</p>
40 &lt;video src="movie.mp4" autoplay muted&gt;&lt;/video&gt;<p>Атрибут loop зацикливает ролик, чтобы он снова запускался после окончания:</p>
41 &lt;video src="movie.mp4" loop controls&gt;&lt;/video&gt;<p>Атрибут preload - подсказывает браузеру, как загружать видео до нажатия на "Воспроизведение". У него может быть несколько значений: none - не загружать файл заранее; metadata - загрузить только информацию о файле (длительность, размер); auto - постараться загрузить весь файл. Пример реализации в коде:</p>
41 &lt;video src="movie.mp4" loop controls&gt;&lt;/video&gt;<p>Атрибут preload - подсказывает браузеру, как загружать видео до нажатия на "Воспроизведение". У него может быть несколько значений: none - не загружать файл заранее; metadata - загрузить только информацию о файле (длительность, размер); auto - постараться загрузить весь файл. Пример реализации в коде:</p>
42 &lt;video src="movie.mp4" preload="metadata" controls&gt;&lt;/video&gt;<p>Атрибут poster - задаёт заставку, которая отображается до воспроизведения:</p>
42 &lt;video src="movie.mp4" preload="metadata" controls&gt;&lt;/video&gt;<p>Атрибут poster - задаёт заставку, которая отображается до воспроизведения:</p>
43 &lt;video src="movie.mp4" poster="preview.jpg" controls&gt;&lt;/video&gt;<p>Атрибут playsinline - позволяет воспроизводить видео прямо внутри страницы на мобильных устройствах, без разворота на весь экран:</p>
43 &lt;video src="movie.mp4" poster="preview.jpg" controls&gt;&lt;/video&gt;<p>Атрибут playsinline - позволяет воспроизводить видео прямо внутри страницы на мобильных устройствах, без разворота на весь экран:</p>
44 &lt;video src="movie.mp4" playsinline controls&gt;&lt;/video&gt;<p>Для задания ширины и высоты используются атрибуты width и height:</p>
44 &lt;video src="movie.mp4" playsinline controls&gt;&lt;/video&gt;<p>Для задания ширины и высоты используются атрибуты width и height:</p>
45 &lt;video src="movie.mp4" width="640" height="360" controls&gt;&lt;/video&gt;<p>Для управления кнопками используйте атрибут controlslist вместе с атрибутом controls. Перечислим доступные значения:</p>
45 &lt;video src="movie.mp4" width="640" height="360" controls&gt;&lt;/video&gt;<p>Для управления кнопками используйте атрибут controlslist вместе с атрибутом controls. Перечислим доступные значения:</p>
46 <ul><li>nodownload - скрывает кнопку Скачать видео. Но от продвинутых пользователей это не поможет: они всё равно смогут скачать файл через инструменты разработчика или сетевые запросы.</li>
46 <ul><li>nodownload - скрывает кнопку Скачать видео. Но от продвинутых пользователей это не поможет: они всё равно смогут скачать файл через инструменты разработчика или сетевые запросы.</li>
47 <li>noplaybackrate - убирает возможность менять скорость воспроизведения.</li>
47 <li>noplaybackrate - убирает возможность менять скорость воспроизведения.</li>
48 <li>nofullscreen - в некоторых браузерах запрещает переход в полноэкранный режим.</li>
48 <li>nofullscreen - в некоторых браузерах запрещает переход в полноэкранный режим.</li>
49 <li>noremoteplayback - отключает передачу на внешние устройства.</li>
49 <li>noremoteplayback - отключает передачу на внешние устройства.</li>
50 </ul>&lt;video src="movie.mp4" width="640" height="360" controls&gt;&lt;/video&gt;&lt;video src="movie.mp4" controls controlslist="nodownload noplaybackrate noremoteplayback"&gt; &lt;/video&gt;<p>Поддержка атрибута controlslist неполная - 80,19% по данным сайта<a>Can I use</a>на момент обзора. Он работает в Chrome и Edge, но недоступен в Firefox и Safari.</p>
50 </ul>&lt;video src="movie.mp4" width="640" height="360" controls&gt;&lt;/video&gt;&lt;video src="movie.mp4" controls controlslist="nodownload noplaybackrate noremoteplayback"&gt; &lt;/video&gt;<p>Поддержка атрибута controlslist неполная - 80,19% по данным сайта<a>Can I use</a>на момент обзора. Он работает в Chrome и Edge, но недоступен в Firefox и Safari.</p>
51 <p>Работа с видео на смартфонах и планшетах отличается от десктопа, поскольку браузеры экономят батарею и мобильный трафик. Из-за этого нужно учитывать дополнительные ограничения, чтобы все ваши видео корректно загружались.</p>
51 <p>Работа с видео на смартфонах и планшетах отличается от десктопа, поскольку браузеры экономят батарею и мобильный трафик. Из-за этого нужно учитывать дополнительные ограничения, чтобы все ваши видео корректно загружались.</p>
52 <p><strong>Автовоспроизведение.</strong>Мобильные браузеры блокируют autoplay для видео со звуком. Чтобы видео запускалось автоматически, добавьте атрибут muted:</p>
52 <p><strong>Автовоспроизведение.</strong>Мобильные браузеры блокируют autoplay для видео со звуком. Чтобы видео запускалось автоматически, добавьте атрибут muted:</p>
53 &lt;video src="movie.mp4" autoplay muted playsinline&gt;&lt;/video&gt;<p><strong>Полноэкранный режим по умолчанию.</strong>В iOS Safari видео долгое время автоматически открывалось на весь экран при нажатии кнопки воспроизведения. Это мешало встроить видео в дизайн страницы. Начиная с iOS 10 вы можете управлять этим поведением с помощью атрибута playsinline - он позволяет включать видео внутри блока на странице, не разворачивая его на весь экран.</p>
53 &lt;video src="movie.mp4" autoplay muted playsinline&gt;&lt;/video&gt;<p><strong>Полноэкранный режим по умолчанию.</strong>В iOS Safari видео долгое время автоматически открывалось на весь экран при нажатии кнопки воспроизведения. Это мешало встроить видео в дизайн страницы. Начиная с iOS 10 вы можете управлять этим поведением с помощью атрибута playsinline - он позволяет включать видео внутри блока на странице, не разворачивая его на весь экран.</p>
54 <p><strong>Управление жестами.</strong>На смартфонах пользователи чаще взаимодействуют с видео касаниями и свайпами, поэтому интерфейс плеера может отличаться от десктопного. Например, двойное касание может перематывать видео вперёд или назад, а свайп вверх или вниз - регулировать громкость или яркость экрана.</p>
54 <p><strong>Управление жестами.</strong>На смартфонах пользователи чаще взаимодействуют с видео касаниями и свайпами, поэтому интерфейс плеера может отличаться от десктопного. Например, двойное касание может перематывать видео вперёд или назад, а свайп вверх или вниз - регулировать громкость или яркость экрана.</p>
55 <p><strong>Оптимизация под сеть.</strong>Мобильные браузеры часто игнорируют атрибут preload, чтобы сэкономить трафик и заряд батареи. Вместо того чтобы загружать весь видеофайл заранее, они подгружают его частями по мере воспроизведения - такой процесс называется потоковой загрузкой. Поэтому, даже если вы укажете preload="auto", браузер на смартфоне загрузит только начальный фрагмент.</p>
55 <p><strong>Оптимизация под сеть.</strong>Мобильные браузеры часто игнорируют атрибут preload, чтобы сэкономить трафик и заряд батареи. Вместо того чтобы загружать весь видеофайл заранее, они подгружают его частями по мере воспроизведения - такой процесс называется потоковой загрузкой. Поэтому, даже если вы укажете preload="auto", браузер на смартфоне загрузит только начальный фрагмент.</p>
56 <p>В этом разделе мы немного попрактикуемся и добавим видео на страницу. Когда ролик дойдёт до заранее заданной секунды, на экране появится жёлтая подсказка с текстом, а затем кнопка под видео изменит цвет с белого на красный.</p>
56 <p>В этом разделе мы немного попрактикуемся и добавим видео на страницу. Когда ролик дойдёт до заранее заданной секунды, на экране появится жёлтая подсказка с текстом, а затем кнопка под видео изменит цвет с белого на красный.</p>
57 <p><strong>Шаг 1.</strong>Создайте отдельную папку на компьютере для всех файлов проекта. Назовите её, например, metadata-demo. Добавьте в неё три файла:</p>
57 <p><strong>Шаг 1.</strong>Создайте отдельную папку на компьютере для всех файлов проекта. Назовите её, например, metadata-demo. Добавьте в неё три файла:</p>
58 <ul><li>index.html - сюда мы добавим HTML-разметку страницы.</li>
58 <ul><li>index.html - сюда мы добавим HTML-разметку страницы.</li>
59 <li>style.css - здесь будут стили для внешнего вида.</li>
59 <li>style.css - здесь будут стили для внешнего вида.</li>
60 <li>script.js - в этом файле мы пропишем логику работы подсказок и реакций.</li>
60 <li>script.js - в этом файле мы пропишем логику работы подсказок и реакций.</li>
61 </ul><p>Также нам понадобится короткий видеофайл - назовите его movie.mp4. Для проекта можете скачать случайное видео, сгенерированное "<a>Шедеврумом</a>".</p>
61 </ul><p>Также нам понадобится короткий видеофайл - назовите его movie.mp4. Для проекта можете скачать случайное видео, сгенерированное "<a>Шедеврумом</a>".</p>
62 <p><strong>Шаг 2.</strong>Откройте файл index.html в любом редакторе кода. Затем вставьте в него следующую разметку - она добавит на страницу видеоплеер, подсказку и кнопку:</p>
62 <p><strong>Шаг 2.</strong>Откройте файл index.html в любом редакторе кода. Затем вставьте в него следующую разметку - она добавит на страницу видеоплеер, подсказку и кнопку:</p>
63 &lt;!doctype html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;meta name="viewport" content="width=device-width,initial-scale=1" /&gt; &lt;title&gt;Интерактивное видео через metadata&lt;/title&gt; &lt;link rel="stylesheet" href="style.css"&gt; &lt;/head&gt; &lt;body&gt; &lt;div class="container"&gt; &lt;!-- Видеоплеер с атрибутом controls --&gt; &lt;video id="video" controls&gt; &lt;!-- Добавьте свой файл movie.mp4 в папку проекта --&gt; &lt;source src="movie.mp4" type="video/mp4"&gt; &lt;/video&gt; &lt;!-- Блок для отображения подсказок --&gt; &lt;div id="hint"&gt;Привет, это подсказка!&lt;/div&gt; &lt;!-- Кнопка для взаимодействия --&gt; &lt;button id="targetBtn"&gt;Целевая кнопка&lt;/button&gt; &lt;/div&gt; &lt;script src="script.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;<p><strong>Шаг 3.</strong>Теперь перейдём к файлу style.css, который будет отвечать за внешний вид контейнера, видео, кнопки и подсказки. Добавьте в него такой фрагмент:</p>
63 &lt;!doctype html&gt; &lt;html lang="ru"&gt; &lt;head&gt; &lt;meta charset="utf-8" /&gt; &lt;meta name="viewport" content="width=device-width,initial-scale=1" /&gt; &lt;title&gt;Интерактивное видео через metadata&lt;/title&gt; &lt;link rel="stylesheet" href="style.css"&gt; &lt;/head&gt; &lt;body&gt; &lt;div class="container"&gt; &lt;!-- Видеоплеер с атрибутом controls --&gt; &lt;video id="video" controls&gt; &lt;!-- Добавьте свой файл movie.mp4 в папку проекта --&gt; &lt;source src="movie.mp4" type="video/mp4"&gt; &lt;/video&gt; &lt;!-- Блок для отображения подсказок --&gt; &lt;div id="hint"&gt;Привет, это подсказка!&lt;/div&gt; &lt;!-- Кнопка для взаимодействия --&gt; &lt;button id="targetBtn"&gt;Целевая кнопка&lt;/button&gt; &lt;/div&gt; &lt;script src="script.js"&gt;&lt;/script&gt; &lt;/body&gt; &lt;/html&gt;<p><strong>Шаг 3.</strong>Теперь перейдём к файлу style.css, который будет отвечать за внешний вид контейнера, видео, кнопки и подсказки. Добавьте в него такой фрагмент:</p>
64 body { font-family: sans-serif; padding: 10px; display: flex; justify-content: center; background: #f0f0f0; } .container { width: 320px; position: relative; } video { width: 100%; border-radius: 6px; background: black; display: block; } #hint { position: absolute; top: 10px; left: 10px; background: yellow; color: black; padding: 6px 10px; border-radius: 6px; border: 1px solid #ddd; /* По умолчанию подсказка скрыта, показывается через JavaScript */ display: none; font-size: 12px; font-weight: bold; } #targetBtn { margin-top: 10px; width: 100%; padding: 8px 10px; border: 1px solid #ccc; border-radius: 6px; background: white; /* Плавное изменение цвета при добавлении класса active */ transition: 0.2s; } /* Класс active меняет цвет кнопки на красный */ #targetBtn.active { background: red; color: white; }<p><strong>Шаг 4.</strong>Перейдём к файлу script.js. Создадим дорожку метаданных и укажем, какие события должны происходить в нужные моменты. Когда видео дойдёт до третьей секунды, появится подсказка. Когда до шестой - подсветится кнопка.</p>
64 body { font-family: sans-serif; padding: 10px; display: flex; justify-content: center; background: #f0f0f0; } .container { width: 320px; position: relative; } video { width: 100%; border-radius: 6px; background: black; display: block; } #hint { position: absolute; top: 10px; left: 10px; background: yellow; color: black; padding: 6px 10px; border-radius: 6px; border: 1px solid #ddd; /* По умолчанию подсказка скрыта, показывается через JavaScript */ display: none; font-size: 12px; font-weight: bold; } #targetBtn { margin-top: 10px; width: 100%; padding: 8px 10px; border: 1px solid #ccc; border-radius: 6px; background: white; /* Плавное изменение цвета при добавлении класса active */ transition: 0.2s; } /* Класс active меняет цвет кнопки на красный */ #targetBtn.active { background: red; color: white; }<p><strong>Шаг 4.</strong>Перейдём к файлу script.js. Создадим дорожку метаданных и укажем, какие события должны происходить в нужные моменты. Когда видео дойдёт до третьей секунды, появится подсказка. Когда до шестой - подсветится кнопка.</p>
65 // Получаем элементы со страницы const video = document.getElementById("video"); const hint = document.getElementById("hint"); const btn = document.getElementById("targetBtn"); // Показываем подсказку на заданное время function showHint(duration = 2) { hint.style.display = "block"; setTimeout(() =&gt; hint.style.display = "none", duration * 1000); } // Подсвечиваем кнопку на заданное время function highlightButton(duration = 2) { btn.classList.add("active"); setTimeout(() =&gt; btn.classList.remove("active"), duration * 1000); } // Создаём трек с метаданными const track = video.addTextTrack("metadata", "MetaTrack"); track.mode = "hidden"; // Добавляем временные метки (cue) - они срабатывают в указанные секунды видео track.addCue(new VTTCue(3, 5, "showHint")); track.addCue(new VTTCue(6, 8, "highlight")); // Обрабатываем событие cuechange - срабатывает при изменении активной метки track.addEventListener("cuechange", () =&gt; { const cues = track.activeCues; for (let i = 0; i &lt; cues.length; i++) { const cue = cues[i]; // Запускаем нужное действие в зависимости от метки if (cue.text === "showHint") showHint(); if (cue.text === "highlight") highlightButton(); } });<p>Если вы повторили все действия, то, открыв файл index.html в браузере, увидите видеоплеер с кнопкой. Запустите видео и посмотрите, что вышло.</p>
65 // Получаем элементы со страницы const video = document.getElementById("video"); const hint = document.getElementById("hint"); const btn = document.getElementById("targetBtn"); // Показываем подсказку на заданное время function showHint(duration = 2) { hint.style.display = "block"; setTimeout(() =&gt; hint.style.display = "none", duration * 1000); } // Подсвечиваем кнопку на заданное время function highlightButton(duration = 2) { btn.classList.add("active"); setTimeout(() =&gt; btn.classList.remove("active"), duration * 1000); } // Создаём трек с метаданными const track = video.addTextTrack("metadata", "MetaTrack"); track.mode = "hidden"; // Добавляем временные метки (cue) - они срабатывают в указанные секунды видео track.addCue(new VTTCue(3, 5, "showHint")); track.addCue(new VTTCue(6, 8, "highlight")); // Обрабатываем событие cuechange - срабатывает при изменении активной метки track.addEventListener("cuechange", () =&gt; { const cues = track.activeCues; for (let i = 0; i &lt; cues.length; i++) { const cue = cues[i]; // Запускаем нужное действие в зависимости от метки if (cue.text === "showHint") showHint(); if (cue.text === "highlight") highlightButton(); } });<p>Если вы повторили все действия, то, открыв файл index.html в браузере, увидите видеоплеер с кнопкой. Запустите видео и посмотрите, что вышло.</p>
66 <em>Скриншот: Google Chrome / Skillbox Media</em><ul><li><a>Официальный стандарт с описанием атрибутов &lt;video&gt;</a>(English)</li>
66 <em>Скриншот: Google Chrome / Skillbox Media</em><ul><li><a>Официальный стандарт с описанием атрибутов &lt;video&gt;</a>(English)</li>
67 <li><a>Типы видеоформатов, доступные для интернет-браузеров</a></li>
67 <li><a>Типы видеоформатов, доступные для интернет-браузеров</a></li>
68 <li><a>Поддерживаемые форматы по разным браузерам</a>(English)</li>
68 <li><a>Поддерживаемые форматы по разным браузерам</a>(English)</li>
69 </ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
69 </ul><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>