javascript - 使用 Javascript/jQuery 一次播放一个 HTML 音频文件

标签 javascript jquery html audio

在我的页面中,每个键盘按键都会触发一个音频文件。对于字母 A 到 Z,将播放相应的音频文件,对于每隔一个键(ESC 除外),将播放 26 个音频文件中的随机一个。例如,如果我按 A 和 B,两个音频文件将同时播放,但我希望一次只播放一个文件。我将如何实现这一点?

function keyDown(event) {
    var key = event.keyCode, sound, randomSound;
    if (key === 27) {
        //Play exit audio file, remove event listener, exit...
    } else if (key >= 65 && key <= 90) {
        sound = document.getElementById(key);
        sound.play();
    } else {
        randomSound = getRandomInt(65, 90);
        sound = document.getElementById(randomSound);
        sound.play();
    }

    window.onload = function() {
    window.addEventListener("keydown", keyDown);
};

编辑:我希望音频文件一直播放到结束,然后用户才能按下另一个键并触发另一个文件。我很抱歉之前没有说清楚。

最佳答案

发生这种情况的原因是因为每个 <audio>元素在它自己的 channel 上播放。要使其一次播放一个,您应该只使用一个 Audio 对象。

为此,您应该只使用一个 Audio目的。像这样:

var audio = new Audio();

...

if (!audio.paused) audio.pause();
if (key >= 65 && key <= 90) {
    audio.src = document.getElementById(key).src; /* set audio.src to URL of individual audio element */
    audio.play();
} else {
    randomSound = getRandomInt(65, 66);
    audio.src = document.getElementById(randomSound).src; /* set audio.src to URL of individual audio element */
    audio.play();
}

编辑

要回答你修改后的问题,你只需做这样的事情

var audio = new Audio();

function keyDown(event) {
    if (!audio.paused) // if audio hasn't ended, don't replace it.
        return; 

    var key = event.keyCode, sound, randomSound;
    if (key === 27) {
        //Play exit audio file, remove event listener, exit...
    } else if (key >= 65 && key <= 90) {
        audio.src = document.getElementById(key).src;
        audio.play();
    } else {
        randomSound = getRandomInt(65, 90);
        audio = document.getElementById(randomSound).src;
        audio.play();
    }

    window.onload = function() {
    window.addEventListener("keydown", keyDown);
};

关于javascript - 使用 Javascript/jQuery 一次播放一个 HTML 音频文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35299053/

相关文章:

javascript - 在调整大小时,将 li 从嵌套的 ul 移动到顶级 ul 会创建很多 lis

javascript - 如何使用 JavaScript 删除第一个文本区域上的文本来清除 2 个文本区域?

javascript - JavaScript的解释?和:

javascript - 输入框上叠加图标

javascript - 使用 JAVASCRIPT 从 HTML 上的 JSON 数组读取数据

jquery - 如何更改具有相同顶部位置但不是上方或下方 sibling 的跨度的颜色

jquery - 当宽度不够时,使 Bootstrap 导航栏中的可扩展搜索表单出现在其他所有内容之上

JavaScript 在提交时随机排列数组并进行计数

html - 使元素向右移动

javascript - HTML - 按钮仅在第二次单击后取消