JavaScript30 Day 1

这是我在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的中文指南

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 174,385评论 25 709
  • 在线阅读 http://interview.poetries.top[http://interview.poetr...
    前端进阶之旅阅读 114,997评论 24 450
  • 今天他妈妈带他去德州最好的医院检查肚子痛的问题,两方面都检查了,没有炎症的问题,医生说没有问题,建议少吃凉的东西。...
    海滨阅读 129评论 0 1
  • 绿色的小河 抚摩水草的发丝 这个浪漫的夜晚 轻柔的月光从河底渗出 夜星啊 它光着身子 不停地观望自己 一块褐色的岩...
    小雪花Sun阅读 259评论 0 5
  • 文/沐叁 每日写作第35天,小米屋早早发来了写作练习,我还在拖延着,不肯执行,人一旦有了完美主义意识,就不肯犯错,...
    沐叁阅读 406评论 0 0