audiowave

by Bean Deng

HTML

<div class="background">
      <div class="audiowave"></div>
</div>

CSS

body {
  padding: 0;
  margin: 0;
}

.background {
    width: 100vw;
    height: 100vh;
    background-color: #193082;
}

.audiowave {
    position: absolute;
    left: 0;
    top: 0;
    width: 100%;
    height: 200px;
    display: flex;
    flex-direction: row;
    align-items: flex-start;
    justify-content: space-between;
}

.audiowave div {
    top: 0;
    background: rgba(44, 99, 255, 0.25);
    z-index: 9;
    width: 3px;
    height: 0;
    animation: audiowave 3s infinite linear;
}

@keyframes audiowave {
    0% {
        height: 28.75%;
    }

    5% {
        height: 37.5%;
    }

    10% {
        height: 56.25%;
    }

    15% {
        height: 48.75%;
    }

    20% {
        height: 68.75%;
    }

    25% {
        height: 82.5%;
    }

    30% {
        height: 71.25%;
    }

    35% {
        height: 78.125%;
    }

    40% {
        height: 68.75%;
    }

    45% {
        height: 80.875%;
    }

    50% {
        height: 90%;
    }

    55% {
        height: 91.875%;
    }

    60% {
        height: 87%;
    }

    65% {
        height: 70%;
    }

    70% {
        height: 60%;
    }

    75% {
        height: 55%;
    }

    80% {
        height: 45%;
    }

    85% {
        height: 40%;
    }

    90% {
        height: 35%;
    }

    95% {
        height: 30%;
    }

    100% {
        height: 28.75%;
    }
}

JavaScript

/* 

Author: HADB
Date: 2019-03-24
My Blog: https://hadb.me
My GitHub: https://github.com/HADB

*/

var wavePillarCount = 100     // 柱子总数(用来调整密度)
var waveCount = 5             // 波形总数(用来调整波形数量)
var waveAnimationDuration = 3 // 单个动画秒数(与 animation-duration 一致)
var randomRate = 1            // 随机倍率,越大越随机

for (i = 0; i < wavePillarCount; i++) {
    var offset = ((i / wavePillarCount - 1) * waveCount * waveAnimationDuration) - Math.random() * randomRate;
    document.querySelector('.audiowave').innerHTML += '<div style="-webkit-animation-delay:' + offset + 's;"></div>';
}