UseFullscreen
guarahooks/use-fullscreenFreeHook
Enters and exits fullscreen mode.
Live preview
live · rendered by the registry
Rendered by guarahooks on their own page — this is the component running, not a screenshot of it.Install it
npx shadcn@latest add https://guarahooks.com/r/use-fullscreen.jsonSource
1'use client';23import { useCallback, useEffect, useRef, useState } from 'react';45// Type for the ref that can be passed to the hook6export type FullscreenRef = React.RefObject<HTMLElement> | null;78// Vendor-prefixed Fullscreen API support9interface VendorDocument extends Document {10 webkitFullscreenElement?: Element;11 mozFullScreenElement?: Element;12 msFullscreenElement?: Element;13 webkitExitFullscreen?: () => Promise<void>;14 mozCancelFullScreen?: () => Promise<void>;15 msExitFullscreen?: () => Promise<void>;16}1718interface VendorElement extends HTMLElement {19 webkitRequestFullscreen?: () => Promise<void>;20 mozRequestFullScreen?: () => Promise<void>;21 msRequestFullscreen?: () => Promise<void>;22}2324// Utility functions for cross-browser Fullscreen API25function getFullscreenElement(): Element | null {26 const doc = document as VendorDocument;27 return (28 doc.fullscreenElement ||29 doc.webkitFullscreenElement ||30 doc.mozFullScreenElement ||31 doc.msFullscreenElement ||32 null33 );34}3536function requestFullscreen(element: HTMLElement) {37 const el = element as VendorElement;38 if (el.requestFullscreen) return el.requestFullscreen();39 if (el.webkitRequestFullscreen) return el.webkitRequestFullscreen();40 if (el.mozRequestFullScreen) return el.mozRequestFullScreen();41 if (el.msRequestFullscreen) return el.msRequestFullscreen();42}4344function exitFullscreen() {45 const doc = document as VendorDocument;46 if (doc.exitFullscreen) return doc.exitFullscreen();47 if (doc.webkitExitFullscreen) return doc.webkitExitFullscreen();48 if (doc.mozCancelFullScreen) return doc.mozCancelFullScreen();49 if (doc.msExitFullscreen) return doc.msExitFullscreen();50}5152function addFullscreenListener(cb: () => void) {53 document.addEventListener('fullscreenchange', cb);54 document.addEventListener('webkitfullscreenchange', cb);55 document.addEventListener('mozfullscreenchange', cb);56 document.addEventListener('MSFullscreenChange', cb);57}5859function removeFullscreenListener(cb: () => void) {60 document.removeEventListener('fullscreenchange', cb);61 document.removeEventListener('webkitfullscreenchange', cb);62 document.removeEventListener('mozfullscreenchange', cb);63 document.removeEventListener('MSFullscreenChange', cb);64}6566export function useFullscreen(67 ref: FullscreenRef = null,68): [boolean, () => void, () => void] {69 const [isFullscreen, setIsFullscreen] = useState<boolean>(false);70 const refCached = useRef(ref);7172 useEffect(() => {73 refCached.current = ref;74// … truncated
Files it writes
More from guarahooks
All 100 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| UseAbortControlleruse-abort-controller | guarahooks | Hooks | Free | no deps | |
| UseArrayStateuse-array-state | guarahooks | Hooks | Free | no deps | |
| UseAxiosuse-axios | guarahooks | Hooks | Free | no deps | |
| UseBatteryStatususe-battery-status | guarahooks | Hooks | Free | no deps | |
| UseBetterAuthuse-better-auth | guarahooks | Hooks | Free | no deps | |
| UseClickOutsideuse-click-outside | guarahooks | Hooks | Free | no deps | |
| UseConfirmuse-confirm | guarahooks | Hooks | Free | no deps | |
| UseCookieuse-cookie | guarahooks | Hooks | Free | no deps |
