Anime (/ˈæn.ə.meɪ/) is a flexible yet lightweight JavaScript animation library.
It works with CSS, Individual Transforms, SVG, DOM attributes and JS Objects.
Features
- Specific animation parameters
- Specific target values
- Multiple timing values
- Playback controls
- Motion path
Examples and demos
var myAnimation = anime({
targets: ['.blue', '.green'],
translateX: '13rem',
rotate: 180,
borderRadius: 8,
duration: 2000,
loop: true
});- Chrome
- Safari
- Opera
- Firefox
- IE 10+
npm install animejs / bower install animejs or download
Then insert anime.min.js in your html:
<script src="anime.min.js"></script>Or import it in your JavaScript
import anime from 'animejs'Defines the elements or JS Objects to animate.
| Accept | Examples
| --- | --- | ---
| CSS Selectors | 'div','.thing','path'
| DOM Element | document.querySelector('.thing')
| Nodelist | document.querySelectorAll('.thing')
| JavaScript Object | {prop1: 100, prop2: 200}
| JavaScript Array | ['.thing-1', 'div']
| Names | Defaults | Types |
|---|---|---|
| delay | 0 |
number, function (el, index, total) |
| duration | 1000 |
number, function (el, index, total) |
| autoplay | true |
boolean |
| loop | false |
number, boolean |
| direction | 'normal' |
'normal', 'reverse', 'alternate' |
| easing | 'easeOutElastic' |
console log anime.easings to get the complete functions list |
| elasticity | 400 |
number (higher is stronger) |
| round | false |
number, boolean |
| begin | undefined |
function (animation) |
| update | undefined |
function (animation) |
| complete | undefined |
function (animation) |
Parameters can be set individually to properties by using an Object.
Specific property parameters are :
- value (required)
- delay
- duration
- easing
Example:
anime({
targets: 'div',
translateX: '13rem',
rotate: {
value: 180,
duration: 1500,
easing: 'easeInOutQuad'
},
scale: {
value: 2,
delay: 150,
duration: 850,
easing: 'easeInOutExpo',
},
direction: 'alternate',
loop: true
});Delays and durations can be specific to each targeted elements by using a function.
Available function arguments:
| Positions | Names | Infos |
|---|---|---|
| 1 | target | The targeted element |
| 2 | index | The target index (start at 0) |
| 3 | length of targets | The total number of targets (start at 0) |
Example:
anime({
targets: 'div',
translateX: '13.5rem',
scale: [.75, .9],
delay: function(el, index) {
return index * 80;
},
direction: 'alternate',
loop: true
});Any property can be animated, as long as the property value contains at least one numerical value.
| Types | Examples
| --- | --- | ---
| CSS Properties | width, borderRadius, 'background-color'
| Individual transforms | translateX, rotate, scaleY
| SVG attributes | d, rx, transform
| DOM attributes | value, volume
| Object properties | any object property containing at least one number
Defines the end value of the animation.
| Types | Examples | Infos |
|---|---|---|
| String | '100rem' |
Recommended technique. Will force the animation to use a specific value, but doesn't convert units. |
| Number | 100 |
Will use default units if possible. Doesn't work with properties that aren't specified in the CSS, or non-numerical values (e.g. margin: auto; left: auto; etc..). |
Example:
.div {
width: 20px;
}anime({
targets: 'div',
translateX: '3rem', // Will translate the div from '0rem' to '3rem'
width: '100', // Will be converted to '100px' because the width is '20px' in the CSS
});Defines the start and end values of the animation.
Example:
anime({
targets: 'div',
translateX: [50, 250] // Will start at 50px and end at 250px
});Property values can be specific to each targeted elements by using a function.
Available function arguments:
| Positions | Names | Infos |
|---|---|---|
| 1 | target | The targeted element |
| 2 | index | The target index (start at 0) |
Examples:
anime({
targets: 'div',
translateX: function(el, index) {
return anime.random(50, 100); // Will set a random value from 50 to 100 to each divs
}
});anime({
targets: 'path',
strokeDashoffset: function(el) {
var pathLength = el.getTotalLength();
return [pathLength, 0]; // Will use the exact path length for each targeted path elements
}
});Play, pause, restart and seek the animation.
| Names | Infos | Arguments |
|---|---|---|
.play() |
Play the animation | animation parameters object |
.pause() |
Pause the animation | none |
.restart() |
Restart the animation | animation parameters object |
.seek() |
Advance in the animation | a percentage, or an object {time: 1250} |
var myAnimation = anime({
targets: 'div',
translateX: 100,
autoplay: false
});
myAnimation.play(); // Manually play the animationAnimate the transform properties along an SVG path by using the anime.path() Object.
Transforms compatible with a motion path:
| Names | Infos |
|---|---|
translateX |
follow the x path coordinate |
translateY |
follow the y path coordinate |
rotate |
follow the path angle value |
Notes: IE cannot apply CSS transforms on SVG elements.
Example:
var myPath = anime.path('path');
anime({
targets: 'div',
translateX: myPath,
translateY: myPath,
rotate: myPath
});Animate any JS Object attribute.
Example:
var myObject = {
one: 0,
two: 2000
}
var myAnimation = anime({
targets: myObject,
one: 9999,
two: 4200,
duration: 5000,
round: true,
easing: 'linear',
loop: true,
update: function() {
console.log(myObject);
}
});Return an array of all active animations objects
anime.list;Change all animations speed (from 0 to 1).
anime.speed = .5; // Will slow down all animations by half of their original speedReturn the complete list of anime.js easing functions
anime.easings;Remove one or multiple targets from the animation.
anime.remove('.item-2'); // Will remove all divs with the class '.item-2'Get current valid value from an element.
anime.getValue('div', 'translateX'); // Will return '100px'Generate a random number between two numbers.
anime.random(10, 40); // Will return a random number between 10 and 40====
MIT License. © 2016 Julian Garnier.
Big thanks to Animate Plus and Velocity that inspired anime.js API, and jQuery UI from which the easing functions come from.