Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/471.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 连续Html5 audio.play(),仅第一次触发_Javascript_Jquery_Html_Ipad_Html5 Audio - Fatal编程技术网

Javascript 连续Html5 audio.play(),仅第一次触发

Javascript 连续Html5 audio.play(),仅第一次触发,javascript,jquery,html,ipad,html5-audio,Javascript,Jquery,Html,Ipad,Html5 Audio,我想通过在每个函数中使用.play()执行函数调用回退来播放连续的声音序列,以便逐个播放声音 最有趣的事情是: 每次在我的iPad设备上播放时都会有不同的声音表现。 *有时播放音频3次,有时4次,甚至只有1次* 仅iPad中的“突然停止问题”,在我的谷歌Chrome上没有问题。 我想这不是iPad的自动播放问题,因为我已经第一次触发了 请看一看,并有一个测试在iPad上也许,请帮助 Html-正文: <audio id="html5soundtag"> <source

我想通过在每个函数中使用
.play()
执行函数调用回退来播放连续的声音序列,以便逐个播放声音

最有趣的事情是: 每次在我的iPad设备上播放时都会有不同的声音表现。 *有时播放音频3次,有时4次,甚至只有1次*

仅iPad中的“突然停止问题”,在我的谷歌Chrome上没有问题。

我想这不是iPad的自动播放问题,因为我已经第一次触发了

请看一看,并有一个测试在iPad上也许,请帮助

Html-正文:

<audio id="html5soundtag"> 
    <source src="1.mp3" type="audio/mpeg">
</audio> 
<a href="javascript://" onClick="playhtml5sound1('1.mp3')">aaaa</a> 

这应该可以解决您的问题,并且至少可以使您的代码更易于维护:

var audioPath = "";
var audioElement = document.getElementById('html5soundtag');

var soundIndex = 0;
var sounds = ["1.mp3","2.mp3","3.mp3","4.mp3","5.mp3"]

function playhtml5sound(){
    if(soundIndex < sounds.length){
        audioPath = sounds[soundIndex];
        audioElement.src = audioPath;
        audioElement.load()
        audioElement.play();
        soundIndex++;
    }else{
        audioElement.removeEventListener("ended",playhtml5sound);
        alert("Last sound ended!")
    }
};

audioElement.addEventListener("ended", playhtml5sound);
var audioPath=”“;
var audioElement=document.getElementById('html5soundtag');
var指数=0;
var sounds=[“1.mp3”、“2.mp3”、“3.mp3”、“4.mp3”、“5.mp3”]
函数playhtml5sound(){
if(声音索引<声音长度){
audioPath=声音[声音索引];
audioElement.src=音频路径;
audioElement.load()
audioElement.play();
soundIndex++;
}否则{
audioElement.removeEventListener(“结束”,播放HTML5Sound);
警报(“上次声音结束!”)
}
};
audioElement.addEventListener(“结束”,播放HTML5声音);

每次音乐结束时,都会执行播放HTML5Sound(),播放下一个声音。

如果播放最后一个声音,请删除事件侦听器,并提醒结束。

不是直接回答,而是代码太大,无法显示在注释中

我建议您将以下代码添加到脚本中,并检查控制台日志中除END之外的任何其他事件(例如暂停或错误事件)。我在iPad和iPod上进行了测试,两者都可以正常工作,可能是因为网络问题

var media_events = new Array();
function audioattachevents(selector) {
    media_events["abort"] = 0;
    media_events["error"] = 0;
    media_events["mousewheel"] = 0;
    media_events["blur"] = 0;
    media_events["focus"] = 0;
    media_events["pause"] = 0;
    media_events["canplay"] = 0;
    media_events["formchange"] = 0;
    media_events["play"] = 0;
    media_events["canplaythrough"] = 0;
    media_events["forminput"] = 0;
    media_events["playing"] = 0;
    media_events["change"] = 0;
    media_events["input"] = 0;
    media_events["progress"] = 0;
    media_events["click"] = 0;
    media_events["invalid"] = 0;
    media_events["ratechange"] = 0;
    media_events["contextmenu"] = 0;
    media_events["keydown"] = 0;
    media_events["readystatechange"] = 0;
    media_events["dblclick"] = 0;
    media_events["keypress"] = 0;
    media_events["scroll"] = 0;
    media_events["drag"] = 0;
    media_events["keyup"] = 0;
    media_events["seeked"] = 0;
    media_events["dragend"] = 0;
    media_events["load*"] = 0;
    media_events["seeking"] = 0;
    media_events["dragenter"] = 0;
    media_events["loadeddata"] = 0;
    media_events["select"] = 0;
    media_events["dragleave"] = 0;
    media_events["loadedmetadata"] = 0;
    media_events["show"] = 0;
    media_events["dragover"] = 0;
    media_events["loadstart"] = 0;
    media_events["stalled"] = 0;
    media_events["dragstart"] = 0;
    media_events["mousedown"] = 0;
    media_events["submit"] = 0;
    media_events["drop"] = 0;
    media_events["mousemove"] = 0;
    media_events["suspend"] = 0;
    media_events["durationchange"] = 0;
    media_events["mouseout"] = 0;
    media_events["timeupdate"] = 0;
    media_events["emptied"] = 0;
    media_events["mouseover"] = 0;
    media_events["volumechange"] = 0;
    media_events["ended"] = 0;
    media_events["mouseup"] = 0;
    media_events["waiting"] = 0;

    for (key in media_events) {
      selector.bind(key, function (e, data) {
        console.log(e.type);
      });
    }
}

audioattachevents($('#html5soundtag'));
特别是对于那些想要简短符号的人:

media_events = {"abort":0,"error":0, "mousewheel":0, "blur":0, "focus":0, "pause":0, 
   "canplay":0, "formchange":0, "play":0, "canplaythrough":0, "forminput":0, 
   "playing":0, "change":0, "input":0, "progress":0, "click":0, "invalid":0, 
   "ratechange":0, "contextmenu":0, "keydown":0, "readystatechange":0,       
   "dblclick":0, "keypress":0, "scroll":0, "drag":0, "keyup":0, "seeked":0, 
   "dragend":0, "load*":0, "seeking":0, "dragenter":0, "loadeddata":0, 
   "select":0, "dragleave":0, "loadedmetadata":0, "show":0, "dragover":0, 
   "loadstart":0, "stalled":0, "dragstart":0, "mousedown":0, "submit":0, 
   "drop":0, "mousemove":0, "suspend":0, "durationchange":0, 
   "mouseout":0, "timeupdate":0, "emptied":0, "mouseover":0, 
   "volumechange":0, "ended":0, "mouseup":0, "waiting":0}

你只使用1.mp3吗?有6个不同的回调?你打算播放1.mp3、2.mp3等吗?是的,在测试中我只使用单一样本声音“1.mp3”,因为现在我的问题是,当在ipad上运行时,回调会突然消失(停止)…并且每次在“死亡”的时间不同!例如,只有2个回调运行,下一次完全运行,然后下一次只运行1个回调…刷新网页后就不同了…请,绝对不需要有5个几乎相同的函数,更不用说事件监听器的杂耍了。你的iPad是哪一代,你运行的是哪一个iOS?抱歉,Cerburs:这真的是因为每次回调都会随机停止,所以我添加了它们进行测试,抱歉代码太长……谢谢bart,我现在就试试这个!顺便说一句,你的意思是你可以每次都显示“到此结束”的警报吗?如果你需要存储一堆字符串,请使用数组。或者,如果必须使用对象,请至少使用简短的表示法:
media\u events={“abort”:0,“error”:0等。}
。实际上,您正在将对象初始化为
var media_events=new Array()那不行。不能设置数组的
键/值
属性。您的数组是空的。@Cerbrus同意,但我需要更改现有代码,所以我只使用复制粘贴。对于user1900121:以上仅用于测试您是否收到任何其他事件,这些事件可能会给出音频中止的原因。例如,如果网络处于停滞、重新传输状态,如果iPad中的WiFi很差(这可能会发生)“更改现有代码”?将您的非工作对象符号转换为正确的数组需要2分钟的工作。@Cerbrus:non-working?你测试过了吗?我猜是你投了反对票。是的,我确实需要这个对象,因为在我的代码中,我还使用了一些东西来计算事件的数量!
media_events = {"abort":0,"error":0, "mousewheel":0, "blur":0, "focus":0, "pause":0, 
   "canplay":0, "formchange":0, "play":0, "canplaythrough":0, "forminput":0, 
   "playing":0, "change":0, "input":0, "progress":0, "click":0, "invalid":0, 
   "ratechange":0, "contextmenu":0, "keydown":0, "readystatechange":0,       
   "dblclick":0, "keypress":0, "scroll":0, "drag":0, "keyup":0, "seeked":0, 
   "dragend":0, "load*":0, "seeking":0, "dragenter":0, "loadeddata":0, 
   "select":0, "dragleave":0, "loadedmetadata":0, "show":0, "dragover":0, 
   "loadstart":0, "stalled":0, "dragstart":0, "mousedown":0, "submit":0, 
   "drop":0, "mousemove":0, "suspend":0, "durationchange":0, 
   "mouseout":0, "timeupdate":0, "emptied":0, "mouseover":0, 
   "volumechange":0, "ended":0, "mouseup":0, "waiting":0}