1.1.1 • Published 2 years ago

request-animation-frame-hook v1.1.1

Weekly downloads
-
License
MIT
Repository
github
Last release
2 years ago

useRequestAnimationFrame React Hook

useRequestAnimationFrame React Hook with start, stop, pause actions and Window.requestAnimationFrame() in the background.

NPM JavaScript Style Guide

Install

npm install --save request-animation-frame-hook

API

const cb = (data) => {
  const { time, fps, counter, setStop } = data;
  const { ms, s, m, h, d } = time;
};
const autoStopCb = () => {
  console.log("auto stop callback");
};
const stopValue = 2250;
const stopAfterTime = true;
const clearTimerDelay = 1000;
const params = {
  stopRules: [stopValue, stopAfterTime, clearTimerDelay],
  autoStopCb,
};
const [start, pause, setStart, setStop] = useRequestAnimationFrame(cb, params);
typeRequiredDescription
cbvoidcallback function
timeobjecttime object
ms, s, m, h, dnumbertime object values
counternumbertimer amount of refreshing
setStartvoidmethod starting or resuming timer loop
setStopvoidmethod stopping timer loop
startbooleancurrent timer start state
pausebooleancurrent timer pause state
paramsobjectstop params
stopValuenumberdepends on stopAfterTime takes the value of time in milliseconds or number of refresh counts (returned in counter variable)
stopAfterTimebooleanif stopAfterTime = false timer will stop after miliseconds defined in stopValue. if stopAfterTime = true timer will stop after refresh counts (returned in counter variable) defined in stopValue
clearTimerDelaynumberdelay in milliseconds after which timer will reset
autoStopCbvoidcallback after auto stop

Usage

import React, { useState } from "react";

import { useRequestAnimationFrame } from "request-animation-frame-hook";

const timeDefault = {
  ms: 0,
  s: 0,
  m: 0,
  h: 0,
  d: 0,
};

const Example = () => {
  const [timer, setTimer] = useState(timeDefault);
  const [fps, setFps] = useState(0);
  const [counter, setCounter] = useState(0);

  const autoStopCb = () => {
    console.log("auto stop callback");
  };

  const [start, pause, setStart, setStop] = useRequestAnimationFrame(
    (data) => {
      setTimer(data.time);
      setFps(data.fps);
      setCounter(data.counter);
    },
    { stopRules: [100, true, 2000], autoStopCb }
  );
  return (
    <div className="App">
      <h1>useRequestAnimationFrame React Hook</h1>
      <p>
        useRequestAnimationFrame React Hook with <strong>start</strong>,{" "}
        <strong>stop</strong> and <strong>pause</strong> actions
      </p>

      <div className="container">
        <h3 className="time">
          {timer.ms.toFixed(1)} ms <span className="frames"> | {fps} fps</span>
        </h3>
        <h4 className="timer">
          Time: {timer.d}:{String(timer.h % 24).padStart(2, "0")}:
          {String(timer.m % 60).padStart(2, "0")}:
          {String(timer.s % 60).padStart(2, "0")}:
          {String(Math.floor(timer.ms / 10) % 100).padStart(2, "0")}
        </h4>
        <h4 className="refreshing">Counter: {counter}</h4>

        <div className="buttons">
          <button onClick={setStart}>{start ? "Pause" : "Start"}</button>
          <button onClick={setStop} disabled={!pause && !start}>
            Stop
          </button>
        </div>
      </div>
    </div>
  );
};

Demo

Try it on CodeSandbox RequestAnimationFrame React Hook

License

MIT © ja-klaudiusz