Custom HTML5 Audio Player with jQuery and CSS

Custom HTML5 Audio Player with jQuery and CSS
File Size: 1.73 MB
Views Total:
Last Update:
Publish Date:
Official Website: Go to website
License: MIT
   

Makes use of jQuery, Html5 audio and CSS to create a nice-looking audio player with playlist and custom audio controls.

How to use it:

1. Build the html structure for the audio player.

<div id="container">
  <div id="audio-image"> 
    <img class="cover"> 
  </div>
  <div id="audio-player">
    <div id="audio-info">
      <span class="artist"></span> - <span class="title"></span> 
    </div>
    <input id="volume" type="range" min="0" max="10" value="4">
    <br>
    <div id="buttons"> <span>
      <button id="prev"></button>
      <button id="play"></button>
      <button id="pause"></button>
      <button id="stop"></button>
      <button id="next"></button>
      </span> </div>
    <div class="clearfix"></div>
    <div id="tracker">
      <div id="progress-bar"> <span id="progress"></span> </div>
      <span id="duration">0:00</span> </div>
    <div class="clearfix"></div>
    <ul id="playlist" class="hidden">
      <li song="Sample.mp3" cover="cover1.jpg" artist="Linkin Park">Sample.mp3</li>
      <li song="Sample.mp3" cover="cover1.jpg" artist="Linkin Park">Sample.mp3</li>
      <li song="Sample.mp3" cover="cover1.jpg" artist="Linkin Park">Sample.mp3</li>
      <li song="Sample.mp3" cover="cover1.jpg" artist="Linkin Park">Sample.mp3</li>
      <li song="Sample.mp3" cover="cover1.jpg" artist="Linkin Park">Sample.mp3</li>
    </ul>
  </div>
</div>

2. Add custom CSS styles to the audio player.

#audio-image {
  position: relative;
  overflow: hidden;
  height: 200px;
  margin-bottom: 15px;
}

#audio-image .cover { width: 100%; }

#audio-info { text-align: center; }

#audio-info .artist { font-weight: bold; }

input#volume {
  width: 95%;
  margin-left: 2%;
  -webkit-appearance: none !important;
  background: #ccc;
  height: 1px;
  margin-bottom: 20px;
}
input#volume::-webkit-slider-thumb {
 -webkit-appearance:none !important;
 background:url(../images/knob.png) no-repeat;
 height:12px;
 width:12px;
}

#buttons {
  width: 90%;
  display: block;
  margin: 15px auto;
  margin-left: 23px;
  overflow: auto;
}

button#play {
  width: 70px;
  height: 70px;
  background: url(../images/play.png) no-repeat;
  float: left;
  margin-left: -2px;
}

button#pause {
  width: 70px;
  height: 70px;
  background: url(../images/pause.png) no-repeat;
  float: left;
  margin-left: -2px;
}

button#stop {
  width: 70px;
  height: 70px;
  background: url(../images/stop.png) no-repeat;
  float: left;
  margin-left: 3px;
}

button#prev {
  width: 70px;
  height: 70px;
  background: url(../images/prev.png) no-repeat;
  float: left;
  margin-top: 15px;
}

button#next {
  width: 70px;
  height: 70px;
  background: url(../images/next.png) no-repeat;
  float: right;
  margin-top: 15px;
}

#tracker {
  position: relative;
  width: 100%;
}

#progress-bar {
  width: 80%;
  margin-left: 2%;
  margin-bottom: 20px;
  margin-top: 9px;
  height: 10px;
  background: url(../images/progress_bg.png) no-repeat;
  float: left;
}

#progress {
  background: url(../images/progress.png) no-repeat;
  height: 10px;
  display: inline-block;
}

#duration {
  position: absolute;
  top: 0;
  right: 10px;
  padding: 4px 8px;
  background: #000;
  border-radius: 5px;
}

#playlist { list-style: none; }

#playlist li {
  cursor: pointer;
  margin: 5px;
}

#playlist li.active {
  font-weight: bold;
  padding: 3px;
  background: #666;
}

3. Load the latest version of jQuery library at the end of the document.

<script src="//code.jquery.com/jquery-2.1.4.min.js"></script>

4. The JavaScript (jQuery) to enable the audio player.

var audio;

//Hide Pause
$('#pause').hide();

initAudio($('#playlist li:first-child'));

function initAudio(element){
  var song = element.attr('song');
  var title = element.text();
  var cover = element.attr('cover');
  var artist = element.attr('artist');
  
  //Create audio object
  audio = new Audio('media/'+ song);
  
  //Insert audio info
  $('.artist').text(artist);
  $('.title').text(title);
  
  //Insert song cover
  $('img.cover').attr('src','images/covers/'+cover);
  
  $('#playlist li').removeClass('active');
  element.addClass('active');
}

//Play button
$('#play').click(function(){
  audio.play();
  $('#play').hide();
  $('#pause').show();
  showDuration();
});

//Pause button
$('#pause').click(function(){
  audio.pause();
  $('#play').show();
  $('#pause').hide();
});

//Stop button
$('#stop').click(function(){
  audio.pause();
  audio.currentTime = 0;
});

//Next button
$('#next').click(function(){
  audio.pause();
  var next = $('#playlist li.active').next();
  if(next.length == 0){
    next = $('#playlist li:first-child');
  }
  initAudio(next);
  audio.play();
  showDuration();
});

//Prev button
$('#prev').click(function(){
  audio.pause();
  var prev = $('#playlist li.active').prev();
  if(prev.length == 0){
    prev = $('#playlist li:last-child');
  }
  initAudio(prev);
  audio.play();
  showDuration();
});

//Playlist song click
$('#playlist li').click(function(){
  audio.pause();
  initAudio($(this));
  $('#play').hide();
  $('#pause').show();
  audio.play();
  showDuration();
});

//Volume control
$('#volume').change(function(){
  audio.volume = parseFloat(this.value / 10);
});

//Time/Duration
function showDuration(){
  $(audio).bind('timeupdate',function(){
    //Get hours and minutes
    var s = parseInt(audio.currentTime % 60);
    var m = parseInt(audio.currentTime / 60) % 60;
    if(s < 10){
      s = '0'+s;
    }
    $('#duration').html(m + ':'+ s);
    var value = 0;
    if(audio.currentTime > 0){
      value = Math.floor((100 / audio.duration) * audio.currentTime);
    }
    $('#progress').css('width',value+'%');
  });
}

This awesome jQuery plugin is developed by amoss87. For more Advanced Usages, please check the demo page or visit the official website.