# tween.js JavaScript tweening engine for easy animations, incorporating optimised Robert Penner's equations. [![NPM Version][npm-image]][npm-url] [![CDNJS][cdnjs-image]][cdnjs-url] [![NPM Downloads][downloads-image]][downloads-url] [![Build and Tests][ci-image]][ci-url] **Update Note** In v18 the script you should include has moved from `src/Tween.js` to `dist/tween.umd.js`. See the [installation section](#Installation) below. --- ```javascript const box = document.createElement('div') box.style.setProperty('background-color', '#008800') box.style.setProperty('width', '100px') box.style.setProperty('height', '100px') document.body.appendChild(box) // Setup the animation loop. function animate(time) { requestAnimationFrame(animate) TWEEN.update(time) } requestAnimationFrame(animate) const coords = {x: 0, y: 0} // Start at (0, 0) const tween = new TWEEN.Tween(coords) // Create a new tween that modifies 'coords'. .to({x: 300, y: 200}, 1000) // Move to (300, 200) in 1 second. .easing(TWEEN.Easing.Quadratic.Out) // Use an easing function to make the animation smooth. .onUpdate(() => { // Called after tween.js updates 'coords'. // Move 'box' to the position described by 'coords' with a CSS translation. box.style.setProperty('transform', `translate(${coords.x}px, ${coords.y}px)`) }) .start() // Start the tween immediately. ``` [Test it with CodePen](https://codepen.io/mikebolt/pen/zzzvZg) ## Installation Currently npm is required to build the project. ```bash git clone https://github.com/tweenjs/tween.js cd tween.js npm i . npm run build ``` This will create some builds in the `dist` directory. There are currently four different builds of the library: - UMD : tween.umd.js - AMD : tween.amd.js - CommonJS : tween.cjs.js - ES6 Module : tween.es.js You are now able to copy tween.umd.js into your project, then include it with a script tag. This will add TWEEN to the global scope. ```html ``` ### With `require('@tweenjs/tween.js')` You can add tween.js as an npm dependency: ```bash npm i @tweenjs/tween.js@^18 ``` If you are using Node, Webpack, or Browserify, then you can now use the following to include tween.js: ```javascript const TWEEN = require('@tweenjs/tween.js') ``` ## Features - Does one thing and one thing only: tween properties - Doesn't take care of CSS units (e.g. appending `px`) - Doesn't interpolate colours - Easing functions are reusable outside of Tween - Can also use custom easing functions ## Documentation - [User guide](./docs/user_guide.md) - [Contributor guide](./docs/contributor_guide.md) - [Tutorial](http://learningthreejs.com/blog/2011/08/17/tweenjs-for-smooth-animation/) using tween.js with three.js - Also: [libtween](https://github.com/jsm174/libtween), a port of tween.js to C by [jsm174](https://github.com/jsm174) - Also: [es6-tween](https://github.com/tweenjs/es6-tween), a port of tween.js to ES6/Harmony by [dalisoft](https://github.com/dalisoft) - [Understanding tween.js](https://mikebolt.me/article/understanding-tweenjs.html) ## Examples
![]() |
Custom functions (source) |
![]() |
Stop all chained tweens (source) |
![]() |
Yoyo (source) |
![]() |
Relative values (source) |
![]() |
Repeat (source) |
![]() |
Dynamic to (source) |
![]() |
Array interpolation (source) |
![]() |
Video and time (source) |
![]() |
Simplest possible example (source) |
![]() |
Graphs (source) |
![]() |
Black and red (source) |
![]() |
Bars (source) |
![]() |
hello world (source) |