美文网首页前端驿站
JavaScript Drum Kit

JavaScript Drum Kit

作者: qfstudy | 来源:发表于2017-12-17 10:13 被阅读0次
    简介:JavaScript30Wes Bos推出的一个 30 天挑战。项目免费提供了 30 个视频教程、30 个挑战的起始文档和 30 个挑战解决方案源代码。

    简介

    第一天是用JS制作爵士鼓的页面,通过敲击键盘上对应的字母就会发出对应的声音。


    效果图
    主要解决的难点:
     1.将键盘事件与audio建立联系
     2.通过键盘按下事件点击实现特效的展现与消失
    
    ES6语法
    const声明常量
    运用了ES6中的模板字符串和箭头函数
    
    知识点
    Array.forEach()函数和Array.from()的使用
    html5中的data-*的使用
    

    removeTransition
    这个函数主要是实现当按下相应的键盘按键的时候,在页面中显示特效,并移除特效。

    playSound
    当按下按键的时候,就会发出声音

    监听
    window.addEventListener('keydown', playSound);监听事件,其中的参数playSound函数是有参数的,通过console.log查看,就可以看见使用addEventListener时,给函数传递的参数是一个事件对象。

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="utf-8">
    <style type="text/css">
        html{
        background-image: url(http://i.imgur.com/b9r5sEL.jpg);
      }
        html,body{
        margin: 0px;
        padding: 0px;
        font-family: sans-serif;
       }
      .keys{
         display: flex;
         flex: 1;
         min-height: 100vh;
         align-items: center;
         justify-content: center;
      }
      .key{
        font-size: 0.2rem;
        border: .4rem solid black;
        border-radius: 50%;
        margin: 0.6rem;
        padding: .2rem .2rem;
        transition: all .07s ease;
        text-align: center;
        background: rgba(0, 0, 0, 0.4);
      }
     .playing{
        transform: scale(1.1);
        transform: rotate(360deg);
        border-color: #ffc600;
        box-shadow: 0 0 2rem #ffc600;
      }
     kbd{
       display: block;
       color: #fc60fd;
      }
     .sound {
       text-transform: uppercase;/* 大写字母 */
       letter-spacing: .1rem;
       color: #ffc600;
      }
     </style>
    </head>
    <body>
    <div class="keys">
      <div data-key="65" class="key">
          <kbd>A</kbd>
          <span class="sound">clap</span>
      </div>
      <div data-key="83" class="key">
          <kbd>S</kbd>
          <span class="sound">hihat</span>
      </div>
      <div data-key="68" class="key">
          <kbd>D</kbd>
          <span class="sound">kick</span>
      </div>
      <div data-key="70" class="key">
          <kbd>F</kbd>
          <span class="sound">openhat</span>
      </div>
      <div data-key="71" class="key">
          <kbd>G</kbd>
          <span class="sound">boom</span>
     </div>
     <div data-key="72" class="key">
          <kbd>H</kbd>
          <span class="sound">ride</span>
     </div>
     <div data-key="74" class="key">
          <kbd>J</kbd>
          <span class="sound">snare</span>
     </div>
     <div data-key="75" class="key">
          <kbd>K</kbd>
          <span class="sound">tom</span>
     </div>
     <div data-key="76" class="key">
          <kbd>L</kbd>
          <span class="sound">tink</span>
     </div>
     <div data-key="32" class="key">
          <kbd>SPACE</kbd>
          <span class="sound">bgmusic</span>
     </div>
     <audio data-key="65" src="sounds/clap.wav"></audio>
     <audio data-key="83" src="sounds/hihat.wav"></audio>
     <audio data-key="68" src="sounds/kick.wav"></audio>
     <audio data-key="70" src="sounds/openhat.wav"></audio>
     <audio data-key="71" src="sounds/boom.wav"></audio>
     <audio data-key="72" src="sounds/ride.wav"></audio>
     <audio data-key="74" src="sounds/snare.wav"></audio>
     <audio data-key="75" src="sounds/tom.wav"></audio>
     <audio data-key="76" src="sounds/tink.wav"></audio>
     <audio data-key="32" src="sounds/ss.mp3"></audio>
    </div>
    </body>
    <script type="text/javascript">
       function removeTransition(e){
           if(e.propertyName!=="transform")return;
           e.target.classList.remove("playing");
       }
       function playSound(e){
           //console.dir(e);
           const key=document.querySelector(`div[data-key="${e.keyCode}"]`);
           const audio=document.querySelector(`audio[data-key="${e.keyCode}"]`);
           if(!audio)return;
           key.classList.add("playing");
           audio.currentTime=0;
           audio.play();
      }
      const keys=Array.from(document.querySelectorAll(".key"));
      keys.forEach(keys=>keys.addEventListener("transitionend",removeTransition));
      //keys.forEach(()=>addEventListener("keydown",playSound));
      window.addEventListener("keydown",playSound);
    </script>
    </html>

    相关文章

      网友评论

        本文标题:JavaScript Drum Kit

        本文链接:https://www.haomeiwen.com/subject/ekjewxtx.html