Files
ArtPlayer/packages/artplayer/src/player/fullscreenMix.js
T

81 lines
2.5 KiB
JavaScript

import screenfull from '../libs/screenfull';
import { addClass, removeClass, def, get } from '../utils';
export default function fullscreenMix(art) {
const {
i18n,
notice,
template: { $video, $player },
} = art;
const nativeScreenfull = (art) => {
screenfull.on('change', () => {
art.emit('fullscreen', screenfull.isFullscreen);
});
screenfull.on('error', (event) => {
art.emit('fullscreenError', event);
});
def(art, 'fullscreen', {
get() {
return screenfull.isFullscreen;
},
async set(value) {
if (value) {
art.state = 'fullscreen';
await screenfull.request($player);
addClass($player, 'art-fullscreen');
} else {
await screenfull.exit();
removeClass($player, 'art-fullscreen');
}
art.emit('resize');
},
});
};
const webkitScreenfull = (art) => {
def(art, 'fullscreen', {
get() {
console.log('webkitDisplayingFullscreen', $video.webkitDisplayingFullscreen);
return $video.webkitDisplayingFullscreen;
},
set(value) {
if (value) {
art.state = 'fullscreen';
$video.webkitEnterFullscreen();
art.emit('fullscreen', true);
} else {
$video.webkitExitFullscreen();
art.emit('fullscreen', false);
}
art.emit('resize');
},
});
};
art.once('video:loadedmetadata', () => {
console.log('screenfull.isEnabled', screenfull.isEnabled);
console.log('document.fullscreenEnabled', document.fullscreenEnabled);
console.log('$video.webkitSupportsFullscreen', $video.webkitSupportsFullscreen);
if (screenfull.isEnabled) {
nativeScreenfull(art);
} else if (document.fullscreenEnabled || $video.webkitSupportsFullscreen) {
webkitScreenfull(art);
} else {
def(art, 'fullscreen', {
get() {
return false;
},
set() {
notice.show = i18n.get('Fullscreen Not Supported');
},
});
}
// Asynchronous setting
def(art, 'fullscreen', get(art, 'fullscreen'));
});
}