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

animation-essential

v0.0.2

Published

Tiny animation library designed with simplicity and modernity at its core

Downloads

2

Readme

animation-essential

npm version License: MIT

animation-essential is a lightweight and modern animation library designed to simplify your animation needs. The library features an intuitive and easy-to-use API that allows you to create smooth and fluid animations effortlessly.

It is highly flexible and can be integrated with any library or framework of your choice such as three.js.

Core Principles

  • TypeScript-first experience: Provides a well-typed interface that makes it easy to use and work with.
  • Platform-agnostic: Designed to work on both the browser and server, without any dependencies on the DOM or browser-only APIs.
  • Focus on fundamental animation properties: Representing time and the amount of changes in animated objects with numbers and numbers only.
  • Separation of clock management: Allows you to full control over when and how animation should progress.

Installation

Getting started with animation-essential is a breeze. You can install the library using the npm package manager:

npm i animation-essential

What's included

Interpolation

The interpolation module provides a set of functions that can be used to calculate and manipulate values smoothly. The available functions include:

  • clamp: Clamps a value to be within a given range.
  • lerp: Linearly interpolates between two values.
  • smoothStep: Calculates a smooth step function with an easing effect.
  • multiPointLerp: Linearly interpolates between two consecutive values in the points given in array.
  • fractionalMix: Combines the integer part of an input value with the result of applying a mix function to its decimal part.
import { clamp, lerp, smoothStep, multiPointLerp, fractionalMix } from "animation-essential";

clamp(1.5, 0, 1); // Returns 1
lerp(0, 100, 0.5); // Returns 50
smoothStep(0, 1, 0.5); // Returns 0.5
multiPointLerp([1, 20, 300, 4000], 2.5); // Returns 160
fractionalMix(2.5, (t) => t * t); // Returns 2.25

Easing

Easing functions are predefined so that can be used to apply various easing effects to your animations. The available preset are:

  • Easing.Linear
  • Easing.Quad.In / Easing.Quad.Out / Easing.Quad.InOut
  • Easing.Cubic.In / Easing.Cubic.Out / Easing.Cubic.InOut
  • Easing.Quart.In / Easing.Quart.Out / Easing.Quart.InOut
  • Easing.Quint.In / Easing.Quint.Out / Easing.Quint.InOut
  • Easing.Sine.In / Easing.Sine.Out / Easing.Sine.InOut
  • Easing.Expo.In / Easing.Expo.Out / Easing.Expo.InOut
  • Easing.Circ.In / Easing.Circ.Out / Easing.Circ.InOut
  • Easing.Elastic.In / Easing.Elastic.Out / Easing.Elastic.InOut
  • Easing.Back.In / Easing.Back.Out / Easing.Back.InOut
  • Easing.Bounce.In / Easing.Bounce.Out / Easing.Bounce.InOut

The easing module also includes two functions that can be used to manipulate easing functions:

  • reversedEasing: Returns a reversed easing function.
  • mirroredEasing: Returns a mirrored easing function.
import { Easing, reversedEasing, mirroredEasing } from "animation-essential";

Easing.Quad.Out(0.5); // Returns 0.75

reversedEasing(Easing.Quad.Out)(0.5); // Returns 0.25
Easing.Quad.In(0.5); // Equivalent as above

mirroredEasing(Easing.Quad.In)(0.5); // Returns 0.5
Easing.Quad.InOut(0.5); // Equivalent as above

Cubic Bezier

The cubic bezier module allows you to create custom easing functions using cubic bezier curves. The cubicBezier function takes four arguments that define the coordinates of the two control points of the cubic bezier curve.

import { cubicBezier } from "animation-essential";

const customEasing = cubicBezier(0.3, 0.3, 0.3, 1);
customEasing(0.5); // Returns 0.81...

Spring

The spring module provides a simple and intuitive way to create spring animations.

/**
* A configuration of a spring function.
*
* @property {number} stiffness - The stiffness of the spring. Defaults to 200.
* @property {number} damping - The damping of the spring. Defaults to 10.
* @property {number} precision - The precision of the spring. Defaults to 1e-6.
* @property {number} fps - The frame rate used to animate the spring. Defaults to 60.
*/
export type SpringConfig = Partial<Config>;

/**
 * Creates a spring object that can be used to animate values.
 *
 * @typeparam T - The type of the object being animated.
 * @param {T} obj - The object to animate.
 * @param {SpringConfig} config - The configuration of the spring.
 * @returns {Spring<T>} A spring object that can be used to animate values.
 */
function spring<T>(obj: T, config?: SpringConfig): Spring<T>;
import { spring } from "animation-essential";

const testObject = {
  simpleNumber: 0,

  get posZ() { return mesh.group.position.z; },
  set posZ(v) { mesh.group.position.z = v; },
};

// Create a spring object
const springObject = spring(testObject);
requestAnimationFrame(() => {
  springObject.update();
  console.log({ ...testObject }); // Values of testObject will be animated
});

// Update properties
springObject.sampleNumber = 100;
springObject.posZ = -50;

Tween

The tween module allows you to create complex animation sequences using a simple and intuitive syntax.

import { Easing, tween, lerp } from "animation-essential";

const t = tween((t) => {
  t.on(200, 2000) // From 200ms to 2000ms
    .easing(Easing.Cubic.InOut) // Ease time with Cubic.InOut
    .run((v) => { // v is [0, 1]
      const maxZ = mainCamera.position.z - mainCamera.near;
      mesh.group.position.z = lerp(maxZ - mesh.size, 0, v);
    });
  t.on(2000, 1800)
    .easing(Easing.Cubic.Out)
    .run((v) => {
      mesh.material.reflection = lerp(0, initialMaterialParams.reflection, v);
      mesh.material.dispersion = lerp(0, initialMaterialParams.dispersion, v);
    });
  t.on(2000, 2200)
    .easing(Easing.Quart.InOut)
    .run((v) => {
      mesh.material.ior = lerp(1, initialMaterialParams.ior, v);
    });

  // Lifecycle callbacks
  t.onStart(() => {
    console.log("Tween started");
  });
  t.onEnd(() => {
    console.log("Tween ended");
  });
});

// Start the tween
requestAnimationFrame(() => t.update());