shadcn-ahooks

useFullscreen

manages DOM full screen.

Overview

manages DOM full screen.

Documentation and Examples

Installation

Open in
pnpm dlx shadcn@latest add https://shadcn-ahooks.vercel.app/r/useFullscreen.json
npx shadcn@latest add https://shadcn-ahooks.vercel.app/r/useFullscreen.json
yarn shadcn@latest add https://shadcn-ahooks.vercel.app/r/useFullscreen.json
bun shadcn@latest add https://shadcn-ahooks.vercel.app/r/useFullscreen.json

manages DOM full screen.

Examples

Default usage

import useFullscreen from '@/src/hooks/ahooks/useFullscreen';
import React, { useRef } from 'react';

const Example = () => {
  const ref = useRef(null);
  const [isFullscreen, { enterFullscreen, exitFullscreen, toggleFullscreen }] = useFullscreen(ref);
  return (
    <div ref={ref} style={{ background: 'white' }}>
      <div style={{ marginBottom: 16 }}>{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}</div>
      <div>
        <button type="button" onClick={enterFullscreen}>
          enterFullscreen
        </button>
        <button type="button" onClick={exitFullscreen} style={{ margin: '0 8px' }}>
          exitFullscreen
        </button>
        <button type="button" onClick={toggleFullscreen}>
          toggleFullscreen
        </button>
      </div>
    </div>
  );
};

export default Example;

Image full screen

import React from 'react';
import useFullscreen from '@/src/hooks/ahooks/useFullscreen';
import img from './react-hooks.jpg';

export default () => {
  const [, { enterFullscreen }] = useFullscreen(() => document.getElementById('fullscreen-img'));
  return (
    <div style={{ background: 'white' }}>
      <div style={{ marginBottom: 16 }}>
        <img id="fullscreen-img" src={img} style={{ width: 320 }} alt="" />
      </div>
      <button type="button" onClick={enterFullscreen}>
        enterFullscreen
      </button>
    </div>
  );
};

Page full screen

import React, { useRef } from 'react';
import useFullscreen from '@/src/hooks/ahooks/useFullscreen';

export default () => {
  const ref = useRef(null);
  const [isFullscreen, { toggleFullscreen, enterFullscreen, exitFullscreen }] = useFullscreen(ref, {
    pageFullscreen: true,
  });

  return (
    <div style={{ background: 'white' }}>
      <div ref={ref} style={{ background: '#4B6BCD', padding: 12 }}>
        <div style={{ marginBottom: 16 }}>{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}</div>
        <button type="button" onClick={enterFullscreen}>
          enterFullscreen
        </button>
        <button type="button" onClick={exitFullscreen} style={{ margin: '0 8px' }}>
          exitFullscreen
        </button>
        <button type="button" onClick={toggleFullscreen}>
          toggleFullscreen
        </button>
      </div>
    </div>
  );
};

Coexist with other full screen operations

import React, { useRef } from 'react';
import useFullscreen from '@/src/hooks/ahooks/useFullscreen';

function vanillaToggleFullscreen(element) {
  const isFullscreen = !!document.fullscreenElement;

  if (isFullscreen) {
    document.exitFullscreen();
  } else {
    element.requestFullscreen();
  }
}

export default () => {
  const ref = useRef(null);
  const [isFullscreen, { toggleFullscreen }] = useFullscreen(ref);

  return (
    <div ref={ref} style={{ background: 'white' }}>
      <div style={{ marginBottom: 16 }}>{isFullscreen ? 'Fullscreen' : 'Not fullscreen'}</div>
      <div>
        <button style={{ marginRight: '8px' }} onClick={toggleFullscreen}>
          ahooks toggleFullscreen
        </button>
        <button onClick={() => vanillaToggleFullscreen(ref.current)}>
          vanilla toggleFullscreen
        </button>
      </div>
    </div>
  );
};

API

const [isFullscreen, {
  enterFullscreen,
  exitFullscreen,
  toggleFullscreen,
  isEnabled,
}] = useFullScreen(
  target,
  options?: Options
);

Params

PropertyDescriptionTypeDefault
targetDOM element or refElement | () => Element | MutableRefObject<Element>-
optionsSettingOptions-

Options

PropertyDescriptionTypeDefault
onExitExit full screen trigger() => void-
onEnterEnter full screen trigger() => void-
pageFullscreenWhether to enable full screen of page. If its type is object, it can set className and z-index of the full screen elementboolean | { className?: string, zIndex?: number }false

Result

PropertyDescriptionType
isFullscreenIs full screenboolean
enterFullscreenEnter full screen() => void
exitFullscreenExit full screen() => void
toggleFullscreenToggle full screen() => void
isEnabledIs enable screenfullboolean

On this page