JSFiddle - React, Tailwind, and code Playground
HTML
<div id="player">
<img src="" class="cover" id="art" />
<div class="trackinfo">
<p id="title"></p>
<p id="artist"></p>
</div>
<div id="track">
<div id="progress"></div>
<div id="handler"></div>
</div>
<div class="container">
<div class="info">
<div class="cont">
<button id="prev" class="nav">
<img src="http://abarcarodriguez.com/lab/prev.png" />
</button>
<button id="play" class="nav">
<img class="pad" src="http://abarcarodriguez.com/lab/play.png" />
</button>
<button id="next" class="nav">
<img src="http://abarcarodriguez.com/lab/next.png" />
</button>
</div>
</div>
</div>
</div>
CSS
* {
margin: 0;
padding: 0;
}
body {
background-color: #F4F4F4;
font-family:'Helvetica';
}
#player {
width: 400px;
height: 400px;
position: absolute;
top: 50%; left: 50%;
margin-left: -200px;
margin-top: -200px;
border-radius: 50%;
border: 1px solid #D0D0D0;
}
#player .cover {
width: 400px;
position: absolute;
top: 0;
left:0;
border-radius: 50%;
}
#player .container {
width: 100%;
height: 100%;
border-radius: 50%;
position: absolute;
top: 0;
left: 0;
overflow: hidden;
}
#player .info {
position: absolute;
bottom: 0;
left: 0;
width: 400px;
height: 115px;
background-color: #FFF;
}
#player .info .cont {
text-align: center;
padding-top: 25px;
}
#player .trackinfo {
position: absolute;
bottom: 135px;
color: #FFF;
}
#player .trackinfo p {
text-shadow: 0px 0px 5px #333;
}
#player .trackinfo #title {
font-weight: bold;
font-size: 30px;
padding-left: 10px;
margin-bottom: 5px;
}
#player .trackinfo #artist {
padding-left: 25px;
}
#track {
width: 366px;
height: 5px;
position: absolute;
background-color: #A6A7A9;
bottom: 115px;
left: 17px;
z-index: 10;
cursor: pointer;
}
#progress {
float: left;
height: 5px;
width: 0%;
background: #00CC99;
cursor: pointer;
}
#handler {
position: absolute;
width: 20px;
height: 20px;
background-color: #00CC99;
top: 50%;
left: 0%;
margin-left: -10px;
margin-top: -10px;
border-radius: 50%;
cursor: pointer;
z-index: 5;
}
.nav {
width: 50px;
height: 50px;
vertical-align: top;
background-color: #FFF;
border: 2px solid #00CC99;
border-radius: 50%;
outline: none;
margin: 0 7px;
cursor: pointer;
}
.nav:hover {
background-color: #00CC99;
}
.nav img {
height: 20px;
vertical-align: middle;
}
.pad {
padding-left: 5px;
}
#prev {
padding-right:...
JavaScript
var holding = false;
var track = document.getElementById('track');
var progress = document.getElementById('progress');
var play = document.getElementById('play');
var next = document.getElementById('next');
var prev = document.getElementById('prev');
var title = document.getElementById('title');
var artist = document.getElementById('artist');
var art = document.getElementById('art');
var current_track = 0;
var song, audio, duration;
var playing = false;
var songs = [{
title: 'Mother\'s Day',
artist: 'Offspring Fling',
url: 'http://abarcarodriguez.com/365/files/offspring.mp3',
art: 'https://www.edmsauce.com/wp-content/uploads/2017/05/KSHMR2-1068x712.jpg'
},
{
title: 'Blackout City',
artist: 'Anamanaguchi',
url: 'http://abarcarodriguez.com/365/files/anamanaguchi.mp3',
art: 'http://abarcarodriguez.com/365/files/anamanaguchi.jpg'
},
{
title: 'The Primordial Booze',
artist: 'Rainbowdragoneyes',
url: 'http://abarcarodriguez.com/365/files/rainbow.mp3',
art: 'http://abarcarodriguez.com/365/files/rainbow.jpg'
}];
window.addEventListener('load', init(), false);
function init() {
song = songs[current_track];
audio = new Audio();
audio.src = song.url;
title.textContent = song.title;
artist.textContent = song.artist;
art.src = song.art;
}
audio.addEventListener('timeupdate', updateTrack, false);
audio.addEventListener('loadedmetadata', function () {
duration = this.duration;
}, false);
window.onmousemove = function (e) {
e.preventDefault();
if (holding) seekTrack(e);
}
window.onmouseup = function (e) {
holding = false;
console.log(holding);
}
track.onmousedown = function (e) {
holding = true;
seekTrack(e);
console.log(holding);
}
play.onclick = function () {
playing ? audio.pause() : audio.play();
}
audio.addEventListener("pause", function () {
play.innerHTML = '<img class="pad" src="http://abarcarodriguez.com/lab/play.png" />';
playing = false;
},...