0.1.3 • Published 3 years ago

@urpflanze/animation v0.1.3

Weekly downloads
-
License
GPL-3.0-or-later
Repository
github
Last release
3 years ago

Synopsis

This package is used by the Urpflanze javascript library to create animations.

You can use it in browser or in Node.

The main purpose is to interpolate values based on time.

Donate

I am trying to create a tool for those who want to approach the world of programming or for programmers who want to approach the world of creative coding.

I have spent a lot of time and will spend more to support this project. I also have in mind a web editor (open-source) where you can use the features of this library in the browser.

You can see a preview here

npm.io npm.io

npm.io npm.io


Menu

Installation

You can install the library with the command:

npm i @urpflanze/animation --save

And import into your project

/**
 * Full importing
 */
import * as Animation from '@urpflanze/animation'

const anim = Animation.Simple({ from: 0, to: 100, duration: 1000 })
const value = anim([currentTime])

// Or

const animObj = Animation.createAnimation({ from: 0, to: 100, duration: 1000 })
animObj.update([currentTime])
animObj.value // current animation value

Otherwise you can use from the browser using a CDN

<!-- ES Modules -->
<script type="module">
	import * as Animation from 'https://esm.run/@urpflanze/animation'

	//...
</script>

<!-- UMD -->
<script src="https://cdn.jsdelivr.net/npm/@urpflanze/animation"></script>
<script>
	// Animation.[method]
</script>

Create Animation

const anim = Animation.Simple({
	from: 0,
	to: 100,
	duration: 1000,
	loop: 2,
})

// total animation duration 2000 (1000 * 2 loop)

console.log(anim(-10)) // 0 (not started)
console.log(anim(0)) // 0 (started)
console.log(anim(500)) // 50 (loop: 1)
console.log(anim(1500)) // 50 (loop: 2)
console.log(anim(2200)) // 100 (ended)

Animation parameters

NameTypedefaultDescription
fromnumber | string | Array<number | string>-start value
tonumber | string | Array<number | string>-end value
durationnumber1000Animation duration in milliseconds
directionnormal | reverse | alternatenormalDirection of animation. Alternate goes from 'from' to 'to' and from 'to' to 'from'
loopnumber | booleanfalseDefine a number of repetitions
interpolatorTInterpolatorType of value interpolation
delaynumber0Delay of animation start
afterDelaynumber0Delay after animation end loop
roundnumberdecimal to be rounded
colorTransitionModehue | rgbrgbcolor interpolation mode (from and to)

Interpolation functions

You can pass the interpolator property as a string or as an object to pass parameters:

const animElastic = Animation.Simple({
	from: 0,
	to: 100,
	duration: 1000,
	interpolator: 'elasticOut',
})

const animElasticWithParams = Animation.Simple({
	from: 0,
	to: 100,
	duration: 1000,
	interpolator: {
		type: 'elasticOut',
		params: {
			amplitude: 2,
		},
	},
})

Interpolation and Easings

NameParams
wavephase
cubicBezierx1, x2, y1, y2
linear
quadraticIn
quadraticOut
quadraticInOut
cubicIn
cubicOut
cubicInOut
quarticIn
quarticOut
quarticInOut
quinticIn
quinticOut
quinticInOut
sinusoidalIn
sinusoidalOut
sinusoidalInOut
exponentialIn
exponentialOut
exponentialInOut
circularIn
circularOut
circularInOut
bounceIn
bounceOut
bounceInOut
backInovershoot
backOutovershoot
backInOutovershoot
elasticInamplitude, period
elasticOutamplitude, period
elasticInOutamplitude, period

Utilities

For more complex animations you can use utility methods:

import { clock, clockOffset, Easings } from '@urpflanze/animation'

requestAnimationFrame(time => {
	// from 0 to 1000 and from 1000 to 0, total duration 2000ms (loop)
	const animationTime = clock(time, 1000, true, 'alternate')
	const value = Easings.bounceOut(animationTime, 100, 200, 1000)

	// or
	// const animationTimeOffset = clockOffset(time, 1000, true, 'alternate')
	// const value = Easings.bounceOut(animationTimeOffset, 100, 200)
})