百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>html5教程> html5使用Audio标签打造音乐播放器的例子
分享文章到:

html5使用Audio标签打造音乐播放器的例子

发布时间:01/15 来源: 浏览: 关键词:
html5使用Audio标签打造音乐播放器不是什么难事了以前用flash实现现在直接使用html即可实现音乐播放器了,下面我们就一起来看看吧,希望例子能够对各位带来帮助。


这个是我们今天的重头戏,也是一切的根源,使用HTML5的audio标签去打造播放器,在用这个之前我们需要了解些audio标签的基本用法。

你可以这样:

<audio controls>
  <source src="horse.ogg" type="audio/ogg">
  <source src="horse.mp3" type="audio/mpeg">
您的浏览器不支持 audio 元素。
</audio>
也可以这样:

<audio src="xxx.mp3" controls></audio>
我们可以从上面的实例看出HTML5的audio标签用起来还是很简单的。而且audio标签还有诸多的属性可以使用例如loop,preload等。在后面的开发中我们主要使用的是HTML5的事件属性。

开始打造

首先我们来构造一个播放按钮

<audio id="audio" src="xxx.mp3"></audio>
<div id="play"></div>
然后我们利用audio标签的play和pause属性实现暂停和播放(本文基于jQuery)。

var audio = document.getElementById('audio'); //重要
$(function() {
    $("#play").on('click',function(){
        if(audio.paused) {
            audio.play();
        } else {
            audio.pause();
        }
    }) 
}
这样我们就实现了简单的播放暂停功能,我就不加样式了。

然后我们再来加一个播放进度。

创建一个div

<div id="progress"><span id="current">00</span><span id="duration">00</span></div>
然后编写JS改变内容

var progress = function() {
    var currentTime = audio.currentTime; //获取播放时间(秒为单位),如何转换为分钟我就不多说了,自己百度,或者去我演示地址拔。
    $("#current").html(currentTime);
}
var time = function() {
    var song = audio.duration; //获取歌曲时间
    $("#duration").html(song);
}
//添加监听
audio.addEventListener("loadedmetadata",time);
audio.addEventListener("timeupdate",progress);
然后改变音量进度啥的自己直接把值赋给对应的就可以了。

例如:

var volume = function(value) {
    audio.volume = value; //volume 属性设置或返回音频的音量,从 0.0 (静音) 到 1.0 (最大声)。
}
进度类似,可以百度一下,我就不写了。

AUDIO标签事件属性

歌词同步

创建歌词容器

<div id="lrc"></div>
Js代码

function getLyric(url) {
    //建立一个XMLHttpRequest请求
    var request = new XMLHttpRequest();
    //配置, url为歌词地址,比如:'./content/songs/foo.lrc'
    request.open('GET', url, true);
    //因为我们需要的歌词是纯文本形式的,所以设置返回类型为文本
    request.responseType = 'text';
    //一旦请求成功,但得到了想要的歌词了
    request.onload = function() {
        //这里获得歌词文件
        var lyric = request.response;
    };
    //向服务器发送请求
    request.send();
}
function parseLyric(text) {
    //将文本分隔成一行一行,存入数组
    var lines = text.split('\n'),
        //用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]
        pattern = /\[\d{2}:\d{2}.\d{2}\]/g,
        //保存最终结果的数组
        result = [];
    //去掉不含时间的行
    while (!pattern.test(lines[0])) {
        lines = lines.slice(1);
    };
    //上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉
    lines[lines.length - 1].length === 0 && lines.pop();
    lines.forEach(function(v /*数组元素值*/ , i /*元素索引*/ , a /*数组本身*/ ) {
        //提取出时间[xx:xx.xx]
        var time = v.match(pattern),
            //提取歌词
            value = v.replace(pattern, '');
        //因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔
        time.forEach(function(v1, i1, a1) {
            //去掉时间里的中括号得到xx:xx.xx
            var t = v1.slice(1, -1).split(':');
            //将结果压入最终数组
            result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);
        });
    });
    //最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词
    result.sort(function(a, b) {
        return a[0] - b[0];
    });
    return result;
}
//显示歌词的元素
var lrc = $("#lrc");
//监听ontimeupdate事件
    audio.addEventListener("timeupdate",function() {
    //遍历所有歌词,看哪句歌词的时间与当然时间吻合
    for (var i = 0, l = lyric.length; i < l; i++) {
        if (audio.currentTime /*当前播放的时间*/ > lyric[i][0]) {
            lrc.html(lyric[i][3]);
        };
    };
};

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有5人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板