Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 我能';t生成新音频(url).play()按新音频(url)停止。pause()暂停_Javascript - Fatal编程技术网

Javascript 我能';t生成新音频(url).play()按新音频(url)停止。pause()暂停

Javascript 我能';t生成新音频(url).play()按新音频(url)停止。pause()暂停,javascript,Javascript,我想要实现的目标:在启动新的声音时停止先前启动的声音。我现在拥有的是:声音同时播放,没有一个停止可能的原因:行中的逻辑语句错误if(audio.played&&audio.paused){在你评判我不够努力之前-我从3天开始就试图解决这个问题,我是一个初学者。这应该需要几分钟,甚至一个小时。我尝试了几种组合。最后我列出了几个我尝试过但仍然没有解决的网站。在所有答案中都是类似的,但我仍然无法解决如果选择了浏览器,则始终只执行一个部分:audio.play()或audio.pause()在日志中。它

我想要实现的目标:在启动新的声音时停止先前启动的声音。我现在拥有的是:声音同时播放,没有一个停止可能的原因:行中的逻辑语句错误if(audio.played&&audio.paused){在你评判我不够努力之前-我从3天开始就试图解决这个问题,我是一个初学者。这应该需要几分钟,甚至一个小时。我尝试了几种组合。最后我列出了几个我尝试过但仍然没有解决的网站。在所有答案中都是类似的,但我仍然无法解决如果选择了浏览器,则始终只执行一个部分:audio.play()或audio.pause()在日志中。它可以工作,但不是我想要的,这些逻辑语句就像论坛上的其他信息一样。在消息的末尾,你可以看到我已经尝试过好几次的所有类似主题。我保留了尽可能清晰的代码,我想用香草javascript这样做,因为我现在不会处理任何更复杂的问题ed.一个音频url在点击时从修改过的id中获取,音频在我的磁盘上。它工作正常,如果(audio.played&&audio.paused){除了放弃和改变爱好之外,还有什么想法吗

<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Timeout</title>  
</head>

<script>    
    function playAudio3(clicked_id) {   
    var OriginalID = (clicked_id);   
    var res = OriginalID.slice(5,-1);  
    var audioID=res+'.mp3';
    var url =audioID;
    var audio = new Audio(url);

    if (audio.played && audio.paused){
    audio.play();
    console.log('audio.play was used.');
    }else {
    audio.currentTime = 0   
    audio.pause();
    console.log('audio.pause was used.');
    }   
    }                               
</script>
 
<body>
<span id="guita2x"onclick="playAudio3(this.id);">   Guitar. </span>         
<span id="piano2x" onclick="playAudio3(this.id);">  Piano.  </span> 
<span id="basse15x" onclick="playAudio3(this.id);"> Basse.  </span>                                                               
</body>
    
</html>  


超时
函数playAudio3(单击\u id){
var OriginalID=(单击了\u id);
var res=原始切片(5,-1);
var audioID=res+'.mp3';
var url=音频ID;
var audio=新音频(url);
如果(audio.played&&audio.paused){
音频播放();
console.log('使用了audio.play');
}否则{
audio.currentTime=0
audio.pause();
console.log('使用了audio.pause');
}   
}                               
吉他。
钢琴。
巴斯。

永远不要放弃,也不要改变爱好。:) 一位业余爱好者也提出了可能的解决方案:

files = ['guitar', 'piano', 'bass']; // name of your files in array. You can get this array from looping through your html/spans id's too, but, this is basic logic
audios = []; //empty audios object array
for (i = 0; i < files.length; i++) {
    var audioID = files[i] + '.mp3';
    var url = audioID;
    var audio = new Audio(url);
    audios.push(audio); //place all audio objects into array
}
console.log(audios);
//now - basic logic to check which audio element to play, and to stop others
function playAudio3(clicked_id) {
    for (i = 0; i < audios.length; i++) {
        if (audios[i].src.includes(clicked_id)) {
            audios[i].play();
        } else {
            audios[i].currentTime = 0
            audios[i].pause();
        }
    }
}
files=['guitar'、'piano'、'bass'];//数组中文件的名称。您也可以通过html/spans id循环获得此数组,但这是基本逻辑
audios=[];//空的audios对象数组
对于(i=0;i
因此,您将在页面加载时创建所有音频对象,然后选择要播放的对象。当然,这将从一开始播放所有音频文件。如果您希望跟踪音频进度,并从最后一次暂停开始播放,则需要添加一些内容,但我希望这可能是开始

好的,更新了,我保留了您的一些代码,并在HTML中稍微更改了一些内容

您的完整代码现在应该如下所示:(HTML)

吉他。 钢琴。 巴斯。
Js:

span=document.querySelectorAll('.aud');
控制台日志(spans);
audios=[];//空的audios对象数组
对于(i=0;i
现在,我刚刚将类“aud”添加到您的跨度中,以便于确定目标。 然后,我从spans中收集id并将其放入audios阵列中(不确定为什么要分割名称/id,只需添加数字即可简化操作:1、2、3等等)

现在,这必须起作用,如果

  • 您的html/js文件所在的文件夹中有3.mp3文件,名为:1.mp3、2.mp3、3.mp3

  • 如果在关闭“body”标记之前将javascript放在下面的HTML中


  • 尝试用逻辑OR而不是AND组合这两个条件。我已经尝试过了(| |),它也不起作用。我感谢您的尝试。您正在创建新音频,浏览器开始异步下载文件
    。它不会自动开始播放-因此您对
    播放的
    和/或
    暂停的
    的检查毫无意义。您应该等到下载了足够的数据后再尝试播放尖酸刻薄的游戏-看文档谢谢你的特别好的话,更不用说一个有价值的帮助了。我正试图学习一个新的职业,因为科罗纳禁闭,但它走得很慢。我认真地花了10-20个小时,但在路上学习,所以我不觉得时间浪费了。我只想看到它工作。这仍然是行不通的rk在我的例子中,代码看起来很纯,我看到这些音频,日志中没有错误。但是,我只能听到静态的安静噪音。我将尝试一步一步地理解它,而且这段youtube视频可能有答案“”。在原始文件中,我从id中剪切了一个名称,因此guita2x变成了2.mp3。我将它列在数组中,作为“1”、“2”等。因此,可能“this.id”和从数组中发射的音频之间缺乏连接?对我有效,在本地,使用我的.mp3进行测试。如果你找不到解决方案,我只做一个
    
     <span class='aud' id="guita1x" onclick="playAudio3(this.id);">   Guitar. </span>         
        <span class='aud' id="piano2x" onclick="playAudio3(this.id);">  Piano.  </span> 
        <span  class='aud' id="basse3x" onclick="playAudio3(this.id);"> Basse.  </span> 
    
    spans=document.querySelectorAll('.aud');
    console.log(spans);
    
    audios = []; //empty audios object array
    for (i = 0; i < spans.length; i++) {
         var OriginalID = spans[i].id;
       var res = OriginalID.slice(5,-1);  
        var audioID=res+'.mp3';
        var url =audioID;
        var audio = new Audio(url);
        audios.push(audio); //place all audio objects into array
    }
    console.log(audios);
    //now - basic logic to check which audio element to play, and to stop others
    function playAudio3(clicked_id) {
        for (i = 0; i < audios.length; i++) {
            clickid=clicked_id.replace(/[A-Za-z]/g,'')+'.mp3';
            
            if (audios[i].src.includes(clickid)) {
                audios[i].play();
            } else {
                audios[i].currentTime = 0
                audios[i].pause();
            }
        }
    }