@@ -7,17 +7,22 @@ const prevbtn = document.getElementById('prev-btn')
77const nextbtn = document . getElementById ( 'next-btn' )
88const playbtn = document . getElementById ( 'play-btn' )
99const menu = document . getElementById ( 'menu' )
10+ const playlistContainer = document . getElementById ( 'playlist' ) ;
11+ const openPlaylistBtn = document . querySelector ( '.fa-bars' ) ; // The Hamburger icon
12+ const closePlaylistBtn = document . getElementById ( 'close-playlist' ) ; // The 'X' icon
13+ const playlistList = document . getElementById ( 'playlist-songs' ) ;
1014
1115
1216let songs = [ ]
1317let songIndex = 0 ;
14- let isPlaying = false
18+ let isPlaying = false ;
19+ let isList = false ;
1520let audio = new Audio ( ) ;
1621
1722
1823async function fetchsongs ( ) {
1924 try {
20- const response = await fetch ( 'https://itunes.apple.com/search?term=lofi&media=music&limit=10 ' )
25+ const response = await fetch ( 'https://itunes.apple.com/search?term=lofi&media=music&limit=300 ' )
2126 const data = await response . json ( ) ;
2227 songs = data . results . map ( track => ( {
2328 title : track . trackName ,
@@ -26,12 +31,35 @@ async function fetchsongs() {
2631 src : track . previewUrl
2732 } ) )
2833 loadSong ( songs [ songIndex ] )
34+ playlistdisplay ( )
2935 } catch ( error ) {
3036 console . error ( "Error fecthing music" , error )
3137 titleEl . innertext = "Error Loading Music" ;
3238 }
3339}
3440
41+
42+ function playlistdisplay ( ) {
43+ playlistList . innerHTML = '' ;
44+
45+ songs . forEach ( ( song , index ) => {
46+ const item = document . createElement ( 'li' ) ;
47+
48+ item . innerText = song . title ;
49+ item . classList . add ( 'song-item' ) ;
50+
51+ item . addEventListener ( 'click' , ( ) => {
52+ songIndex = index ;
53+ loadSong ( songs [ songIndex ] ) ;
54+ playSong ( ) ;
55+ playlistContainer . classList . remove ( 'active' ) ;
56+ } ) ;
57+
58+ playlistList . append ( item ) ;
59+ } ) ;
60+ }
61+
62+
3563function loadSong ( song ) {
3664 titleEl . innerText = song . title ;
3765 artistEl . innerText = song . artist ;
@@ -96,13 +124,20 @@ function setProgress(e) {
96124 audio . currentTime = ( clickX / width ) * duration ;
97125}
98126
127+
99128playbtn . addEventListener ( 'click' , toggle )
100129prevbtn . addEventListener ( 'click' , prevSong )
101130nextbtn . addEventListener ( 'click' , nextSong )
102131audio . addEventListener ( 'timeupdate' , updateProgress )
103132audio . addEventListener ( 'ended' , nextSong )
104133timeline . addEventListener ( 'click' , setProgress )
105134menu . addEventListener ( 'click' , ( e ) => {
106- alert ( "Feature coming soon!" )
135+ menu ( )
107136} )
137+ openPlaylistBtn . addEventListener ( 'click' , ( ) => {
138+ playlistContainer . classList . add ( 'active' ) ;
139+ } ) ;
140+ closePlaylistBtn . addEventListener ( 'click' , ( ) => {
141+ playlistContainer . classList . remove ( 'active' ) ;
142+ } ) ;
108143fetchsongs ( )
0 commit comments