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

页面刷新随机展示图片音频功能 多音频同时播放问题求助

问题根因

音频同时播放和ID选择逻辑无关,是因为你给所有<audio>标签都加了autoplay属性:该属性的触发和父元素的display状态无关,只要元素被浏览器解析到就会自动播放音频,哪怕父容器设为隐藏也不会停止。

修复方案

步骤1:修改HTML代码

  • 修正DOCTYPE的闭合错误
  • 删除所有<audio>标签的autoplay属性
  • 给所有内容div加统一的初始样式,默认隐藏,减少重复JS代码

修改后的HTML代码:

<!DOCTYPE html>
<html>
<head>
    <title>johannes</title>
    <script language="javascript" type="text/javascript" src="random.js"></script>
    <style>
        /* 所有内容块默认隐藏 */
        .content-item {
            display: none;
        }
    </style>
</head>
<body>
    <div id="spaghetti" class="content-item">
        <img src="/Users/henrigimm/Documents/Johannes test/Illu Johannes/spaghetti.png">
        <audio>
          <source src="/Users/henrigimm/Documents/Johannes test/spaghetti.mp3" type="audio/mpeg">
          Your browser does not support the audio element.
        </audio>
    </div>
    <div id="bier" class="content-item">
        <img src="/Users/henrigimm/Documents/Johannes test/Illu Johannes/bier.png">
        <audio>
          <source src="/Users/henrigimm/Documents/Johannes test/bier.mp3" type="audio/mpeg">
          Your browser does not support the audio element.
        </audio>
    </div>
    <div id="zelt" class="content-item">
        <img src="/Users/henrigimm/Documents/Johannes test/Illu Johannes/zelt.png">
        <audio>
          <source src="/Users/henrigimm/Documents/Johannes test/zelt.mp3" type="audio/mpeg">
          Your browser does not support the audio element.
        </audio>
    </div>
</body>
</html>

步骤2:修改JS代码

随机选中对应内容块显示后,主动调用该块内音频的播放方法即可。修改后的JS代码:

window.onload = function() {
    // 生成1-3的随机数
    const randomNumber = Math.floor(Math.random()*3 + 1);
    let targetId;
    // 匹配对应的内容块ID
    if (randomNumber === 1) {
        targetId = 'spaghetti';
    } else if (randomNumber === 2) {
        targetId = 'zelt';
    } else {
        targetId = 'bier';
    }
    // 显示目标内容块
    const targetEl = document.getElementById(targetId);
    targetEl.style.display = 'inline';
    // 播放目标块内的对应音频
    const audioEl = targetEl.querySelector('audio');
    audioEl.play();
}

额外注意

现在大部分浏览器默认禁止自动播放音频,需要用户和页面有过至少一次交互(比如点击页面任意位置)后才允许调用play()方法,如果遇到播放失败的情况,可以加个点击页面触发播放的兼容逻辑即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 19:09:03