网页mp3播放

封装了一个Web页面上播放mp3的功能,将mp3播放封装为一个小圆按钮。但对于不支持HTML5的IE6~8,通过html5media插件的flash功能对mp3进行播放,暂未对其封装为小圆按钮。
依赖脚本:
DOM操作常用方法
Javascript浏览器相关方法
IE上的startsWith和endWith方法
外部依赖:
html5media - 使html5的audio标签兼容各版本浏览器
Font Aswsome

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
var Iflat = Iflat || {};
/**
* Iflat.Audio用于在指定的标签内创建一个音频播放器,播放mp3;
* 页面加载或修改完成后,调用Iflat.Audio.init(),装载音频播放器;
* 插件为原生Javascript,不依赖jQuery
* @param selector 标签选择器,默认'.iflat-audio',
* 支持 id(#id), className(.className), tagName(tagName)选择,不支持div[name=abc]这种复杂指定,
* 建议在div或span中加载此插件,否则在ie6-8中无法正常使用;
* 在页面增加selector指向的标签后,需调用Iflat.Audio.init()重新部署,最好是直接针对增加的标签部署,否则插件会检索全页面,效率较低;
* @param attr 从指定标签的哪个属性获取音频文件路径,默认'scr',修改mp3路径后,无需重新部署,监听器会自动关联路径信息
*/
Iflat.Audio = {
className: '.iflat-audio',
attrName: 'src',

init: function (selector, attr) {
// 如果是ie浏览器,扩展其String原型方法,使其标!准!化!
var browser = Iflat.Browser.ieBullshitting();
// 根据选择器查询到所有满足条件的标签
var sel = selector || this.className;
var eles = [];
if (sel.startsWith("#")) {
var id = sel.substring(1, sel.length);
eles[0] = document.getElementById(id);
} else if (sel.startsWith(".")) {
var clsName = sel.substring(1, sel.length);
var all = document.getElementsByTagName("*");
for (var o = 0; o < all.length; o++) {
var eleCls = all[o].className
if (eleCls.indexOf(' ' + clsName) >= 0
|| eleCls.indexOf(clsName + ' ') >= 0
|| eleCls === clsName) {
eles[eles.length] = all[o];
}
}
} else {
eles = document.getElementsByTagName(sel);
}

var attr = attr || this.attrName
if (eles && eles.length > 0) {
for (var i = 0; i < eles.length; i++) {
// 获取标签的src属性,即mp3资源
var src = eles[i].getAttribute(attr);
// 将播放所需html代码置入标签内部
var cmpHtml = '';
if (browser.name === 'ie' && browser.version < 9) {
cmpHtml = '<audio src="' + src + '" controls></audio>';
} else {
cmpHtml = '<a href="javascript:void(0);" onclick="Iflat.Audio.clickPlayButton(this)"><i style="color:#1f6cf8" class="fa fa-play-circle fa-lg"></i></a><audio src="' + src + '" onended="Iflat.Audio.end(this)"></audio>';
}
eles[i].innerHTML = cmpHtml;
// 定义监听器的callback函数,使容器内的audio的src保持同步
var bindSrc = function (e) {
var audio = Iflat.DOM.lastChild(e);
if (!audio.paused) {
audio.pause();
}
var icon = Iflat.DOM.firstChild(Iflat.DOM.previousSibling(audio));
icon.className = "fa fa-play-circle fa-lg";
audio.setAttribute('src', e.getAttribute(attr))
}
// 增加监听器
Iflat.DOM.addAttributeListener(eles[i], attr, bindSrc);
}
}
},
clickPlayButton: function (ele) {
var media = Iflat.DOM.nextSibling(ele);
if (!media) {
console.error("未找到可播放的音频。");
return;
}
var icon = Iflat.DOM.firstChild(ele);
if (media.paused) {
media.play();
icon.className = "fa fa-pause-circle fa-lg";
} else {
media.pause();
icon.className = "fa fa-play-circle fa-lg";
}
},
end: function (ele) {
var icon = Iflat.DOM.firstChild(Iflat.DOM.previousSibling(ele));
icon.className = "fa fa-play-circle fa-lg";
},
play: function (audio) {
if (audio.paused) {
audio.play();
}
},
pause: function (audio) {
if (!audio.paused) {
audio.pause();
}
},
};
分享到