function AudioHelper() {
function isSupportOgg() {
var tmp = document.createElement('audio');
return tmp.canPlayType && "" != tmp.canPlayType('audio/ogg;codecs="vorbis"');
}
function soundHandle() {
var tempS, ifValid;
do {
tempS = soundIdArr.pop();
ifValid = typeof (tempS) !== "undefined";
if (ifValid) {
var dom = document.getElementById(tempS);
if (dom !== null)
dom.load();
}
} while (ifValid);
window.removeEventListener(eventName, soundHandle, true);
}
function createAudio(soundfile) {
var divBom = document.createElement('div');
divBom.innerHTML = '';
return divBom.childNodes[0];
}
var userAgent = navigator.userAgent.toLowerCase(); //取得浏览器的userAgent字符串
var isIE = userAgent.indexOf("compatible") > -1 && userAgent.indexOf("msie") > -1; //判断是否IE<11浏览器
var ieVersion = 0;
if (isIE) {
try {
if (document.documentMode)
ieVersion = document.documentMode;
else ieVersion = userAgent.match(/msie ([\d.]+)/)[1];
}
catch (e) {
ieVersion = 0;
}
}
var isSwf = isIE && ieVersion < 9;
var isOgg = !isSwf && isSupportOgg();
var soundfileHash = new Object();
var soundIdArr = [];
var eventName = /i(phone|p(o|a)d)/.test(userAgent) ? "touchstart" : "touchend";
this.init = function (id, soundfile) {
var ifChange = soundfileHash[id] !== soundfile;
if (ifChange)
soundfileHash[id] = soundfile;
if (typeof (soundfile) !== "string")
return false;
var dom = document.getElementById(id);
var hasDom = dom != null;
if (isSwf)
{
if (hasDom)
return true;
dom = document.createElement("div");
}
else {
if (hasDom)
{
if (!ifChange)
return true;
document.body.removeChild(dom);
}
soundIdArr.push(id);
dom = createAudio(soundfile);
if ('on' + eventName in document.documentElement) {
window.removeEventListener(eventName, soundHandle, true);
window.addEventListener(eventName, soundHandle, true);
}
dom.style.display = "none";
}
dom.id = id;
document.body.appendChild(dom);
return true;
}
this.play = function (id) {
var soundfile = soundfileHash[id];
if (typeof (soundfile) !== "string")
return false;
var dom = document.getElementById(id);
if (dom) {
if (isSwf) {
soundfile = soundfile + ".swf";
if (ieVersion < 6)
dom.innerHTML = "";
else
dom.innerHTML = "";
}
else dom.play();
}
}
}
var audioHelper = new AudioHelper();
/* 例子
初始化一次或者修改文件:audioHelper.init("playSound", "/files/audio/nba/sound");
播放:audioHelper.play("playSound")
*/