Sparks external code
This commit is contained in:
parent
115191c3af
commit
9df26660b6
@ -14,6 +14,7 @@
|
||||
<li> <a href="./orbital-trails-extern-2/index.html">Orbital Trails 2 (theirs)</a>
|
||||
<li> <a href="./orbital-trails/index.html">Orbital Trails (mine)</a>
|
||||
<li> <a href="./bokeh/index.html">Bokeh effect (their)</a>
|
||||
<li> <a href="./sparks/index.html">Sparks (theirs)</a>
|
||||
</ul>
|
||||
</body>
|
||||
</html>
|
||||
|
197
src/sparks/app.js
Normal file
197
src/sparks/app.js
Normal file
@ -0,0 +1,197 @@
|
||||
$(window).bind('load', function () {
|
||||
const raf = function (entry) {
|
||||
window.requestAnimationFrame(entry);
|
||||
};
|
||||
const random = function (min, max) {
|
||||
max = max + 1;
|
||||
return Math.floor(Math.random() * (max - min) + min);
|
||||
}
|
||||
var app = {
|
||||
init: function () {
|
||||
this.cacheDOM();
|
||||
this.style();
|
||||
},
|
||||
cacheDOM: function () {
|
||||
this.container = $('#container');
|
||||
this.images = $('img');
|
||||
|
||||
this.mouseX = null;
|
||||
this.mouseY = null;
|
||||
},
|
||||
style: function () {
|
||||
this.images.imagesLoaded(function () {
|
||||
$(window).resize(function initial() {
|
||||
TweenMax.set(app.container, {
|
||||
opacity: 1
|
||||
});
|
||||
return initial;
|
||||
}());
|
||||
});
|
||||
},
|
||||
cursorEvents: function (e) {
|
||||
app.mouseX = e.clientX;
|
||||
app.mouseY = e.clientY;
|
||||
}
|
||||
}
|
||||
|
||||
app.init();
|
||||
|
||||
var cContainer = $('#c-container'),
|
||||
c = document.getElementById('c'),
|
||||
c2Container = $('#c2-container'),
|
||||
c2 = document.getElementById('c2'),
|
||||
cx = c.getContext('2d'),
|
||||
c2x = c2.getContext('2d'),
|
||||
particleIndex = 0,
|
||||
particles = {},
|
||||
particleNum = 1,
|
||||
particlesLoaded = false,
|
||||
Particle,
|
||||
Particle2,
|
||||
canvas,
|
||||
canvas2;
|
||||
|
||||
c.width = $('#c').outerWidth();
|
||||
c.height = $('#c').outerHeight();
|
||||
|
||||
c2.width = $('#c2').outerWidth();
|
||||
c2.height = $('#c2').outerHeight();
|
||||
|
||||
//INITIAL CANVAS DRAW
|
||||
cx.fillStyle = 'rgba(0,0,0,1)';
|
||||
cx.fillRect(0, 0, c.width, c.height);
|
||||
c2x.fillStyle = 'rgba(0,0,0,1)';
|
||||
c2x.fillRect(0, 0, c2.width, c2.height);
|
||||
|
||||
function particleFactory(thisCanvas, thisContext, thisParticleName, thisCanvasFunction) {
|
||||
|
||||
var particleIndex = 0,
|
||||
particles = {},
|
||||
particleNum = 2,
|
||||
particlesLoaded = false;
|
||||
|
||||
thisParticleName = function () {
|
||||
this.r = 8;
|
||||
this.rStart = this.r;
|
||||
this.rIncrement = this.r * -0.01;
|
||||
this.x = thisCanvas.width / 2;
|
||||
this.y = thisCanvas.height / 2;
|
||||
|
||||
this.vxIsNegative = random(1,2);
|
||||
|
||||
this.originTriggered = false;
|
||||
this.vx = this.vxIsNegative === 1 ? random(0,50) * -0.1 : random(0,50) * 0.1;
|
||||
this.vxMult = random(10,20) * 0.1;
|
||||
this.vy = random(-10, 10);
|
||||
this.vyMult = random(2,6) * -0.1;
|
||||
this.opacityLimit = 1;
|
||||
this.opacity = 1;
|
||||
this.opacityIncrement = 0.05;
|
||||
this.opacityReversing = false;
|
||||
this.gravity = 1;
|
||||
this.framerate = 0;
|
||||
this.framerateCounter = this.framerate;
|
||||
this.counter = 0;
|
||||
particleIndex++;
|
||||
particles[particleIndex] = this;
|
||||
this.id = particleIndex;
|
||||
this.life = 0;
|
||||
this.maxLife = random(0, 100);
|
||||
this.hue = random(30, 60);
|
||||
this.light = random(50, 100);
|
||||
this.color = `hsla(${this.hue},100%,${this.light}%,${this.opacity})`;
|
||||
|
||||
this.bounced = false;
|
||||
|
||||
this.duration = 60;
|
||||
this.durationTotal = this.duration + this.opacityLimit * 10;
|
||||
this.durationCounter = 0;
|
||||
}
|
||||
|
||||
thisParticleName.prototype.draw = function () {
|
||||
|
||||
if ((!this.originTriggered) && (app.mouseX != null)) {
|
||||
this.originTriggered = true;
|
||||
this.x = app.mouseX;
|
||||
this.y = app.mouseY;
|
||||
}
|
||||
this.color = `hsla(${this.hue},100%,${this.light}%,${this.opacity})`;
|
||||
thisContext.fillStyle = this.color;
|
||||
thisContext.beginPath();
|
||||
thisContext.arc(this.x, this.y, this.r, 0, 2 * Math.PI);
|
||||
thisContext.fill();
|
||||
|
||||
//START DRAW OPERATION
|
||||
this.r += this.rIncrement;
|
||||
this.x += this.vx;
|
||||
this.y += this.vy;
|
||||
this.durationCounter++;
|
||||
if (this.vx === 0) {
|
||||
this.vx++;
|
||||
}
|
||||
if (this.vxIsNegative === 1) {
|
||||
this.vx
|
||||
}
|
||||
if (this.vy === 0) {
|
||||
this.vy++;
|
||||
}
|
||||
if (this.y > thisCanvas.height - this.rStart) {
|
||||
if (!this.bounced) {
|
||||
this.vx *= this.vxMult;
|
||||
} else {
|
||||
this.vx *= 0.9;
|
||||
}
|
||||
this.bounced = true;
|
||||
this.vy *= this.vyMult;
|
||||
this.y = thisCanvas.height - this.rStart;
|
||||
}
|
||||
this.vy += this.gravity;
|
||||
if ((this.r <= 0)) {
|
||||
delete particles[this.id];
|
||||
}
|
||||
this.life++;
|
||||
//END DRAW OPERATION
|
||||
}
|
||||
|
||||
thisCanvasFunction = function () {
|
||||
thisContext.globalCompositeOperation = 'source-over';
|
||||
thisContext.fillStyle = 'rgba(0,0,0,1)';
|
||||
thisContext.fillRect(0, 0, thisCanvas.width, thisCanvas.height);
|
||||
if (!particlesLoaded) {
|
||||
for (var i = 0; i < particleNum; i++) {
|
||||
new thisParticleName();
|
||||
}
|
||||
}
|
||||
thisContext.globalCompositeOperation = 'lighter';
|
||||
for (var i in particles) {
|
||||
particles[i].draw();
|
||||
}
|
||||
}
|
||||
setInterval(thisCanvasFunction, 15);
|
||||
}
|
||||
|
||||
$(window).resize(function initial() {
|
||||
window.addEventListener('mousemove', app.cursorEvents, false);
|
||||
|
||||
c.width = $('#c').outerWidth();
|
||||
c.height = $('#c').outerHeight();
|
||||
|
||||
c2.width = $('#c2').outerWidth();
|
||||
c2.height = $('#c2').outerHeight();
|
||||
|
||||
return initial;
|
||||
}());
|
||||
|
||||
particleFactory(c, cx, Particle, canvas);
|
||||
particleFactory(c2, c2x, Particle2, canvas2);
|
||||
|
||||
TweenMax.set(c2Container, {
|
||||
transformOrigin: 'center bottom',
|
||||
scaleY: -1,
|
||||
opacity: 1
|
||||
});
|
||||
|
||||
TweenMax.set(c2, {
|
||||
filter: 'blur(10px)'
|
||||
});
|
||||
});
|
25
src/sparks/index.html
Normal file
25
src/sparks/index.html
Normal file
@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta charset="utf-8"/>
|
||||
<title>Fizzy Sparks</title>
|
||||
<link href="style.css" rel="stylesheet" />
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/TimelineMax.min.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/gsap/1.19.0/TweenMax.min.js"></script>
|
||||
<script src="https://code.jquery.com/jquery-2.2.4.js"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.1/imagesloaded.pkgd.min.js"></script>
|
||||
<script type="module" src="app.js"></script>
|
||||
</head>
|
||||
<body>
|
||||
<div id="container">
|
||||
<div id="c-container">
|
||||
<canvas id="c">Sorry.</canvas>
|
||||
</div>
|
||||
<div id="c2-container">
|
||||
<canvas id="c2">Sorry.</canvas>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</body>
|
||||
</html>
|
||||
|
48
src/sparks/style.css
Normal file
48
src/sparks/style.css
Normal file
@ -0,0 +1,48 @@
|
||||
@import 'https://fonts.googleapis.com/css?family=Lato:100,100i,300,300i,400,400i,700,700i,900,900i';
|
||||
|
||||
body,
|
||||
html {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-family: 'Lato', sans-serif;
|
||||
background-color: black;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
p,
|
||||
a,
|
||||
li {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
#container {
|
||||
width: 100vw;
|
||||
height: 100vh;
|
||||
position: relative;
|
||||
float: left;
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
#c-container,
|
||||
#c2-container {
|
||||
width: 100vw;
|
||||
height: 80vh;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
||||
|
||||
canvas {
|
||||
width: 100%;
|
||||
height: 100%;
|
||||
position: absolute;
|
||||
top: 0;
|
||||
left: 0;
|
||||
}
|
Loading…
Reference in New Issue
Block a user