useFullscreen
hookas/use-fullscreenFreeHook
A hook to handle fullscreen mode
Install it
npx shadcn@latest add https://hookas.letstri.dev/r/use-fullscreen.jsonSource
1'use client'23import * as React from 'react'45export function useFullscreen({6 element,7 onFullscreenChange,8}: {9 element?: React.RefObject<HTMLElement>10 onFullscreenChange?: (isFullscreen: boolean) => void11} = {}) {12 const [isFullscreen, setIsFullscreen] = React.useState(false)1314 const enterFullscreenEvent = React.useEffectEvent(async () => {15 const targetElement = element?.current || document.documentElement1617 try {18 if (targetElement.requestFullscreen) {19 await targetElement.requestFullscreen()20 }21 else if ('mozRequestFullScreen' in targetElement && typeof targetElement.mozRequestFullScreen === 'function') {22 await targetElement.mozRequestFullScreen()23 }24 else if ('webkitRequestFullscreen' in targetElement && typeof targetElement.webkitRequestFullscreen === 'function') {25 await targetElement.webkitRequestFullscreen()26 }27 else if ('msRequestFullscreen' in targetElement && typeof targetElement.msRequestFullscreen === 'function') {28 await targetElement.msRequestFullscreen()29 }30 }31 catch (error) {32 console.error('Failed to enter fullscreen mode:', error)33 }34 })3536 const exitFullscreenEvent = React.useEffectEvent(async () => {37 try {38 if (document.exitFullscreen) {39 await document.exitFullscreen()40 }41 else if ('mozCancelFullScreen' in document && typeof document.mozCancelFullScreen === 'function') {42 await document.mozCancelFullScreen()43 }44 else if ('webkitExitFullscreen' in document && typeof document.webkitExitFullscreen === 'function') {45 await document.webkitExitFullscreen()46 }47 else if ('msExitFullscreen' in document && typeof document.msExitFullscreen === 'function') {48 await document.msExitFullscreen()49 }50 }51 catch (error) {52 console.error('Failed to exit fullscreen mode:', error)53 }54 })5556 const toggleFullscreenEvent = React.useEffectEvent(() => {57 if (isFullscreen) {58 exitFullscreenEvent()59 }60 else {61 enterFullscreenEvent()62 }63 })6465 React.useEffect(() => {66 const handleFullscreenChange = () => {67 const fullscreenElement68 = document.fullscreenElement69 || (document as any).mozFullScreenElement70 || (document as any).webkitFullscreenElement71 || (document as any).msFullscreenElement7273 const newIsFullscreen = !!fullscreenElement74 setIsFullscreen(newIsFullscreen)7576 if (onFullscreenChange) {77// … truncated
Files it writes
More from hookas
All 30 items| Component | Registry | Kind | Access | Installs | Command |
|---|---|---|---|---|---|
| useAsyncEffectuse-async-effect | hookas | Hooks | Free | no deps | |
| useClickOutsideuse-click-outside | hookas | Hooks | Free | no deps | |
| useDebounceCallbackuse-debounced-callback | hookas | Hooks | Free | no deps | |
| useDebounceMemouse-debounced-memo | hookas | Hooks | Free | no deps | |
| useDebounceStateuse-debounced-state | hookas | Hooks | Free | no deps | |
| useElementSizeuse-element-size | hookas | Hooks | Free | no deps | |
| useIntervaluse-interval | hookas | Hooks | Free | no deps | |
| useIsInViewportuse-is-in-viewport | hookas | Hooks | Free | no deps |
