HTML로 피아노를 만들자.

이 기사는 tomowarkar 혼자 Advent Calendar 2019의 17 일째 기사입니다.

소개



HTML과 JavaScript를 쓰고 사쿠와 피아노를 구현했다는 이야기.

데모 사이트



피아노 데모 사이트


코드


piano/
├── index.html
├── script.js
├── sounds
│   ├── do.mp3
│   ├── fa.mp3
│   ├── mi.mp3
│   ├── ra.mp3
│   ├── re.mp3
│   ├── si.mp3
│   └── so.mp3
└── style.css

index.html
<!DOCTYPE html>
<html>

<head>
  <meta charset="utf-8" />
  <meta name="viewport" content="initial-scale=1.0" />
  <title></title>
  <link rel="stylesheet" href="style.css" type="text/css">
  <script defer src="script.js"></script>
</head>

<body>
  <div class="piano">
    <div data-sound="do" class="key white"></div>
    <div class="black"></div>
    <div data-sound="re" class="key white"></div>
    <div class="black"></div>
    <div data-sound="mi" class="key white"></div>
    <div data-sound="fa" class="key white"></div>
    <div class="black"></div>
    <div data-sound="so" class="key white"></div>
    <div class="black"></div>
    <div data-sound="ra" class="key white"></div>
    <div class="black"></div>
    <div data-sound="si" class="key white"></div>
  </div>
  <audio id="do" src="sounds/do.mp3"></audio>
  <audio id="re" src="sounds/re.mp3"></audio>
  <audio id="mi" src="sounds/mi.mp3"></audio>
  <audio id="fa" src="sounds/fa.mp3"></audio>
  <audio id="so" src="sounds/so.mp3"></audio>
  <audio id="ra" src="sounds/ra.mp3"></audio>
  <audio id="si" src="sounds/si.mp3"></audio>
</body>

</html>

style.css
*{
  box-sizing: border-box;
}

body{
  background-color: green;
  margin: 0;
  min-height: 100vh;
  display: flex;
  justify-content: center;
  align-items: center;
}

.piano{
  display: flex;
}

.white{
  width:80px;
  height: 320px;
  background-color: white;
  border: 1px solid gray;
}

.black{
  width:48px;
  height: 192px;
  background-color: black;
  margin-left: -24px;
  margin-right: -24px;
  z-index: 2;
}

script.js
const keys = document.querySelectorAll('.key')

keys.forEach(key=>{
  key.addEventListener('click', ()=>playPiano(key))
})

function playPiano(key) {
  const audio = document.getElementById(key.dataset.sound)
  audio.currentTime = 0
  audio.play()
}

결론



의외로 쉽게 구현할 수 있습니다.

이상 내일도 노력하겠습니다! !
tomowarkar 혼자 Advent Calendar Advent Calendar 2019

좋은 웹페이지 즐겨찾기