JavaScript Drum kit
用 JavaScript 实现网页鼓乐器,相关的初始代码在 JavaScript30 官网和 GitHub 上已经存在。我把 sound 文件夹下的音频全部替换掉了,一些相关解释也直接在注释中标明。
下面是最终成品地址,可能有些卡顿,音频加载也比较慢:
index.html:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JS Drum Kit</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="keys">
<div data-key="65" class="key">
<!--<kbd> 标签定义键盘文本-->
<kbd>A</kbd>
<span class="sound">clock</span>
</div>
<div data-key="83" class="key">
<kbd>S</kbd>
<span class="sound">pin</span>
</div>
<div data-key="68" class="key">
<kbd>D</kbd>
<span class="sound">gong</span>
</div>
<div data-key="70" class="key">
<kbd>F</kbd>
<span class="sound">ding-dong</span>
</div>
<div data-key="71" class="key">
<kbd>G</kbd>
<span class="sound">pulse</span>
</div>
<div data-key="72" class="key">
<kbd>H</kbd>
<span class="sound">robot</span>
</div>
<div data-key="74" class="key">
<kbd>J</kbd>
<span class="sound">wooden fish</span>
</div>
<div data-key="75" class="key">
<kbd>K</kbd>
<span class="sound">toaster</span>
</div>
<div data-key="76" class="key">
<kbd>L</kbd>
<span class="sound">bell</span>
</div>
</div>
<audio data-key="65" src="sound/clock.mp3"></audio>
<audio data-key="83" src="sound/pin.mp3"></audio>
<audio data-key="68" src="sound/gong.mp3"></audio>
<audio data-key="70" src="sound/ding-dong.mp3"></audio>
<audio data-key="71" src="sound/pulse.mp3"></audio>
<audio data-key="72" src="sound/robot.mp3"></audio>
<audio data-key="74" src="sound/wooden fish.mp3"></audio>
<audio data-key="75" src="sound/toaster.mp3"></audio>
<audio data-key="76" src="sound/bell.mp3"></audio>
<script>
function removeTransition(e) {
if (e.propertyName !== 'transform') return;
e.target.classList.remove('playing');
}
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();
}
const keys = Array.from(document.querySelectorAll('.key'));
keys.forEach(key => key.addEventListener('transitionend',
removeTransition));
window.addEventListener('keydown', playSound);
/*
1. forEach() 方法用于调用数组的每个元素,并将元素传递给回调数。
语法:array.forEach(function(currentValue, index, arr),thisValue)
2. addEventListener() 方法用于向指定元素添加事件句柄。
element.addEventListener(event, function, useCapture)
transitionend:该事件在 CSS 完成过渡后触发。
3. 箭头函数
x => x * x
上面的箭头函数相当于:
function (x) {
return x * x;
}
*/
</script>
</body>
</html>
style.css:
html {
font-size: 10px;
background: white bottom center;
}
body,
html {
margin: 0;
padding: 0;
font-family: sans-serif;
}
.keys {
display: flex;
flex: 1; /*让所有弹性盒模型对象的子元素都有相同的长度,且忽略它们内部的内容*/
min-height: 100vh;
/*align-items 属性定义flex子项在flex容器的当前行的侧轴(纵轴)方向上的对齐方式*/
align-items: center;
justify-content: center; /*元素在页面主轴上的排列,此处居中*/
}
.key {
border: 4px solid black;
border-radius: .5rem;
margin: 1rem;
font-size: 1.5rem;
padding: 1rem .5rem;
transition: all .07s ease;
/*
语法 transition: property duration timing-function delay;
transition-property 规定设置过渡效果的 CSS 属性的名称。
transition-duration 规定完成过渡效果需要多少秒或毫秒。
transition-timing-function 规定速度效果的速度曲线。
transition-delay 定义过渡效果何时开始。
*/
width: 10rem;
text-align: center;
color: white;
background: rgba(0, 0, 0, 0.5);
text-shadow: 0 0 .5rem black;
/*语法 text-shadow: h-shadow v-shadow blur color; */
}
.playing {
transform: scale(1.1);
border-color: #ffc600;
box-shadow: 0 0 1rem #ffc600;
}
kbd {
display: block;
font-size: 4rem;
}
.sound {
font-size: 1.2rem;
text-transform: uppercase;
letter-spacing: .1rem;
color: greenyellow;
}
JavaScript Drum kit的更多相关文章
- js & 快捷键
js & 快捷键 demo js-keyboard-shortcuts.html https://codepen.io/webgeeker/pen/MLYrNq let isCtrl = fa ...
- JavaScript 30 - 1 学习笔记
学习JavaScirpt30的笔记! ...虽然英语不是很好,但是跟着来还是学到了一些东西. 1-------> JavaScirpt Drum Kit 功能是这样的 ,敲击键盘上面的按钮, ...
- javascript30--day01--Drum kit
相关视频链接:https://www.bilibili.com/video/av8481988/?p=3 Drum kit 做题思路(1)监听键盘事件 addEventListener(‘事件名’,执 ...
- [转载]50个Demo展示HTML5无穷的魅力
Flash和HTML5的比较已经成为现在最热门的主题之一,我们不去争论哪个好哪个不好.和HTML5在很酷的动画和简单的游戏等方面一样,除非HTML5在未来几年有一些重大发展,否则Flash在富内容网页 ...
- JavaScript资源大全中文版(Awesome最新版)
Awesome系列的JavaScript资源整理.awesome-javascript是sorrycc发起维护的 JS 资源列表,内容包括:包管理器.加载器.测试框架.运行器.QA.MVC框架和库.模 ...
- 免费素材:包含 250+ 组件的 DO UI Kit
DO UI kit 现在可以免费用于 Photoshop 和 Sketch 了.它有超过130个屏幕,10个完整的主题以及250+的组件混合以创造惊人的应用.他们都是再混合和视网膜.最重要的是他们看起 ...
- EventRay UI Kit – Web & Mobile 的素材
EventRay UI 工具包是一个免费的,可以现成使用的界面套件.包括多个为 Web 和移动应用设计的布局和 UI 元素.所有你需要做的就是下载这个 UI 工具包,点击源码下载打开的页面即可下载. ...
- HTML5 Audio and JavaScript Control
IE8 以下无效 <!DOCTYPE html> <html> <head> <meta content="text/html; charset=u ...
- 你应该知道的JavaScript中NaN的秘密
NaN,不是一个数字,是一种特殊的值来代表不可表示的值,使用typeof或其他任何与之比较的处理方式,‘NaN’则会引起一些混乱, 一些操作会导致NaN值的产生.这里有些例子: Math.sqrt(- ...
随机推荐
- python 适合的才是最好的
群里老有人问最新的破解码最新的包,最新的就是最好的吗? 今天说一下这些新手的坑: numpy 最好使用的版本是1.13.3 而非新的1.17.0 pandas最好使用的版本是0.18.0 而非新的0 ...
- word excel 未响应
前几天笔记本突然出现word 一打开就未响应的情况,导致完全无法使用.今天发现 excel 也出现了这种情况.今天终于下定决心解决这个问题. 百度上搜索了很多,找到了很多解决方案.总结如下. 一.禁用 ...
- 安装TensorFlow时出现ERROR: Cannot uninstall 'wrapt'问题的解决方案
pip install -U --ignore-installed wrapt enum34 simplejson netaddr pip install -i https://pypi.tuna.t ...
- 25.Flutter中的表单 Radio RadioListTile Switch SwitchListTile 以及表单组件实现一个简单的学员登记系统(下)
四.Radio.RadioListTile单选按钮组件 Radio常用属性: value单选的值. onChanged改变时触发. activeColor:选中的颜色.背景颜色 groupValue: ...
- git帮助和小结
获取帮助 想了解 Git 的各式工具该怎么用,可以阅读它们的使用帮助,方法有三: $ git help <verb> $ git <verb> --help $ man git ...
- 实例解析Python设计模式编程之桥接模式的运用
实例解析Python设计模式编程之桥接模式的运用 这篇文章主要介绍了Python设计模式编程之桥接模式的运用,桥接模式主张把抽象部分与它的实现部分分离,需要的朋友可以参考下 我们先来看一个例子: #e ...
- delphi两个取字串长度的函数strlen,length
━━━━━━━━━━━━━━━━━━━━━━━━━━ [strlen]PChar 串专用函数:串长度 procedure TForm1.BitBtn1Click(Sender: TObject); v ...
- Tips for Conda
管理环境 创建环境 基于 python3.6 创建一个名为test_py3的环境 conda create -n test_py3 python=3.6 基于 python2.7 创建一个名为test ...
- win10 1803 频繁死机,卡死不动
摘自微软官网的解决办法,我的目测好像是可以了. 小娜搜索框输入“PowerShell”选择在管理员命令提示符下键入以下命令: Dism /Online /Cleanup-Image /ScanHeal ...
- LVS负载均衡在Ubuntu环境下部署详解
一.本地环境介绍: 负载均衡的三台机器均为Ubuntu Server 14.04 64位系统,内核中已集成ipvs模块( modprobe -l | grep ipvs 查看 ).为演示LVS负载均衡 ...