Полноэкранное видео html5 с веб-браузером iOS Safari
Есть ли способ запустить полноэкранный режим на iOS Safari (мобильный интернет). Либо полноэкранный, либо полноэкранный режим будет здорово. Вот что я попробовал ниже:
<video id="mobile_content">
<source src="someurltocontent"></source>
</video>
function makefullscreen(element){
if(element.requestFullscreen) {
element.requestFullscreen();
}
else if(element.mozRequestFullScreen) {
element.mozRequestFullScreen();
}
else if(element.webkitRequestFullscreen) {
element.webkitRequestFullscreen();
}
else if(element.msRequestFullscreen) {
element.msRequestFullscreen();
}
else{
var requestFullscreen =
document.documentElement.requestFullscreen ||
document.documentElement.webkitRequestFullscreen ||
document.documentElement.mozRequestFullscreen ||
document.documentElement.requestFullScreen ||
document.documentElement.webkitRequestFullScreen ||
document.documentElement.mozRequestFullScreen;
if (requestFullscreen) {
requestFullscreen.call(document.documentElement);
}
else {
console.log("really!? come on...");
}
}
}
При действии пользователя вышеупомянутой функции передается элемент видео, и если полноэкранный режим доступен, тогда выполняется полноэкранный режим для элемента видео.
Это не работает в Safari для IPAD.
Одним из обходных путей может быть применение элементов управления attr к тегу видео, а затем позволить пользователю запускать полноэкранный режим с помощью полноэкранного режима встроенного проигрывателя.
<video id="mobile_content" controls>
<source src="someurltocontent"></source>
</video>
Любые идеи, кроме вышеупомянутых?
2 ответа
Вы можете легко запустить полноэкранный режим на элементе Media DOM (например, video
) в Safari для iPad с помощью следующего кода:
HTML
<div id="video-container">
<video>
<source src="path/to/file.webm"></source>
<source src="path/to/file.mp4"></source>
</video>
</div>
JavaScript
var videoContainer = document.getElementById('video-container');
var video = videoContainer.getElementsByTagName('video');
function toggleVideoFullscreen() {
if (video.webkitEnterFullScreen) {
// Toggle fullscreen in Safari for iPad
video.webkitEnterFullScreen();
} else {
// Toggle fullscreen for other OS / Devices / Browsers
}
}
Однако этот метод работает только для Media DOM Elems в Safari для iPad, и у меня всегда возникают проблемы с запросом полноэкранного режима на другом DOM Elem, как div
, section
так далее..
Это похоже на webkitRequestFullscreen
всегда возвращается undefined
на каждом DOM Elems в Safari для iPad.
Хорошего дня!
Привет всем, кто заинтересован. Я провел пару дней, исследуя лучший способ работы с полноэкранными видео с учетом кросс-браузерной совместимости.
Есть 3 подхода:
1. Как и в Netflix, вместо воспроизведения видео вы перенаправляете пользователя в магазин приложений.
2- Вы можете «эмулировать» полноэкранный режим, используя свойство «playsinline», которое позволит избежать запуска собственных элементов управления в мобильной IOS, а при ширине 100% это выглядит так, как будто видео полноэкранное.
3- Третий подход аналогичен принятому ответу, но включает способ обнаружения запуска полноэкранного режима и управления выходом из полноэкранного режима.
По сути, вы должны сделать оболочку вокруг видео, я получаю ссылку с помощью useRef() (реагировать), и вы запускаете полноэкранный API (когда это возможно) в оболочке.
Но в последнем случае, в последнем случае (где IOS Mobile не поддерживается) вы вызовете другой метод.
Хорошо, вот код!!
const video = document.getElementsByTagName('video')[0];
const isInFullScreen =
(document.fullscreenElement && document.fullscreenElement !== null) ||
(document.webkitFullscreenElement && document.webkitFullscreenElement !== null) ||
(document.mozFullScreenElement && document.mozFullScreenElement !== null) ||
(document.msFullscreenElement && document.msFullscreenElement !== null);
if (!isInFullScreen) {
if (playerWrapper.current.requestFullScreen) {
// W3C API
playerWrapper.current.requestFullScreen();
} else if (playerWrapper.current.mozRequestFullScreen) {
// Mozilla current API
playerWrapper.current.mozRequestFullScreen();
} else if (playerWrapper.current.webkitRequestFullScreen) {
// Webkit current API
playerWrapper.current.webkitRequestFullScreen();
} else if (video.webkitEnterFullScreen) {
// This is the IOS Mobile edge case
video.webkitEnterFullScreen();
}
} else {
if (document.exitFullscreen) {
document.exitFullscreen();
} else if (document.webkitExitFullscreen) {
document.webkitExitFullscreen();
} else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
} else if (document.msExitFullscreen) {
document.msExitFullscreen();
}
}