我正在构建一个web应用程序,其中包括一个表单和(作为一个渐进的增强/用户体验效果),我想要一个按键来触发一个击键声音效果。
我已经削减了.mp3的声音效果相当短(0.18s)。
然而,当我在我的笔记本电脑上的Firefox上测试我的安装程序时,似乎出现了可听到的延迟(并不是每个按键都会触发声音效果)。
在我的Android上的Firefox Mobile上,很少有按键触发声音效果--也许每八个键中就有一个键。
我是在尝试用现在的网络技术去实现一些无法完成的事情,还是我只是简单地以错误的方式来处理这个问题呢?
这是我的设置:
var myInput = document.getElementsByTagName('input')[0];
var keypress = document.getElementsByClassName('keypress')[0];
function playSoundEffect() {
keypress.play();
}
myInput.addEventListener('keydown', playSoundEffect, false);
/* I've also tried...
myInput.addEventListener('keyup', playSoundEffect, false);
myInput.addEventListener('keypress', playSoundEffect, false);
*/input {
width: 90vw;
}<input type="text" placeholder="Type to hear the sound effect..." />
<audio class="keypress">
<source src="http://handsoffhri.org/.assets/theme/elements/mp3/keypress.mp3" type="audio/mpeg">
</audio>
第二次尝试:
由于下面来自@StackingForHeap和@zero298的有益评论,我重构了我的设置:
var myInput = document.getElementsByTagName('input')[0];
function playSoundEffect() {
var jsKeypress = new Audio('http://handsoffhri.org/.assets/theme/elements/mp3/keypress.mp3');
jsKeypress.play();
}
myInput.addEventListener('input', playSoundEffect, false);input {
width: 90vw;
}<input type="text" placeholder="Type to hear the sound effect..." />
这无疑是一个改进--每次创建一个新的Audio对象,允许每个对象独立于以前创建的Audio对象进行播放。
发布于 2017-10-04 17:06:36
我尝试对howler.js库进行相同的处理,它似乎运行得很好。这是示例
var myInput = document.getElementsByTagName('input')[0];
var sound = new Howl({
src:['http://handsoffhri.org/.assets/theme/elements/mp3/keypress.mp3']
});
sound.play();
function playSoundEffect() {
sound.play();
}
myInput.addEventListener('keydown', playSoundEffect, false);https://stackoverflow.com/questions/46569903
复制相似问题