js逐步教实现音乐系统
时间:2022-07-28
本文章向大家介绍js逐步教实现音乐系统,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
html部分:
<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>
<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>
图片展示:
注意一下: div为动画,audio为声音.
css部分:
*{padding: 0px;margin: 0px;list-style: none;font-family: sans-serif;}
html{
font-size: 12px;
}
.keys
{
display: flex;
min-height: 100vh;
align-items: center;
justify-content: center;
flex: 1;
}
.key
{
border: 0.4rem solid black;
border-radius: .5rem;
font-size: 1.5rem;
padding: 1rem .5rem;
transition: all .07s ease;
text-align: center;
color: white;
width: 10rem;
background: rgba(0,0,0,0.4);
text-shadow: 0 0 .5rem black;
}
.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;
letter-spacing: .1rem;
color: #ffc600;
text-transform: uppercase;
}
图片描述:
注意一下这里:
我只说最难点:flex:1;代表太大了就缩小到占满整个body的部分(系统合理分配),太小了就扩大到合适到占满整个整个body的地步(系统合理分配).
js部分:
<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);
</script>
图片展示:
注意一下: 整块项目的代码逻辑: js核心逻辑: 当窗口察觉到了你按下了有上面图片中的某一个键时,就playing(动画)起来,并且音乐从0开始播放。当playing与play():(声音)也就是动画结束之后,就移除动画. 注意一下: 要用什么得先获取 第二;先判断是否有这种东西
if (!audio) return;
第三:说
`if(e.propertyName!=="transform")return;`
这里还没有发生你说还要做什么??是吧。
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法