2014-09-25 85 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();