Music player

남예지·2023년 4월 3일
0

TIL

목록 보기
36/47

키프레임은 정말 너무나도 인터렉티브 하다.
그래서 더 배우고 싶지만 자바스크립트가 아직 손에 안익어서 큰일이다.
취업하려면 결국 절대적인 코딩시간을 늘려야겠지
저번주에 music player를 만들었는데 블로깅을 할 시간이 없었다.
지금 해보자면
html, scss, javascript를 이용한 music player이고,
keyframe을 사용해 8개 팬넬이 45도씩 원형으로 배치되어 돌아간다.

html의 구조는 단순히 body>figure>h1+a+section<article*8^nav.Prev+nav.Next+p
이다.
article 8개는 플레이어가 돌아갈 panel 8개이다.
자바스크립트에서 스타일을 지정해 로테이트 각도를 지정해주었다.

const frame = document.querySelector("section");
const list = frame.querySelectorAll("article");
const prev = document.querySelector(".btnPrev");
const next = document.querySelector(".btnNext");
const names = [
    "Calm",
    "Escape",
    "music_Blizzards",
    "music_Dusty_Road",
    "music_Payday",
    "music_Retreat",
    "Seasonal",
    "Vespers",
];
const len = list.length;
const deg = 360 / len;
let num = 0;
let active = 0;

// panel rotate 적용
names.forEach((name, index) => {
    const pic = list[index].querySelector(".pic");
    const h2 = list[index].querySelector(".txt h2");
    list[index].style.transform = `rotate(${
        deg * index
    }deg) translateY(-100vh)`;
    pic.style.backgroundImage = `url(img/${name}.jpeg)`;
    h2.innerText = name;

    const audio = document.createElement("audio");
    audio.setAttribute("src", `music/${name}.mp3`);
    audio.setAttribute("loop", "loop");
    list[index].append(audio);
});

또 안에 play 버튼을 누르면 시작하고 reload버튼은 처음부터 다시 시작하게 하고, pause 버튼은 재생을 멈춘다.

for (let el of list) {
    const play = el.querySelector(".play");
    const pause = el.querySelector(".pause");
    const load = el.querySelector(".load");

    play.addEventListener("click", (e) => {
        e.currentTarget
            .closest("article")
            .querySelector(".pic")
            .classList.add("on");
      e.currentTarget.closest("article").querySelector("audio").play();
    });

    pause.addEventListener("click", (e) => {
        e.currentTarget
            .closest("article")
            .querySelector(".pic")
            .classList.remove("on");
      e.currentTarget.closest("article").querySelector("audio").pause();
    });

    load.addEventListener("click", (e) => {
        e.currentTarget
            .closest("article")
            .querySelector(".pic")
            .classList.add("on");
      e.currentTarget.closest("article").querySelector("audio").load();
     e.currentTarget.closest("article").querySelector("audio").play();
    });
}

이제 포트폴리오 사이트를 만들어야 되는데
막막하다.
그래도 화이팅!

profile
총총

0개의 댓글