DPlayer/src/fullscreen.js

88 lines
2.8 KiB
JavaScript

class FullScreen {
constructor (player) {
this.player = player;
this.player.events.on('webfullscreen', () => {
this.player.resize();
});
this.player.events.on('webfullscreen_cancel', () => {
this.player.resize();
});
const fullscreenchange = () => {
this.player.resize();
if (this.isFullScreen('browser')) {
this.player.events.trigger('fullscreen');
}
else {
this.player.events.trigger('fullscreen_cancel');
}
};
this.player.container.addEventListener('fullscreenchange', fullscreenchange);
this.player.container.addEventListener('mozfullscreenchange', fullscreenchange);
this.player.container.addEventListener('webkitfullscreenchange', fullscreenchange);
}
isFullScreen (type = 'browser') {
switch (type) {
case 'browser':
return document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement;
case 'web':
return this.player.container.classList.contains('dplayer-fulled');
}
}
request (type = 'browser') {
switch (type) {
case 'browser':
if (this.player.container.requestFullscreen) {
this.player.container.requestFullscreen();
}
else if (this.player.container.mozRequestFullScreen) {
this.player.container.mozRequestFullScreen();
}
else if (this.player.container.webkitRequestFullscreen) {
this.player.container.webkitRequestFullscreen();
}
else if (this.player.video.webkitEnterFullscreen) { // Safari for iOS
this.player.video.webkitEnterFullscreen();
}
break;
case 'web':
this.player.container.classList.add('dplayer-fulled');
this.player.events.trigger('webfullscreen');
break;
}
}
cancel (type = 'browser') {
switch (type) {
case 'browser':
if (document.cancelFullScreen) {
document.cancelFullScreen();
}
else if (document.mozCancelFullScreen) {
document.mozCancelFullScreen();
}
else if (document.webkitCancelFullScreen) {
document.webkitCancelFullScreen();
}
break;
case 'web':
this.player.container.classList.remove('dplayer-fulled');
this.player.events.trigger('webfullscreen_cancel');
break;
}
}
toggle (type = 'browser') {
if (this.isFullScreen(type)) {
this.cancel(type);
}
else {
this.request(type);
}
}
}
module.exports = FullScreen;