You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

点击新图片时停止当前音频的实现(不使用HTML audio标签)

解决多音频同时播放的问题

核心问题是你每次点击图片都会新建一个Audio实例,之前的音频没有被终止,所以会同时播放。我们只需要加个全局变量跟踪当前播放的音频,每次点击先停掉旧的再播新的就行,完全不用HTML的<audio>标签,符合你的挑战需求。

修改后的JavaScript代码

// 全局变量存当前正在播放的音频
let currentPlayingAudio = null;

window.addEventListener('load', function () {
    document.querySelectorAll("img").forEach(img => {
        img.addEventListener("click", playAudio);
    })
}, false);

function playAudio(event) {
    // 先停掉之前的音频
    if (currentPlayingAudio) {
        currentPlayingAudio.pause();
        currentPlayingAudio.currentTime = 0; // 重置到开头,下次播放从头来
    }

    const imgId = event.currentTarget.id;
    const newAudio = new Audio(`./sounds/${imgId}.wav`);
    
    newAudio.loop = true;
    newAudio.play();

    // 更新当前播放的音频实例
    currentPlayingAudio = newAudio;
}

关键改动说明

  • 新增currentPlayingAudio全局变量,专门记录当前在播的音频对象,这样每次点击都能找到之前的音频。
  • 每次点击新图片时,先检查这个变量:如果有正在播的,就暂停并重置进度,避免下次播放从中间开始。
  • 创建新音频、设置循环并播放后,把新实例赋值给全局变量,更新跟踪对象。

可选优化:同一图片点击切换播放/暂停

如果想让同一个图片点击时能暂停/继续播放,而不是每次都重新播放,可以改成这样:

let currentPlayingAudio = null;
let currentPlayingId = '';

window.addEventListener('load', function () {
    document.querySelectorAll("img").forEach(img => {
        img.addEventListener("click", playAudio);
    })
}, false);

function playAudio(event) {
    const imgId = event.currentTarget.id;

    // 如果点的是当前正在播的图片,切换播放/暂停
    if (currentPlayingId === imgId && currentPlayingAudio) {
        if (currentPlayingAudio.paused) {
            currentPlayingAudio.play();
        } else {
            currentPlayingAudio.pause();
        }
        return;
    }

    // 否则停掉旧的,播放新的
    if (currentPlayingAudio) {
        currentPlayingAudio.pause();
        currentPlayingAudio.currentTime = 0;
    }

    const newAudio = new Audio(`./sounds/${imgId}.wav`);
    newAudio.loop = true;
    newAudio.play();

    currentPlayingAudio = newAudio;
    currentPlayingId = imgId;
}

内容的提问来源于stack exchange,提问作者yeraki

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.28 19:23:18