카테고리 없음

게임 효과

Hyeon been 2023. 4. 27. 14:13
728x90

뮤직 효과 기능 구현하기

 

HTML 과 CSS로 뮤직 창을 만들어 줍니다.

그 후 js 파일에 allMusic을 배열 안 객체 로 만들어줍니다.

const allMusic = [
    {
        name : "1.Dangerously",
        artist : "Charlie Puth",
        img : "music_view01",
        audio : "music_audio01"

    }, {
        name : "2.낭만교향곡",
        artist : "빅나티",
        img : "music_view02",
        audio : "music_audio02"
    }, {
        name : "3.첫사랑",
        artist : "백아",
        img : "music_view03",
        audio : "music_audio03"
    }, {
        name : "4.INDUSTRY BABY",
        artist : "Lil Nas X Jack Harlow",
        img : "music_view04",
        audio : "music_audio04"
    }, {
        name : "5.빛이 나는 너에게 ",
        artist : "던(DAWN)",
        img : "music_view05",
        audio : "music_audio05"
    }, {
        name : "6.인사",
        artist : "범진",
        img : "music_view06",
        audio : "music_audio06"
    }, {
        name : "7.Rainy day",
        artist : "PATEKO 파테코 ",
        img : "music_view07",
        audio : "music_audio07"
    }, {
        name : "8.연애의 발명",
        artist : "빅나티",
        img : "music_view08",
        audio : "music_audio08"
    }, {
        name : "9.Tired",
        artist : "Alan Walker",
        img : "music_view09",
        audio : "music_audio09"
    }, {
        name : "10.INVU",
        artist : "태연",
        img : "music_view10",
        audio : "music_audio10"
    }

];

다음으로는 스크립트를 적용할 곳들을 선택자로 만들어줍니다.

const musicWrap = document.querySelector(".music__wrap");
const musicName= musicWrap.querySelector(".music__control .title h3");
const musicArtist= musicWrap.querySelector(".music__control .title p");
const musicView= musicWrap.querySelector(".music__view .image img");
const musicAudio= musicWrap.querySelector("#main-audio");
const musicPlay= musicWrap.querySelector("#control-play");
const musicPrevBtn= musicWrap.querySelector("#control-prev");
const musicNextBtn= musicWrap.querySelector("#control-next");
const musicProgress= musicWrap.querySelector(".progress");
const musicProgressBar= musicWrap.querySelector(".progress .bar");
const musicProgressCurrent= musicWrap.querySelector(".progress .timer .current");
const musicProgressDuration= musicWrap.querySelector(".progress .timer .duration");

음악 파일 로드 하기

const loadMusic = (num) => {
    musicName.innerText = allMusic[num-1].name;  //뮤직 이름
    musicArtist.innerText = allMusic[num-1].artist; //아티스트 이름
    musicView.src = `assets/img/${allMusic[num-1].img}.png`;  //뮤직이미지
    musicView.alt = allMusic[num-1].name;                        //뮤직이미지 alt
    musicAudio.src =`audio/${allMusic[num-1].audio}.mp3`           //뮤직파일
}

변수  loadMusic을 만들어 

그 안에 불러올 파일들을  정의 해줍니다. 배열은 0 부터 시작하기 때문에  [num-1]로 불러와 줍니다.

musicName.innerText = allMusic[num-1].name;

재생

//재생 
const playMusic = () => {
    musicWrap.classList.add("paused")
    musicPlay.setAttribute("title", "정지");
    musicPlay.setAttribute("class", "stop");
    musicAudio.play();
}

//정지 
const pauseMusic = () => {
    musicWrap.classList.remove("paused");
    musicPlay.setAttribute("title", "재생");
    musicPlay.setAttribute("class", "play");
    musicAudio.pause();

}


//이전 곡
const prevMusic = () => {
    musicIndex == 1 ? musicIndex = allMusic.length : musicIndex--;
    loadMusic(musicIndex);
    playMusic()

}

//다음 곡
const nextMusic = () => {
    // musicIndex++;
    // if(musicIndex == 9) musicIndex = 1;
    musicIndex == allMusic.length ? musicIndex = 1 : musicIndex++;
    loadMusic(musicIndex);
    playMusic()
    

}

이제 재생,정지, 이전곡, 다음곡이라는 변수를 만들어줍니다. 

그 안에 musicAudio.play를 넣어주어 음악을 재생되게 해줍니다.

//진행 버튼 클릭
musicProgress.addEventListener("click",(e) => {
    let progressWidth = musicProgress.clientWidth;   //진행바 전체 길이
    let clickedOffsetX = e.offsetX;    //진행바를 기준으로 측정되는 x의 값
    let songDuration = musicAudio.duration;      //오디오 전체길이
    //백분위로 나눈 숫자에 다시 전체 길이를 곱해서 현재 재생값으로 바꿈 
    musicAudio.currentTime = (clickedOffsetX/progressWidth) * songDuration;
})

//플레이 버튼
musicPlay.addEventListener("click", () =>{
    const isMusicPaused = musicWrap.classList.contains("paused"); //음악 재생중
    isMusicPaused ? pauseMusic() : playMusic();
})

//이전 곡 버튼
musicPrevBtn.addEventListener("click", () =>{
    // if(musicIndex == 1){
    //     musicIndex = 11;
    // }

    prevMusic();
    
})

//다음 곡 버튼
musicNextBtn.addEventListener("click", () =>{
    // if(musicIndex==10){
    //     musicIndex = 0;
    // }
    nextMusic();
    
})

다음은 버튼들을 만들어 이벤트 클릭을 줍니다.

 그안에 방금 만든 변수들을 다 넣어줍니다. 그럼 버튼을 클릭하면 그 함수가 실행되게 되어 음악이 재생됩니다.