<link href="https://fonts.googleapis.com/css2?family=Righteous&display=swap" rel="stylesheet">
<script src="https://kit.fontawesome.com/4d9bce4b44.js" crossorigin="anonymous"></script>
<div class="main">
	<h1>Queen's Playlist</h1>
	<div class="alert"></div>
	<svg viewbox="0 0 100 100">
		<defs>
			<filter id="shadow">
				<feDropShadow dx="0" dy="-0.3" stdDeviation="0.2"/>
			</filter>
		</defs>
		<defs>
			<filter id="shadow-2">
				<feDropShadow dx="0" dy="0" stdDeviation="0.3"/>
			</filter>
		</defs>
		
		<path d="M5 10,
						 Q5 8, 7 8,
						 L60 8,
						 Q62 8, 62 10, 
						 L62 45,
						 Q62 47, 60 47, 
						 L7 47, 
						 Q5 47, 5 45
						 L5 10" fill="#30a996"/>
		<path d="M10 15, 
						 Q10 13, 12 13, 
						 L55 13, 
						 Q57 13, 57 15, 
						 L57 35,
						 Q57 37, 55 37, 
						 L13 37,
						 Q10 37, 10 35, 
						 L10 15" fill="#e3dcaa" class="shadow-2"/>
		<path d="M15 47, 
						 L18 40, 
						 L50 40, 
						 L53 47, 
						 L15 47"
					fill="#278775"
					class="shadow"/>
		<path d="M10 20, 
						 L57 20, 
						 L57 25,
						 L10 25" fill="#df2a13"/>
		<circle cx="8" cy="11" r="1" fill="#10493e"/>
		<circle cx="59" cy="11" r="1"fill="#10493e"/>
		<circle cx="8" cy="44" r="1" fill="#10493e"/>
		<circle cx="59" cy="44" r="1" fill="#10493e"/>
		<circle cx="23" cy="44" r="1" fill="#30a996"/>
		<circle cx="45" cy="44" r="1" fill="#30a996"/>
		 <rect x="28" y="42" rx="0" ry="0" width="1.5" height="1.5" />
		<rect x="38" y="42" rx="0" ry="0" width="1.5" height="1.5"/>
		<rect x="15" y="20" rx="6" width="37" height="12" class="mid-rect"/>
		<rect x="27" y="24" width="13" height="6"/>

	<!-- 	middle circles-->
		<circle cx="21" cy="26" r="4.5" fill="#30a996"/>
		<circle cx="46" cy="26" r="4.5" fill="#30a996"/>
		<circle cx="21" cy="26" r="3.5" fill="#f6dfda"/>
		<circle cx="46" cy="26" r="3.5" fill="#f6dfda"/>
		<!-- 	animation will happen here -->
		<g class="first-g">
				<path d="M19 23, 
						 L23 29" stroke="#30a996"
	stroke-width=".4" />
		<path d="M23 23, 
						 L19 29" stroke="#30a996"
	stroke-width=".4" />
		<path d="M17 26, 
						 L25 26" stroke="#30a996"
	stroke-width=".4" />

		<circle cx="21" cy="26" r="2" fill="#f6dfda"/>
		</g>
		<g class="second-g">
		<path d="M48 23, 
						 L44 29" stroke="#30a996"
	stroke-width=".4" />
		<path d="M44 23, 
						 L48 29" stroke="#30a996"
	stroke-width=".4" />
		<path d="M42 26, 
						 L50 26" stroke="#30a996"
	stroke-width=".4" />
		<circle cx="46" cy="26" r="2" fill="#f6dfda"/>
		</g>

	<!-- 	Lip -->
		<path d="M5 45,
						 L4 43,
						 L4 35, 
						 L5 33" fill="#10493e" /> 
		<path d="M62 45,
						 L63 43,
						 L63 35, 
						 L62 33" fill="#10493e" /> 

	</svg>
	<div class="info">
		<p class="artist"></p>
		<p class="song">

		</p>
	</div>
	<div class="buttons">
	<button class="previous">
		<i class="fas fa-step-backward"></i>
	</button>
	<button class="play">
		<i class="fas fa-play"></i>
	</button>
	<button class="pause">
		<i class="fas fa-pause"></i>
	</button>
	<button class="next">
		<i class="fas fa-step-forward"></i>
	</button>
</div>
</div>
*{
	box-sizing: border-box;
}

body{
	background: #f6dfda;
 	font-family: 'Righteous', cursive;
	color:#10493e;
}

.main{
	position: absolute;
	width: 100%;
}

h1{
	position: absolute;
	left: 180px;
	letter-spacing: 5px;
	text-shadow: 3px 3px 1px 
#c1bbbd;
}

.alert{
	position: relative;
	top: 250px;
	left:270px;
	width:130px;
	height: 60px;
	z-index: 1;
	text-align: center;
	visibility: hidden;
	padding-top: 10px;
}

.pop-up{
	visibility: visible;
}

svg{
	position: relative;
	top: -50px;
	width: 1000px;
	height: 1000px;
}

rect{
	fill:#30a996;
}

.mid-rect{
	fill: #10493e;
}

.shadow{
	filter:url(#shadow);
}

.shadow-2{
	filter:url(#shadow-2);
}

.spin {
	transform-origin: center;
	transform-box: fill-box;
	animation: rotate-wheel 8s infinite linear;
}

@keyframes rotate-wheel{
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}

.info{
	position: relative;
	top: -940px;
	left: 100px;
	width: 450px;
	height: 10vh;
	text-align: center;
	font-size: 18px;
}

.buttons{
 position: relative;
 top: -650px;
 left: 50px;
 
}

i{
	color:#10493e;
  font-size: 30px;

}

i.fa-music{
font-size: 15px;
}

button{
	width: 140px;
	height: 50px;
	border-radius: 10px;
	outline: none;
	box-shadow: 2px 2px 3px 
#8d8d8d inset;
}
let songs = [
	{artistName: "Queen", 
	songName: "Bohemian Rhapsody - Sample", 
	url: "https://upload.wikimedia.org/wikipedia/en/f/fb/QueenBohemianRhapsody_Opera.ogg"},
	{artistName: "Queen", 
	 songName: 'We Will Rock You - Sample',
	 url: "https://upload.wikimedia.org/wikipedia/en/b/bc/Wewillrockyou.ogg"},
	{artistName: "Queen", 
	 songName: "Don't Stop Me Know - Sample",
	 url: "https://upload.wikimedia.org/wikipedia/en/d/db/Queen_-_Don%27t_Stop_Me_Now.ogg"}, 
	{artistName: "Queen", 
	 songName: "I Want To Break Free - Sample",
	 url: "https://upload.wikimedia.org/wikipedia/en/7/75/Queen_I_want_to_break_free.ogg"}, 
	{artistName: "Queen", 
	 songName: "Another One Bites The Dust - Sample",
	 url: "https://upload.wikimedia.org/wikipedia/en/3/39/Another-one-bites-the-dust--forward.ogg"}, 
	{artistName: "Queen", 
	 songName: "We Are The Champions - Sample",
	 url: "https://upload.wikimedia.org/wikipedia/en/1/1c/Wearethechampions.ogg"},
	{artistName: "Queen", 
	 songName: "Crazy Little Thing Called Love - Sample",
	 url: "https://upload.wikimedia.org/wikipedia/en/0/06/Queen_-_Crazy_Little_Thing_Called_Love.ogg"}
]

let audio = new Audio(songs[0].url);
let previousButton = document.querySelector('.previous')
let playButton = document.querySelector('.play')
let pauseButton = document.querySelector('.pause')
let nextButton = document.querySelector('.next')
let firstG = document.querySelector(".first-g")
let secondG = document.querySelector(".second-g")
let artist = document.querySelector(".artist")
let song = document.querySelector(".song")
let popUp = document.querySelector('.alert')
let musicLogo = `<i class="fas fa-music"></i>`

let currentSongIndex = 0

const spin = () => {
 firstG.classList.add('spin')
 secondG.classList.add('spin')
}

playButton.addEventListener('click', function(){
	audio.play()
	artist.innerText = currentSong().artistName
	song.innerHTML = currentSong().songName + musicLogo
	spin()
  audio.loop='true'
})

pauseButton.addEventListener('click', function(){
	audio.pause()
	firstG.classList.remove('spin')
	secondG.classList.remove('spin')
})

const currentSong = (index) => {
if(index === undefined){
	return songs[currentSongIndex]
} else if (index < songs.length ){
	artist.innerText = songs[index].artistName 
	song.innerHTML = songs[index].songName + musicLogo
 }
}

const nextSong = ()=> {
	newSongIndex = currentSongIndex + 1
	currentSong(newSongIndex)
	if(newSongIndex < songs.length){
		audio.pause()
		audio = new Audio(songs[newSongIndex].url)
		audio.play()
		audio.loop='true'
		return currentSongIndex = newSongIndex
	} else {
		popUp.classList.add('pop-up')
		popUp.innerText = "This the last song."
			setTimeout(() => {
			popUp.classList.remove('pop-up')
		}, 1000)
		return currentSongIndex
	}
	
}

const previousSong= () => {
	newSongIndex = currentSongIndex - 1
	if(newSongIndex < 0 ){
		popUp.classList.add('pop-up')
		popUp.innerText = 'This is the first song.'
		setTimeout(() => {
			popUp.classList.remove('pop-up')
		}, 1000)
		return currentSongIndex 
	} else {
		audio.pause()
		currentSong(newSongIndex)
		audio = new Audio(songs[newSongIndex].url)
		audio.play()
		audio.loop='true'
		return currentSongIndex = newSongIndex
	}
}

nextButton.addEventListener('click', function(){
 nextSong()
 spin()
})

previousButton.addEventListener('click', function(){
	previousSong()
	spin()
})

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

This Pen doesn't use any external JavaScript resources.