Fireworks 3
Same particle system. Rocket extends as custom particle.
by ravimallya
HTML
<h1 class="happy"><span class="fire">H</span><span class="burn">a</span><span class="burn">p</span><span class="fire">p</span><span class="burn">y</span> <span class="fire">D</span><span class="fire">i</span><span class="fire">w</span><span class="fire">a</span><span class="burn">l</span><span class="fire">i</span></h1>
CSS
body {
background-color: #000000;
margin: 0px;
overflow: hidden;
color: #FFF;
padding:0;
}
h1.happy {
font-size: 2em;
font-family: 'Amethysta', serif;
text-align: center;
line-height: 1.4em;
text-transform: uppercase;
letter-spacing: .3em;
white-space:nowrap;
position:absolute;
top:20%;
left:0;
right:0;
}
h1.happy span {
color: #000;
font-family: sans-serif;
font-size: 2em;
text-transform: lowercase;
vertical-align: middle;
letter-spacing: .2em;
}
.fire {
animation: animation 1s ease-in-out infinite alternate;
-moz-animation: animation 1s ease-in-out infinite alternate;
-webkit-animation: animation 1s ease-in-out infinite alternate;
-o-animation: animation 1s ease-in-out infinite alternate;
}
.burn {
animation: animation .65s ease-in-out infinite alternate;
-moz-animation: animation .65s ease-in-out infinite alternate;
-webkit-animation: animation .65s ease-in-out infinite alternate;
-o-animation: animation .65s ease-in-out infinite alternate;
}
@keyframes animation
{
0% {text-shadow: 0 0 20px #fefcc9,
10px -10px 30px #feec85,
-20px -20px 40px #ffae34,
20px -40px 50px #ec760c,
-20px -60px 60px #cd4606,
0 -80px 70px #973716,
10px -90px 80px #451b0e;}
100% {text-shadow: 0 0 20px #fefcc9,
10px -10px 30px #fefcc9,
-20px -20px 40px #feec85,
22px -42px 60px #ffae34,
-22px -58px 50px #ec760c,
0 -82px 80px #cd4606,
10px -90px 80px #973716;}
}
@-moz-keyframes animation
{
0% {text-shadow: 0 0 20px #fefcc9,
10px -10px 30px #feec85,
-20px -20px 40px #ffae34,
20px -40px 50px #ec760c,
-20px -60px 60px #cd4606,
0 -80px 70px #973716,
10px -90px 80px #451b0e;}
100% {text-shadow: 0 0 20px #fefcc9,
10px -10px 30px #fefcc9,
-20px -20px 40px #feec85,
22px -42px 60px #ffae34,
-22px -58px 50px #ec760c,
0 -82px 80px #cd4606,
10px -90px 80px #973716;}
}
@-webkit-keyframes animation
{
0% {text-shadow: 0 0 20px #fefcc9,
10px -10px 30px #feec85,
...
JavaScript
var SCREEN_WIDTH = window.innerWidth,
SCREEN_HEIGHT = window.innerHeight,
mousePos = {
x: 400,
y: 300
},
// create canvas
canvas = document.createElement('canvas'),
context = canvas.getContext('2d'),
particles = [],
rockets = [],
MAX_PARTICLES = 400,
colorCode = 0;
// init
$(document).ready(function() {
document.body.appendChild(canvas);
canvas.width = SCREEN_WIDTH;
canvas.height = SCREEN_HEIGHT;
setInterval(launch, 800);
setInterval(loop, 1000 / 50);
});
// update mouse position
$(document).mousemove(function(e) {
e.preventDefault();
mousePos = {
x: e.clientX,
y: e.clientY
};
});
// launch more rockets!!!
$(document).mousedown(function(e) {
for (var i = 0; i < 5; i++) {
launchFrom(Math.random() * SCREEN_WIDTH * 2 / 3 + SCREEN_WIDTH / 6);
}
});
function launch() {
launchFrom(mousePos.x);
}
function launchFrom(x) {
if (rockets.length < 10) {
var rocket = new Rocket(x);
rocket.explosionColor = Math.floor(Math.random() * 360 / 10) * 10;
rocket.vel.y = Math.random() * -3 - 4;
rocket.vel.x = Math.random() * 6 - 3;
rocket.size = 8;
rocket.shrink = 0.999;
rocket.gravity = 0.01;
rockets.push(rocket);
}
}
function loop() {
// update screen size
if (SCREEN_WIDTH != window.innerWidth) {
canvas.width = SCREEN_WIDTH = window.innerWidth;
}
if (SCREEN_HEIGHT != window.innerHeight) {
canvas.height = SCREEN_HEIGHT = window.innerHeight;
}
// clear canvas
context.fillStyle = "rgba(0, 0, 0, 0.05)";
context.fillRect(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT);
var existingRockets = [];
for (var i = 0; i < rockets.length; i++) {
// update and render
rockets[i].update();
rockets[i].render(context);
// calculate distance with Pythagoras
var distance = Math.sqrt(Math.pow(mousePos.x -...