@cradokski/fullscreen
Version:
An Angular service that toggles the browser between Fullscreen and normal view. Includes optional **double-tap support** to prevent accidental toggling — useful on mobile/touch devices.
81 lines (76 loc) • 2.57 kB
JavaScript
import * as i0 from '@angular/core';
import { Injectable } from '@angular/core';
class FullScreenService {
constructor() {
this.isFullscreen = false;
this.lastTapTime = null;
}
enterFullscreen() {
if (document.documentElement?.requestFullscreen) {
document.documentElement.requestFullscreen();
}
}
exitFullscreen() {
if (document?.fullscreenElement) {
document.exitFullscreen();
}
}
fullscreen() {
if (this.isFullscreen) {
this.isFullscreen = false;
this.exitFullscreen();
}
else {
this.isFullscreen = true;
this.enterFullscreen();
}
}
/**
* Toggle fullscreen with optional double-tap logic.
*
* @param options Optional. If requireDoubleTap is true, two quick calls are required.
* @returns True if fullscreen is now active, false otherwise.
*/
browserFsToggle(options) {
const requireDoubleTap = options?.requireDoubleTap ?? false;
const delayMs = options?.delayMs ?? 300;
if (!requireDoubleTap) {
this.fullscreen();
return this.isFullscreen;
}
const now = Date.now();
if (this.lastTapTime && now - this.lastTapTime < delayMs) {
this.lastTapTime = null;
this.fullscreen();
return this.isFullscreen;
}
else {
this.lastTapTime = now;
return this.isFullscreen; // unchanged
}
}
/**
* True if the document is currently in fullscreen mode.
*
* @returns True if fullscreen is active, false otherwise.
*/
isFullscreenActive() {
return this.isFullscreen;
}
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, providedIn: 'root' }); }
}
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: FullScreenService, decorators: [{
type: Injectable,
args: [{
providedIn: 'root'
}]
}], ctorParameters: () => [] });
/*
* Public API Surface of fullscreen
*/
/**
* Generated bundle index. Do not edit.
*/
export { FullScreenService };
//# sourceMappingURL=cradokski-fullscreen.mjs.map