• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com专业计算机教程网站
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure
您的位置:首页 > 网页设计 >html5 > HTML5使用Audio标签实现歌词同步的效果 _html5教程技巧

HTML5使用Audio标签实现歌词同步的效果 _html5教程技巧

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-03

本文主要包含html5,audio,歌词同步,audio标签,html5,audio标签等相关知识,匿名希望在学习及工作中可以帮助到您
HTML5的最强大之处莫过于对媒体文件的处理,如利用一个简单的vedio标签就可以实现视频播放。类似地,在HTML5中也有对应的处理音频文件的标签,那就是audio标签
HTML5出来这么久了,但是关于它里面的audio标签也就用过那么一次,当然还仅仅只是把这个标签插入到了页面中。这次呢就刚好趁着帮朋友做几个页面,拿这个audio标签来练练手。
首先你需要向页面中插入一个audio标签,注意这里最好不要设置loop='loop',这个属性使用来设置循环播放的,因为到后面需要使用ended属性的时候,如果loop被设置为loop的话,ended属性将一直是false。
autoplay='autoplay'设置页面加载后自动播放音乐,preload和autoplay属性的作用是一样的,如果标签中出现了autoplay属性,那么preload属性将被忽略。
controls='controls'设置显示音乐的控制条。
  1. <audio src="music/Yesterday Once More.mp3" id="aud" autoplay="autoplay" controls="controls" preload="auto">
  2. 您的浏览器不支持audio属性,请更换浏览器在进行浏览。
  3. audio>

有了这个标签之后,那么恭喜你,你的页面已经可以播放音乐了。但是这样会不会显得页面太过于单调了,于是我又给页面添加了一些东西,让歌词能够同步的显示在页面上,还能够选择要播放的音乐。那么先要做成这样的效果,我们就得要去下载一些lrc格式的歌词文件,然后你需要把这些音乐格式化一番。因为刚开始的音乐文件是这样的


我们需要把每一句歌词插入到一个二位数组里面,经过格式化之后歌词就变成这样的格式了
这里附上格式化歌词的代码

  1. //歌词同步部分
  2. function parseLyric(text) {
  3. //将文本分隔成一行一行,存入数组
  4. var lines = text.split('\n'),
  5. //用于匹配时间的正则表达式,匹配的结果类似[xx:xx.xx]
  6. pattern = /\[\d{2}:\d{2}.\d{2}\]/g,
  7. //保存最终结果的数组
  8. result = [];
  9. //去掉不含时间的行
  10. while (!pattern.test(lines[0])) {
  11. lineslines = lines.slice(1);
  12. };
  13. //上面用'\n'生成生成数组时,结果中最后一个为空元素,这里将去掉
  14. lines[lines.length - 1].length === 0 && lines.pop();
  15. lines.forEach(function(v /*数组元素值*/ , i /*元素索引*/ , a /*数组本身*/ ) {
  16. //提取出时间[xx:xx.xx]
  17. var time = v.match(pattern),
  18. //提取歌词
  19. vvalue = v.replace(pattern, '');
  20. //因为一行里面可能有多个时间,所以time有可能是[xx:xx.xx][xx:xx.xx][xx:xx.xx]的形式,需要进一步分隔
  21. time.forEach(function(v1, i1, a1) {
  22. //去掉时间里的中括号得到xx:xx.xx
  23. var t = v1.slice(1, -1).split(':');
  24. //将结果压入最终数组
  25. result.push([parseInt(t[0], 10) * 60 + parseFloat(t[1]), value]);
  26. });
  27. });
  28. //最后将结果数组中的元素按时间大小排序,以便保存之后正常显示歌词
  29. result.sort(function(a, b) {
  30. return a[0] - b[0];
  31. });
  32. return result;
  33. }

到了这里我们就能够很容易的使用每首音乐的歌词了,我们需要有一个function来获得歌词,并且让他同步的显示在页面上,能够正常的切换音乐。下面附上代码。

  1. function fn(sgname){
  2. $.get('music/'+sgname+'.lrc',function(data){
  3. var str=parseLyric(data);
  4. for(var i=0,li;i<str.length;i++){
  5. li=$('<li>'+str[i][1]+'li>');
  6. $('#gc ul').append(li);
  7. }
  8. $('#aud')[0].ontimeupdate=function(){//视屏 音频当前的播放位置发生改变时触发
  9. for (var i = 0, l = str.length; i < l; i++) {
  10. if (this.currentTime /*当前播放的时间*/ > str[i][0]) {
  11. //显示到页面
  12. $('#gc ul').css('top',-i*40+200+'px'); //让歌词向上移动
  13. $('#gc ul li').css('color','#fff');
  14. $('#gc ul li:nth-child('+(i+1)+')').css('color','red'); //高亮显示当前播放的哪一句歌词
  15. }
  16. }
  17. if(this.ended){ //判断当前播放的音乐是否播放完毕
  18. var songslen=$('.songs_list li').length;
  19. for(var i= 0,val;i<songslen;i++){
  20. val=$('.songs_list li:nth-child('+(i+1)+')').text();
  21. if(val==sgname

您可能想查找下面的文章:

  • HTML5知识点总结
  • HTML5的本地存储
  • HTML5本地存储之IndexedDB
  • Html5实现文件异步上传功能
  • Html5新标签datalist实现输入框与后台数据库数据的动态匹配
  • 详解HTML5 window.postMessage与跨域
  • HTML5拖放API实现拖放排序的实例代码
  • 解决html5中video标签无法播放mp4问题的办法
  • HTML5新特性 多线程(Worker SharedWorker)
  • Html5新增标签有哪些

相关文章

  • 2018-12-03使用ASP.NET MVC构建HTML5离线web应用程序
  • 2018-12-03HTML5本地数据库基础操作详解_html5教程技巧
  • 2017-08-06HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)
  • 2018-12-03web前端菜鸟,好迷茫?
  • 2018-12-03一款带有发光动画的HTML5表单
  • 2018-12-03求HTML发音怎么读最专业!在线等…?
  • 2017-08-06浅谈html5 响应式布局
  • 2017-08-06详解HTML5中的<aside>元素与<article>元素
  • 2018-12-03canvas如何实现二维码和图片合成的代码
  • 2018-12-03H5做视频直播

文章分类

  • html/xhtml
  • html5
  • CSS
  • XML/XSLT
  • Dreamweaver教程
  • Frontpage教程
  • 心得技巧
  • bootstrap
  • vue
  • AngularJS
  • HBuilder教程
  • css3
  • 浏览器兼容
  • div/css
  • 网页编辑器
  • axure

最近更新的内容

    • 详解HTML5网络拓扑图整合OpenLayers实现GIS地图应用(图)
    • HTML5 Canvas动画设计解析
    • 《css权威指南》与《html5与css3权威指南》那个更权威更先进?
    • 零基础开发RPG游戏开源讲座(四)-游戏脚本化&地图跳转
    • HTML5利用约束验证API来检查表单的输入数据的代码实例
    • 如何评价html5规范正式定稿对互联网以及电子商务的影响?
    • 使用HTML5给按钮背景设计不同的动画的简单示例(图文)
    • html5实现把上传的图片转成base64编码在显示(代码实例)
    • css动画制作——CSS animate
    • HTML5 3D书本翻页动画的图文代码实例

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有