Fullscreen mode management — enter, exit, toggle, and state change listeners.
Module fullscreen | Source packages/front/fw/src/dom/display/fullscreen.js | Deps none | Worker-safe no
Resolve
const fullscreen = runtime.resolve('fullscreen');
// Returns: { isSupported, isFullscreen, enter, exit, toggle, listen }
API
| Method | Signature | Description |
|---|---|---|
isSupported |
() → boolean |
Checks availability of the Fullscreen API |
isFullscreen |
() → boolean |
Current fullscreen state |
enter |
(source?) → Promise<void> |
Enter fullscreen |
exit |
() → Promise<void> |
Exit fullscreen |
toggle |
(source?) → Promise<void> |
Toggle state |
source — element resolution
Event→ usesevent.currentTarget(thenevent.targetas fallback)Element→ used directlyundefined→document.documentElement
Passing the click event is recommended — browsers require that entering fullscreen is triggered from a user gesture.
listen — state change callbacks
fullscreen.listen.add('myListener', (isFullscreen) => {
console.log('fullscreen:', isFullscreen);
});
fullscreen.listen.del('myListener');
Callbacks are called in registration order on each fullscreenchange event.
fullscreen.dispose()
Removes all registered callbacks and detaches the fullscreenchange listener from the document. Call on scope or page teardown to prevent leaks.
fullscreen.dispose();
Examples
Simple fullscreen button
const fullscreen = runtime.resolve('fullscreen');
const events = runtime.resolve('events');
if (fullscreen.isSupported()) {
events.on('fsBtn', btn, 'click', (e) => {
fullscreen.toggle(e);
});
fullscreen.listen.add('stateChange', (active) => {
btn.textContent = active ? 'Exit fullscreen' : 'Fullscreen';
});
}
Fullscreen on a specific element
const videoEl = document.querySelector('video');
events.on('videoClick', videoEl, 'dblclick', (e) => {
if (fullscreen.isFullscreen()) {
fullscreen.exit();
} else {
fullscreen.enter(videoEl);
}
});
Cleanup
function mountPlayer() {
fullscreen.listen.add('playerFs', (active) => updateUI(active));
events.on('playerBtn', fsBtn, 'click', (e) => fullscreen.toggle(e));
return function unmount() {
fullscreen.listen.del('playerFs');
events.off('playerBtn');
if (fullscreen.isFullscreen()) fullscreen.exit();
};
}
Notes
- Entering fullscreen must be triggered from a user gesture handler (
click,keydown, etc.). enter()andtoggle()return Promises — errors (user refusal, invalid element) can be caught.- The
fullscreenchangelistener is attached lazily on the firstlisten.add()and detached whenlisten.del()empties the set — no leak if no one is subscribed. dispose()must be called on teardown to release callbacks and the document listener.- Compatibility: Standard Chrome 71+, Firefox 64+, Edge 79+, Safari 16.4+. Webkit prefix for Safari < 16.4 (supported internally via fallback).