mirror of
https://github.com/movie-web/movie-web.git
synced 2025-02-11 09:28:53 +01:00
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
![]() |
import fscreen from "fscreen";
|
||
|
|
||
|
export const isSafari = /^((?!chrome|android).)*safari/i.test(
|
||
|
navigator.userAgent
|
||
|
);
|
||
|
|
||
|
let cachedVolumeResult: boolean | null = null;
|
||
|
export async function canChangeVolume(): Promise<boolean> {
|
||
|
if (cachedVolumeResult === null) {
|
||
|
const timeoutPromise = new Promise<false>((resolve) => {
|
||
|
setTimeout(() => resolve(false), 1e3);
|
||
|
});
|
||
|
const promise = new Promise<true>((resolve) => {
|
||
|
const video = document.createElement("video");
|
||
|
const handler = () => {
|
||
|
video.removeEventListener("volumechange", handler);
|
||
|
resolve(true);
|
||
|
};
|
||
|
|
||
|
video.addEventListener("volumechange", handler);
|
||
|
|
||
|
video.volume = 0.5;
|
||
|
});
|
||
|
|
||
|
cachedVolumeResult = await Promise.race([promise, timeoutPromise]);
|
||
|
}
|
||
|
return cachedVolumeResult;
|
||
|
}
|
||
|
|
||
|
export function canFullscreenAnyElement(): boolean {
|
||
|
return fscreen.fullscreenEnabled;
|
||
|
}
|
||
|
|
||
|
export function canWebkitFullscreen(): boolean {
|
||
|
return canFullscreenAnyElement() || isSafari;
|
||
|
}
|
||
|
|
||
|
export function canFullscreen(): boolean {
|
||
|
return canFullscreenAnyElement() || canWebkitFullscreen();
|
||
|
}
|