anime-project-2024 / index.js
index.js
Raw
const image = document.getElementById('cover'),
title = document.getElementById('music-title'),
artist = document.getElementById('music-artist'),
currentTimeEl = document.getElementById('current-time'),
durationEl = document.getElementById('duration'),
progress =  document.getElementById('progress'),
playerProgress =  document.getElementById('player-progress'),
prevBtn = document.getElementById('prev'),
nextBtn = document.getElementById('next'),
playBtn = document.getElementById('play'),
background = document.getElementById('bg-img');

const music = new Audio();

const songs = [
    {
      path: 'music/hunterxhunter.mp3',
      displayName: 'hunterxhunter opening 1',
      cover:'images/hunterxhunter.jpg',
      artist:'MASATOSHI ONO',
    },
    {
        path: 'music/yt5s.io - Where Our Blue Is (128 kbps).mp3',
        displayName: 'WHERE OUR BLUE IS',
        cover:'images/gojo.jpg',
        artist: 'TATSUYA KITANI',
    },
];

let musicIndex = 0;
let isPlaying = false;

function togglePlay(){
    if(isPlaying){
        pauseMusic();
    }else{
        playMusic();
    }
}

function playMusic(){
    isPlaying = true;
    playBtn.classList.replace('fa-play', 'fa-pause');
    playBtn.setAttribute('title','Pause');
music.play();
}

function pauseMusic(){
    isPlaying = false;
    playBtn.classList.replace('fa-pause', 'fa-play');
    playBtn.setAttribute('title','Play');
music.pause();
}

function loadMusic(song){
    music.src = song.path;
    title.textContent = song.displayName;
    artist.textContent = song.artist;
    image.src = song.cover;
    background.src = song.cover;
}

function changeMusic(direction){
    musicIndex = (musicIndex + direction + songs.length) %
    songs.length;
    loadMusic(songs[musicIndex]);
    playMusic();
}

function updateProgressBar(){
    const{ duration, currentTime} = music;
    constprogressPercent = (currentTime /  duration) * 100;
    progress.style.width = '${progressPercent}%';

const formatTime = (time) => String(Math.floor(time)).padStart(2, '0');
durationEl.textContent = '${formatTime(duration / 60)}:${formatTime(duration % 60)}'; 
currentTimeEl.textContent = '${formatTime(currentTime / 60)}:${formatTime(currentTime % 60)}';
}

function setProgressBar (e) {
    const width = playerProgress.clientWidth;
    const clickX = e.offsetX;
    music.currentTime = (clickX / width) * music.duration;
}

playBtn.addEventListener('click', togglePlay);
prevBtn.addEventListener('click', () => changeMusic(-1));
nextBtn.addEventListener('click', () => changeMusic(1));
music.addEventListener('ended', () => changeMusic(1));
music.addEventListener('timeupdate', updateProgressBar);
playerProgress.addEventListener('click', setProgressBar);

loadMusic(songs[musicIndex]);