Vanta JS
View demo gallery & customize effects at www.vantajs.com →
What is Vanta? / FAQs
- Add 3D animated digital art to any webpage with just a few lines of code.
- How it works: Vanta inserts an animated effect as a background into any HTML element.
- Works with vanilla JS, React, Angular, Vue, etc.
- Effects are rendered by three.js (using WebGL) or p5.js.
- Effects can interact with mouse/touch inputs.
- Effect parameters (e.g. color) can be easily modified to match your brand.
- Total additional filesize is ~120kb minified and gzipped (mostly three.js), which is smaller than comparable background images/videos.
- Vanta includes many pre-defined effects to try out. More effects will be added soon!
View demo gallery & customize effects at www.vantajs.com →
Basic usage with script tags:
More options:
VANTA
-
el: The container element.
- The Vanta canvas will be appended as a child of this element, and will assume the width and height of this element. (If you want a fullscreen canvas, make sure this container element is fullscreen.)
- This container can have other children. The other children will appear as foreground content, in front of the Vanta canvas.
-
mouseControls: (defaults to true) Set to false to disable mouse controls. Only applies to certain effects.
-
touchControls: (defaults to true) Set to false to disable touch controls. Only applies to certain effects.
-
gyroControls: (defaults to false) Set to true to allow gyroscope to imitate mouse. Only applies to certain effects.
-
NOTE: Each effect has its own specific parameters. Explore them all at www.vantajs.com!
Updating options after init:
const effect = VANTA // Later, when you want to update an animation in progress with new optionseffect // Later, if the container changes size and you want to force Vanta to redraw at the new canvas sizeeffect
Cleanup:
const effect = VANTAeffect // e.g. call this in React's componentWillUnmount
Usage with React:
npm i vanta
, then import a specific effect as follows. Make sure three.js
or p5.js
has already been included via <script> tag.
// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag Component { super thisvantaRef = React } { thisvantaEffect = } { if thisvantaEffect thisvantaEffect } { return <div ref=thisvantaRef> Foreground content goes here </div> }
Usage with React Hooks (requires React 16.8):
// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag const MyComponent = { const vantaEffect setVantaEffect = const myRef = return <div ref=myRef> Foreground content goes here </div>}
Usage with Vue 2 (SFC):
<template> <div ref='vantaRef'> Foreground content here </div></template> <script>import BIRDS from 'vanta/src/vanta.birds'// Make sure window.THREE is defined, e.g. by including three.min.js in the document head using a <script> tag export default { mounted() { this.vantaEffect = BIRDS({ el: this.$refs.vantaRef }) }, beforeDestroy() { if (this.vantaEffect) { this.vantaEffect.destroy() } }}</script>
Using THREE from npm
You can also import three
from npm, and pass it into the effect function.
... { thisvantaEffect = }...
Local dev:
Clone the repo, switch to the gallery
branch, run npm install
and npm run dev
, and go to localhost:8080.
Credits
-
General inspiration from shadertoy.com, #generative, /r/generative, /r/creativecoding, etc
-
Birds effect from https://threejs.org/examples/?q=birds#webgl_gpgpu_birds by @zz85
-
Fog effect from https://thebookofshaders.com/13/ by @patriciogonzalezvivo
-
Clouds effect from https://www.shadertoy.com/view/XslGRr by Inigo Quilez
-
Clouds2 effect from https://www.shadertoy.com/view/lsBfDz by Rune Stubbe
-
Trunk, Topology effects from http://generated.space/ by Kjetil Midtgarden Golid @kgolid