2014-09-25 126 views
0

我正在处理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?谢谢

回答

0

如果你看看你的功能,你打电话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();