【发布时间】:2016-03-01 02:32:30
【问题描述】:
我正在使用 HTML 5 <audio> 标签。我觉得它很酷,但只是遇到了一个非常奇怪的情况。简而言之,canplaythrough 不会像预期的那样在移动设备上触发。
在这种情况下,我在网页上有几个按钮:
<button id="sndbtn01" onclick="createAudioById('01')">Audio 01</button>
<button id="sndbtn02" onclick="createAudioById('02')">Audio 02</button>
<button id="sndbtn03" onclick="createAudioById('03')">Audio 03</button>
<button id="sndbtn04" onclick="createAudioById('04')">Audio 04</button>
我希望在单击“Audio 01”时播放 01.mp3,以及单击“Audio 02”、“Audio 03”、“Audio 04”按钮的类似动作。而且我希望在点击按钮的时候创建<audio>标签,这样我就可以在不预加载所有内容的情况下节省流量。
所以,我有 JavaScript 代码:
var audioObj = {};
function createAudioById(id){
var p = audioObj[id];
// alert(1)
if (p != undefined) {
alert(2);
p.play();
return;
} else {
alert(3);
p = new Audio();
p.addEventListener('canplaythrough', function(e){
e.currentTarget.removeEventListener('canplaythrough', arguments.callee);
alert(4);
p.play();
});
p.src = '../snds/'+id+'.mp3';
audioObj[id] = p;
}
}
但这种行为在移动设备上很奇怪:
在手机 (iPhone) 上:
- 首先单击
button 01会触发(3),然后什么也没有发生 -canplaythrough事件从未被触发并且音频从未播放过 - 与预期不同:(4)应该被触发并且音频应该被播放; - 如果我再次单击该按钮,
(2)将触发并播放音频。但奇怪的是,音频开始播放几秒钟后,(4)就被触发了。 - 如果我在播放音频时单击按钮,
(2)会被触发并且没有任何反应,音频会继续播放 - 正如预期的那样; - 如果我在音频播放完毕时点击按钮,
(2)将被触发,音频已播放,(4)永远不会弹出 - 正如预期的那样。
【问题讨论】:
标签: javascript ios audio