JSPM

  • Created
  • Published
  • Downloads 951
  • Score
    100M100P100Q107164F
  • License MIT

A React Hooks package for fullscreen.

Package Exports

  • @rooks/use-fullscreen

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (@rooks/use-fullscreen) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

@rooks/use-fullscreen

TitleCard

Build Status

About

Use full screen api for making beautiful and emersive experinces.

Installation

npm install --save @rooks/use-fullscreen

Importing the hook

import useFullscreen from "@rooks/use-fullscreen"

Usage

import React, { useState, useRef } from "react";
import ReactDOM from "react-dom";
import { useFullscreen } from "rooks";

const styles = {
  html: {
    fontFamily: "'Helvetica Neue', Helvetica, Arial, sans-serif",
    padding: "30px 10px 0 0",
    fontSize: "20px",
    lineHeight: "1.4",
    color: "#737373",
    background: "#f0f0f0",
    WebkitFontSmoothing: "antialiased"
  },
  hr: {
    border: "none",
    borderTop: "1px solid #e6e6e6",
    margin: "20px 0"
  },
  a: {
    color: "#666"
  },
  h1: {
    margin: "0",
    fontSize: "40px",
    textAlign: "center"
  },
  ul: {
    padding: "0 0 0 40px",
    margin: "1em 0",
    padding: "0",
    margin: "40px 0 0 0",
    listStyle: "none"
  },
  button: {
    fontSize: "13px"
  },
  container: {
    width: "500px",
    padding: "30px 20px",
    margin: "0 auto 50px auto",
    background: "#fcfcfc",
    textAlign: "center",
    border: "1px solid #b3b3b3",
    borderRadius: "4px",
    boxShadow: "0 1px 10px #a7a7a7, inset 0 1px 0 #fff"
  },
  demo_img: {
    cursor: "pointer"
  },
  header_p: {
    fontSize: "17px"
  }
};

function Demo() {
  const container = useRef();
  const {
    isEnabled,
    toggle,
    onChange,
    onError,
    request,
    exit,
    isFullscreen,
    element
  } = useFullscreen();
  const [changeCount, setChangeCount] = useState(0);
  const [errorCount, setErrorCount] = useState(0);

  onChange(() => {
    setChangeCount(changeCount + 1);
  });
  onError(() => {
    setErrorCount(errorCount + 1);
  });

  return (
    <div id="document" style={styles.html}>
      <section ref={container} id="container" style={styles.container}>
        <header>
          <h1 styles={styles.h1}>useFullscreen</h1>
          <p style={styles.header_p}>
            Simple react hook for cross-browser usage of the JavaScript{" "}
            <a
              style={styles.a}
              href="https://developer.mozilla.org/en/DOM/Using_full-screen_mode"
            >
              Fullscreen API
            </a>
            , which lets you bring the page or any element into fullscreen.
            Smoothens out the browser implementation differences, so you don't
            have too.
          </p>
        </header>
        <hr style={styles.hr} />
        <section>
          <p>Try out the Fullscreen API</p>
          <button
            style={styles.button}
            onClick={() => {
              request(container.current);
            }}
          >
            Request
          </button>
          <button
            style={styles.button}
            onClick={() => {
              exit();
            }}
          >
            Exit
          </button>
          <button
            style={styles.button}
            onClick={() => {
              toggle();
            }}
          >
            Toggle
          </button>
          <button style={styles.button} onClick={() => request()}>
            Request document
          </button>
        </section>
        <section>
          <ul style={styles.ul}>
            <li id="supported">
              Supported/allowed: {JSON.stringify(isEnabled)}
            </li>
            <li id="status">Is fullscreen: {JSON.stringify(isFullscreen)}</li>
            <li>
              Changed {changeCount} {changeCount !== 1 ? "times" : "time"}
            </li>
            <li>
              {errorCount} {errorCount !== 1 ? "errors" : "error"}
            </li>
            <li id="element">
              Element:{" "}
              {element
                ? `${element.tagName.toLowerCase()} ${element.id}`
                : "null"}
            </li>
          </ul>
        </section>
        <input placeholder="Keyboard test" />
        <hr style={styles.hr} />
        <section>
          <p>Click the image to make it fullscreen</p>
          <img
            id="demo-img"
            src="https://sindresorhus.com/unicorn"
            width="500"
            style={styles.demo_img}
            onClick={e => {
              toggle(e.target);
            }}
          />
        </section>
      </section>
    </div>
  );
}


render(<Demo/>)