美文网首页
JavaScript30 Day 1

JavaScript30 Day 1

作者: lijianliang | 来源:发表于2017-07-24 15:14 被阅读0次

    这是我在github 上发现的一个原生js挑战项目,由于是js小白,希望通过这次的项目加深对js的理解

    第一天的挑战是运用js实现一个爵士鼓的效果,通过敲击键盘上不同的按键,发出不同的声音。
    下面是实现后的效果图:

    Day1效果图

    下面我就讲讲我在这个项目中遇到的难点和学会的知识点:

    一、playSound()函数

    function playSound(e) {
    const audio = document.querySelector(`audio[data-key="${e.keyCode}"]`);
    const key = document.querySelector(`div[data-key="${e.keyCode}"]`);
    if (!audio) return;
    key.classList.add('playing');
    audio.currentTime = 0;
    audio.play();
    }
    

    document.querySelector()用于查询匹配指定css选择器的第一个元 素,document.querySelectorAll()是查询匹配的所有元素。本次项目我闹了个笑话,
    我以为()里的就是个普通字符串,于是我就用了单引号'',但调试的时候怎么也达不到想要的效果,然后我就只能去求助度娘,然后发现 String是模板字符串,ES2015新增的符号,模板字符串里面${var}是变量的占位符。例如:

    var x = 'a', y = 'b';
    var z = `${x,y}`; //'b'
    

    keyCode是键盘上的按键所对应的ascii码,key.classList.add('playing');是向key的class列表中添加一个playing,playing在css中如此定义

    .playing {
      transform: scale(1.1);//放大到1.1倍
      border-color: #ffc600;//变黄色
      box-shadow: 0 0 1rem #ffc600;
    }
    

    audio.currentTime=0;是为了保证按键被按住不放时,可以马上响起连续鼓点声。

    即每次播放音频之前,设置播放时间戳为 0。

    二、removeTransition()函数

     function removeTransition(e) {
        if (e.propertyName !== 'transform') return;
        e.target.classList.remove('playing');
      }
    

    e.target是发生该事件的对象,其实可以用 this来替代

    三、添加事件监听

      const keys = Array.from(document.querySelectorAll('.key'));
      keys.forEach(key => key.addEventListener('transitionend', removeTransition));//
      window.addEventListener('keydown', playSound);//键盘按下的时候触发 playSound()
    

    Array.from()可以将伪数组转化为数组,详情可以看MDN
    利用一个叫 transitionened
    的事件,它在 CSS transition 结束后会被触发。


    以上就是我在day1中学到的知识,这里我参考了soyaine的中文指南

    相关文章

      网友评论

          本文标题:JavaScript30 Day 1

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