Fireworks (animation)

Created in HTML, CSS, and Javascript web technologies.

HTML

<div id="projectContaner">
    <div id="sarSuperContainer">
        <div id="starContainer"></div>
        <div id="starFade"></div>
    </div>
    <div id="fireworksContainer"></div>
</div>

CSS

#projectContainer {
    background-color: #333;
    position: fixed;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
}
html, body {
    margin: 0;
    padding: 0;
    height: 100%;
    width: 100%;
    overflow: hidden;
}
#starSuperContainer {
    width: 100vw;
    height: 70vh;
    position: relative;
}
#starContainer {
    width: 100%;
    height: 100%;
}
#starFade {
    width: 100%;
    height: 100%;
    background: -webkit-linear-gradient(transparent, #333);
    /* For Safari 5.1 to 6.0 */
    background: -o-linear-gradient(transparent, #333);
    /* For Opera 11.1 to 12.0 */
    background: -moz-linear-gradient(transparent, #333);
    /* For Firefox 3.6 to 15 */
    background: linear-gradient(transparent, #333);
    /* Standard syntax */
    position: absolute;
    top: 0;
}
.star {
    background-color: #fff;
    border-radius: 50%;
    position: fixed;
}
.fireworkContainer {
    /*width:20px;
                height:20px;*/
    margin-top: -4px;
    margin-bottom: -4px;
    position: absolute;
    display: inline-block;
    -o-transition: all 1s linear, opacity 2s linear;
    -moz-transition: all 1s linear, opacity 2s linear;
    -webkit-transition: all 1s linear, opacity 2s linear;
    -ms-transition: all 1s linear, opacity 2s linear;
    transition: all 1s linear, opacity 2s linear;
    bottom: 0;
    border-radius: 50%;
    -webkit-filter: blur(1px);
    -moz-filter: blur(1px);
    -ms-filter: blur(1px);
    -o-filter: blur(1px);
    filter: blur(1px);
}
.fireworkContainer * {
    -o-transition: all .8s linear, opacity .1s linear;
    -moz-transition: all .8s linear, opacity .1s linear;
    -webkit-transition: all .8s linear, opacity .1s linear;
    -ms-transition: all .8s linear, opacity .1s linear;
    transition: all .8s linear, opaciyt .1s linear;
    position: absolute;
    width: 0;
    height: 0;
    -o-transform-origin: bottom center;
    -moz-transform-origin: bottom center;
    -webkit-transform-origin: bottom center;
   ...

JavaScript

/*settings variables*/
var fireworkDimensions = 10; //make each firework 10px in width and height
var fireworkTransitionTime = 1000; //in milliseconds
var resizeTimer = false; //resize delay timer (not set)
var rayWidth = 2; //width of firework ray
var rayLength = 100; //length of firework ray
var fireworkRayPositions = [
    [0, 3],
    [10, 5],
    [8, 6],
    [5, 8],
    [2, 8],
    [2, 6],
    [0, 4],
    [0, 2],
    [2, 2],
    [4, 0],
    [8, 2],
    [10, 2]
]; //firework array positions in px format: bottom,right
var blurLights = true;
var windowWidth = window.innerWidth; //get width of viewport (updated when window is resized)
var windowHeight = window.innerHeight; //get height of viewport (updated when window is resized)

// IF THE BROWSER IS INTERNET EXPLORER 10 OR 11
var UAString = navigator.userAgent;
if ((navigator.appVersion.indexOf("MSIE 10") != -1) || (UAString.indexOf("Trident") !== -1 && UAString.indexOf("rv:11") !== -1)) {
    //ie 10 and 11 don't support filter blurring
    blurLights = false;
}

var fireworkCounter = 0;
var fireworkRayRotation = [0, -30, -60, -90, -120, -150, -180, -210, -240, 90, 60, 30];

window.addEventListener('load', function () {
    initialize();
});

function initialize() {
    fireworkTimers = [];
    createStars();
    createFireworks();

    function createStars() {
        var starContainer = document.getElementById('starContainer');
        starContainer.innerHTML = '';
        for (var i = 0; i < window.innerWidth; i++) {
            var star = document.createElement('div');
            star.className = 'star';
            star.style.opacity = Math.random() * 0.5;
            var randomDimensions = Math.floor(Math.random() * 4);
            star.style.width = randomDimensions + 'px';
            star.style.height = randomDimensions + 'px';
            star.style.top = Math.floor(Math.random() * starContainer.offsetHeight - randomDimensions) + 'px';
            star.style.left = Math.floor(Math.random() *...