← Все статьи

Туториалы

Принудите нативное управление на каждом видео

Пользовательские видеоплееры выглядят стильно, пока не сломаются: пропавший ползунок перемотки, нет регулятора громкости, кнопка воспроизведения, игнорирующая клики. Браузер бесплатно поставляет надёжную панель управления. Правило JustZix принуждает её на каждое видео, так что у вас всегда есть работающее управление.

Одно свойство, которое имеет значение

У каждого элемента <video> есть булево свойство controls. Когда оно истинно, браузер рисует свою панель управления. Сайты отключают его, чтобы их пользовательский интерфейс мог взять верх. Включите его обратно:

document.querySelectorAll('video').forEach(function (v) {
  v.controls = true;
});

Это суть. Рецепты ниже заставляют это закрепиться на динамических страницах и не дают сайту снова это убрать.

Сохраняйте управление на динамических плеерах

Многие сайты выключают controls после загрузки страницы или вовсе заменяют видеоэлемент. MutationObserver, который следит и за новыми узлами, и за изменениями атрибутов, удерживает вашу настройку на месте.

(function () {
  function force(v) {
    if (v.controls !== true) { v.controls = true; }
  }
  function scan(root) {
    if (root.tagName === 'VIDEO') { force(root); }
    if (root.querySelectorAll) {
      root.querySelectorAll('video').forEach(force);
    }
  }
  scan(document.documentElement);
  new MutationObserver(function (records) {
    records.forEach(function (rec) {
      if (rec.type === 'attributes' && rec.target.tagName === 'VIDEO') {
        force(rec.target);
      }
      rec.addedNodes.forEach(function (n) {
        if (n.nodeType === 1) { scan(n); }
      });
    });
  }).observe(document.documentElement, {
    childList: true,
    subtree: true,
    attributes: true,
    attributeFilter: ['controls']
  });
})();

attributeFilter сужает наблюдателя только до атрибута controls, так что он остаётся дешёвым даже на загруженных страницах.

Скройте сломанный пользовательский интерфейс через CSS

Когда нативная панель видна, пользовательский оверлей сайта часто сидит сверху и крадёт клики. Небольшое CSS-правило может убрать его с дороги. Пользовательское управление обычно несёт предсказуемый класс или data-атрибут; осмотрите страницу один раз и нацельтесь на него.

.video-player .custom-controls,
[data-player-ui],
.vjs-control-bar {
  display: none !important;
}

video {
  pointer-events: auto !important;
}

Второй блок снова включает клики по самому видео, на случай если сайт отключил их, чтобы его оверлей мог перехватывать каждое взаимодействие. Подстройте селекторы под плеер, с которым имеете дело.

Объединённое действие «починить кликом»

Если вам нужно нативное управление лишь изредка, привяжите его к клавише вместо постоянного запуска. Это правило восстанавливает управление и убирает блокирующие оверлеи, когда вы нажимаете сочетание.

document.addEventListener('keydown', function (e) {
  if (e.altKey && e.key.toLowerCase() === 'c') {
    document.querySelectorAll('video').forEach(function (v) {
      v.controls = true;
      v.style.pointerEvents = 'auto';
      v.style.zIndex = '2147483647';
      v.style.position = 'relative';
    });
  }
}, true);

Поднятие z-index возносит видео над любым оверлеем, так что его собственная панель управления получает клики.

Практические заметки

Найдите готовую версию в наших готовых примерах или скачайте JustZix. Чтобы пойти дальше со скоростью, прочтите управляйте скоростью воспроизведения видео на любом сайте.

Оцени эту статью

Оценок пока нет — оцени первым.

Попробуй сам

Установи JustZix и вставь любой сниппет из этой статьи. Две минуты от нуля до работающего правила на всех твоих устройствах.

Получить JustZix

Возможности · Как это работает · Примеры · Применение