javascript - 在 vue.js 中检测键盘按钮并播放声音
问题描述
下面的代码实际上会在使用 vue.js 的每个按钮单击时播放声音。
当 DOM 准备好而不是单击按钮时,如何检测键盘按下和播放声音?
例如在输入播放声音时v-on:keyup.13="playSound('path/to/mp3')"
Vue文档主要解释html属性,我猜这可能是需要在JS中完成的事情。我是 Vue.js 的新手
关于事件修饰符的 Vue.js 文档
请参阅代码笔。
new Vue({
el: '#app',
data: {
text: ''
},
methods: {
playSound (sound) {
if(sound) {
var audio = new Audio(sound);
audio.play();
}
}
}
});
解决方案
当您按下一个键时,键盘事件将从活动元素中触发并向上冒泡。因此,如果您想处理所有按键而不管哪个元素具有焦点,那么您将需要在代码中手动注册侦听器,例如document
.
new Vue({
el: '#app',
created() {
this.onKeyDown = this.onKeyDown.bind(this);
document.addEventListener('keydown', this.onKeyDown);
},
destroyed() {
document.removeEventListener('keydown', this.onKeyDown);
},
methods: {
playSound (sound) {
if(sound) {
var audio = new Audio(sound);
audio.play();
}
},
onKeyDown(e) {
switch (e.keyCode) {
case 65: this.playSound(sound1); break; // 'a' key
case 66: this.playSound(sound2); break; // 'b' key
}
},
}
});
推荐阅读
- javascript - 将带有对象的数组转换为带有来自该对象的特定键的数组?
- json - 如何检查 Newtonsoft.Json.Linq.JArray 如果为 null 或获取长度
- c - 允许编译器优化 realloc 吗?
- vb.net - 计算出时间跨度,但需要分钟 00:20:00 (HH:mm:ss)
- assembly - 如何在 ARM 程序集的循环中使用分支?
- youtube - 如何获取 Youtube API v3 中 PlaylistItems 中列出的视频的频道 ID?
- spring-data-jpa - 如何将 Spring 数据查询记录到 Couchbase 数据库
- sql - 从单列计算多个闯入和退出
- clojure - 在 clojure 中,我如何访问和返回此集合的修改版本
- python - 我无法向电报机器人用户发送消息,但我自己