npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@phntms/use-animation-frame

v0.0.1

Published

A React hook to effortlessly run a single shared requestAnimationFrame() for all instances of the hook used with adjustable frames per second.

Downloads

830

Readme

use-animation-frame

NPM version Actions Status PR Welcome

A React hook to effortlessly run a single shared requestAnimationFrame() for all instances of the hook used with adjustable FPS (frames per second).

Installation

Install this package with npm.

npm i @phntms/use-animation-frame

API

Accepts first callback and second framesPerSecond:

useAnimationFrame(callback, framesPerSecond);

callback is required and is called on every animation frame window.

framesPerSecond is optional and can be used to control how often callback triggers. By default callback will trigger around ~60 times per second (approximately every ~16ms), though you can change this, for example, 30 can be used to trigger callback ~30 times per second.

Note: Any FPS can be used, although intervals cannot be faster than the requestAnimationFrame() limit.

Output

The callback returns deltaTime - the total time in ms since the hook last run.

Note: Due to the nature of requestAnimationFrame() this will always likely differ in time.

Single Shared requestAnimationFrame() Instance

Most implementations of this hook create unique requestAnimationFrame() loops for all instances of the hook. This is fine when you only use the hook once, but if you start running multiple hooks simultaneously this can get expensive. To counteract this issue, this library only ever creates a single global loop that we 'hook' into for all instances of the hook used. As such, you haven't got to worry about the potential performance hit of using multiple instances of the hook. Additionally if used alongside custom framesPerSecond, you can get much greater performance out of your components!

Examples

import useAnimationFrame from "@phntms/use-animation-frame";

useAnimationFrame((deltaTime: number) => {
  console.log(
    `I'm called approximately every ~16ms, but I was actually triggered after ${deltaTime}ms.`
  );
});

useAnimationFrame((deltaTime: number) => {
  console.log(
    `I'm called approximately 30 times per second, but I was actually trigger after ${deltaTime}ms.`
  );
}, 30);

🍰 Contributing

Want to get involved, or found an issue? Please contribute using the GitHub Flow. Create a branch, add commits, and open a Pull Request or submit a new issue.

Please read CONTRIBUTING for details on our CODE_OF_CONDUCT, and the process for submitting pull requests to us!