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