HTML+CSS(실습)

★2023-04-11(화) audio 플레이어 실습(innerHTML,audio메소드)

박성하하 2023. 4. 12. 13:46
728x90
반응형

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="stylesheet" href="./style.css">
    <title>Document</title>
    <script src="../js/jquery.min.js"></script>
</head>
<body>
    <div id="wrap">
        <div id="header">
            <h3>piano1</h3>
        </div>
        <div id="body">
            <img src="piano1.JPG">
        </div>
        <div id="conBar">
            <div id="line">
            </div>
            <div id="circle">
            </div>
            <div id="timeBar">
                <span id="zero">00:00</span>
                <span id="duration">03:42</span>
            </div>
        </div>
        <div id="button_box">
            <button onClick="previousMusic()">│◀</button>
            <button onClick="musicPlay()"></button>
            <button onClick="musicPause()">││</button>
            <button onClick="nextMusic()">▶│</button>
            <button onClick="musicReset()"></button>
        </div>
    </div>
</body>
<script>
    //오디오 불러오기
    var audio1 = new Audio();
    var audio2 = new Audio();
    var audio3 = new Audio();
    audio1.src='../Audio/my_piano1.mp3'
    audio2.src='../Audio/my_piano2.mp3'
    audio3.src='../Audio/my_piano3.mp3'
    var musicList = [
        {name:"<h3>piano1</h3>" , music:audio1},
        {name:"<h3>piano2</h3>" , music:audio2},
        {name:"<h3>piano3</h3>" , music:audio3}
    ];
    var i = 0;
    var isPlaying = false;
    var result = 0;
    var result2 = 0;
    var sec = 0;
    var min = 0;

    function previousMusic() {  //이전곡
        musicList[i].music.pause();
        if(i>0) {
            i--;
        }
        isPlaying = false;
        clearInterval(result)
        clearInterval(result2)
        moveBack()
        sec = 0;
        min = 0;
        musicPlay();
    }

    function musicPlay(){       //재생
        if(isPlaying==false) {
        musicList[i].music.play()
        var endTime = "0" + Math.floor((musicList[i].music.duration/60)) + ":" +  Math.round((musicList[i].music.duration%60))
        document.getElementById("header").innerHTML = musicList[i].name;
        document.getElementById("body").innerHTML = "<img src='piano"+(i+1)+".JPG'>"
        document.getElementById("duration").innerHTML = endTime
        isPlaying = true;
        result = setInterval(move,1000)
        result2 = setInterval(timeup,1000)
        }
    }

    function musicPause() {    //일시정지
        musicList[i].music.pause()
        clearInterval(result)
        clearInterval(result2)
        isPlaying = false;
        console.log("일시정지")
    }

    function nextMusic() {     //다음곡
        musicList[i].music.pause();
        if(i<2) {
            i++;
        }
        isPlaying = false;
        clearInterval(result)
        clearInterval(result2)
        moveBack()
        sec = 0;
        min = 0;
        musicPlay();
    }

    function musicReset() {    //초기화
        musicList[i].music.pause()
        musicList[i].music.currentTime=0;
        moveBack()
        clearInterval(result)
        clearInterval(result2)
        document.getElementById("zero").innerHTML = "00:00"
        sec = 0
        isPlaying = false
        console.log("정지")
    }
   
    function move() {
        var movePerSec = 300/musicList[i].music.duration
        var movedbar = movePerSec
        $("#circle").animate({left:"+="+movedbar+"px"},100)
    };

    function moveBack() {
        $("#circle").animate({left:"48px"},100)
    }

    function timeup() {
            sec++
        if(sec == 60) {
            min++
            sec = 0
        }
        var sec2 = sec<10 ? "0" + sec : sec
        document.getElementById("zero").innerHTML = "0" + min + ":" + sec2
    }
</script>
</html>

- body
   1. 제목(header) , 앨범사진(body) , 컨트롤바(conBar) , 버튼들(button_box) 로 구성
   2. 1번곡으로 시작하기때문에 처음화면에는 실제 값들 입력(ex . piano1 , 00:00 , 03:42 등)
- script
   1. musicList 배열에 오디오 정보들을 입력(이름,오디오파일) 
   2. i           : 제목 , 앨범사진 , 컨트롤바 관리 (musicList 배열넘버 0~2 안에서만 증감소하게 if사용)
   3. isPlaying : boolean값을 통해 재생 및 정지 관리
   4. result     : setInterval(move) 컨트롤바 동그라미 animate 관리
   5. result 2   : setInterval(timeup) 음악재생에 따른 재생시간 animate 관리
   6. sec , min : timeup()의 재생시간 관련 상수
   7. endTime  : 재생중인 곡의 분과 시간을 나타냄 , duration을 사용해 몫과 나머지로 표시 , Math 사용해 소수점관리 
   8. move()     : circle을  (line/노래의 재생시간) 씩 움직이게함 ( setInterver로 1초에 한번씩 움직이게함)
   9. moveBack() : 움직인 circle을 복귀시킴
  10. timeup()   : 현재 재생시간 표기 함수

 

728x90
반응형