JSFiddle - React, Tailwind, and code Playground
by justinwinter
HTML
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery/2.1.3/jquery.min.js"></script>
<canvas id="waves"></canvas>
CSS
body {
background-color: #000;
}
JavaScript
/**
* Generates multiple customizable animated sines waves
* using a canvas element. Supports retina displays and
* limited mobile support
*
* I've created a seperate library based on this pen.
* Check it out at https://github.com/isuttell/sine-waves
*/
function SineWaveGenerator(options) {
$.extend(this, options || {});
if(!this.el) { throw "No Canvas Selected"; }
this.ctx = this.el.getContext('2d');
if(!this.waves.length) { throw "No waves specified"; }
// Internal
this._resizeWidth();
window.addEventListener('resize', this._resizeWidth.bind(this));
// User
this.resizeEvent();
window.addEventListener('resize', this.resizeEvent.bind(this));
if(typeof this.initialize === 'function') {
this.initialize.call(this);
}
// Start the magic
this.loop();
}
// Defaults
SineWaveGenerator.prototype.speed = 10;
SineWaveGenerator.prototype.amplitude = 50;
SineWaveGenerator.prototype.wavelength = 50;
SineWaveGenerator.prototype.segmentLength = 10;
SineWaveGenerator.prototype.lineWidth = 2;
SineWaveGenerator.prototype.strokeStyle = 'rgba(240, 45, 255, 0.2)';
SineWaveGenerator.prototype.resizeEvent = function() {};
// fill the screen
SineWaveGenerator.prototype._resizeWidth = function() {
this.dpr = window.devicePixelRatio || 1;
this.width = this.el.width = window.innerWidth * this.dpr;
this.height = this.el.height = window.innerHeight * this.dpr;
this.el.style.width = window.innerWidth + 'px';
this.el.style.height = window.innerHeight + 'px';
this.waveWidth = this.width * 0.95;
this.waveLeft = this.width * 0.25;
}
SineWaveGenerator.prototype.clear = function () {
this.ctx.clearRect(0, 0, this.width, this.height);
}
SineWaveGenerator.prototype.time = 0;
SineWaveGenerator.prototype.update = function(time) {
this.time = this.time - 0.007;
if(typeof time === 'undefined') {
time = this.time;
}
var index = -1;
var length = this.waves.length;
while(++index < length) {
var...