41 lines
1.2 KiB
TypeScript
41 lines
1.2 KiB
TypeScript
export class FullScreenHandler {
|
|
public constructor(
|
|
private readonly minimizeButton: HTMLElement,
|
|
private readonly maximizeButton: HTMLElement,
|
|
target: HTMLElement
|
|
) {
|
|
if (!document.fullscreenEnabled) {
|
|
minimizeButton.style.display = 'none';
|
|
maximizeButton.style.display = 'none';
|
|
return;
|
|
}
|
|
|
|
this.updateButtons();
|
|
|
|
addEventListener('keydown', (e) => {
|
|
// on full screen request, only apply it to the target
|
|
if (e.key === 'F11') {
|
|
e.preventDefault();
|
|
FullScreenHandler.isInFullScreenMode()
|
|
? document.exitFullscreen()
|
|
: target.requestFullscreen();
|
|
}
|
|
});
|
|
addEventListener('fullscreenchange', this.updateButtons.bind(this));
|
|
maximizeButton.addEventListener('click', target.requestFullscreen.bind(target));
|
|
minimizeButton.addEventListener('click', document.exitFullscreen.bind(document));
|
|
}
|
|
|
|
public static isInFullScreenMode(): boolean {
|
|
return document.fullscreenElement !== null;
|
|
}
|
|
|
|
private updateButtons() {
|
|
this.minimizeButton.style.display = FullScreenHandler.isInFullScreenMode()
|
|
? 'block'
|
|
: 'none';
|
|
this.maximizeButton.style.display = FullScreenHandler.isInFullScreenMode()
|
|
? 'none'
|
|
: 'block';
|
|
}
|
|
}
|