音频排队不立即播放
问题描述:
我正在处理html5中的音频相关文件。音频排队不立即播放
我用下面的函数来改变音频
function Audioplay(id) {
var id=id.split('Symbols')[1];
var FolderRedirect=id.split('')[0];
$("#audio").get(0).pause();
$("#audio").attr('src', ' ');
$("#audio").attr('src', 'assets/audio/'+Folder[FolderRedirect]+'/sound_'+id+'.mp3');
$("#audio").get(0).play();
};
它改变了声音,但它会完全首次出战。我怎样才能立即播放它onclick
?谢谢
答
如果你看看你的功能,你打电话play()
作为最后一行。删除它,并将其作为点击处理程序添加到您用作控件的任何元素上。
还有其他的清理工作,你应该考虑:
- 函数名常规以小写字母开头 - 以大写字母开头的功能意味着您应该使用
new
运算符来创建一个。 - 您重新声明
id
作为局部变量,即使它作为参数传入。 - 您可以从函数的主体中引用变量
Folder
。这使得很难推断那里发生的事情。考虑将folder
数组(注意正确的情况)作为参数传递给函数,或者甚至更好地将重定向的派生分离为单独的函数。 - 您强制jQuery找到4次
#audio
元素。相反,将其存储在本地变量中,以便jQuery只需查看一次即可。
一个经过改进的功能:
function playAudio($audio) {
$audio.get(0).play();
}
function normalizeId(rawId) {
var idParts = id.split('Symbols');
return idParts[1];
}
function getFolderRedirectFromNormalizedId(normalizedId) {
return normalizedId.split('')[0];
}
function getSourcePathFromId(id) {
var folders, folderRedirect, normalizedId;
folders = [/* Initialize your folder array */];
normalizedId = normalizeId(id);
folderRedirect = getFolderRedirectFromNormalizedId(normalizedId);
return 'assets/audio/' + folders[folderRedirect] + '/sound_' + normalizedId + '.mp3';
}
function initializeAudio(id) {
var src, $audio;
$audio = $("#audio");
$audio.get(0).pause();
$audio.attr('src', ' ');
src = getSourcePathFromId(id);
$audio.attr('src', src);
$('.control-you-want-to-click').click(function() {
playAudio($audio);
});
}
initializeAudio();