usePictureInPicture
Controls Picture-in-Picture mode for video elements.
Usage
import { usePictureInPicture } from "@siberiacancode/reactuse";
const pip = usePictureInPicture<HTMLVideoElement>();
// or
const pip = usePictureInPicture(ref, { onEnter: () => {} });Example
import { usePictureInPicture } from "@siberiacancode/reactuse";
const pip = usePictureInPicture<HTMLVideoElement>();
return (
<div>
<video ref={pip.ref} src="/video.mp4" controls />
<button onClick={() => pip.toggle()}>
{pip.open ? "Exit" : "Enter"} PiP
</button>
</div>
);onEnter:
Enter callback.
const pip = usePictureInPicture<HTMLVideoElement>({
onEnter: () => console.log("enter"),
});onExit:
Exit callback.
const pip = usePictureInPicture<HTMLVideoElement>({
onExit: () => console.log("exit"),
});Notes
- Hook uses the Picture-in-Picture API.
Type Declarations
import type { HookTarget } from "@siberiacancode/reactuse";
import type { StateRef } from "@siberiacancode/reactuse";
export interface UsePictureInPictureOptions {
onEnter?: () => void;
onExit?: () => void;
}
export interface UsePictureInPictureReturn {
open: boolean;
supported: boolean;
enter: () => Promise<void>;
exit: () => Promise<void>;
toggle: () => Promise<void>;
}
export interface UsePictureInPicture {
(
target: HookTarget,
options?: UsePictureInPictureOptions
): UsePictureInPictureReturn;
(options?: UsePictureInPictureOptions): UsePictureInPictureReturn & {
ref: StateRef<HTMLVideoElement>;
};
}
export declare const usePictureInPicture: UsePictureInPicture;