准备毕业了,感觉好多东西都没学会,太多太多想学的知识,有种求知若渴的状态。

四年的大学就剩下一个多月了,无论将来多么困难,这条路是自己选的,走就要走的精彩!

自学了一点javascript、php,做了一个web app,我将其取名为Youlike随心听,就如我的信念一样,自己的人生自己掌控,做自己喜欢的事情,自由的生活!

使用javascript实现音乐播放操作,实现歌词解析,并动态放映歌词效果。

  1 $(function(){
  2     //初始化测试
  3     //alert();
  4     //开启歌词动态监听
  5     scrollBar();
  6     //播放结束后监听
  7     Player().addEventListener('ended', function () {
  8         //alert('over');
  9         nextMusic();
 10     });
 11     $("#play").bind("click", function() {
 12         // current_lyric = data.next_mid;
 13         if(Player().paused){
 14
 15             //修改按钮图标
 16             //$("#play").attr("src","../images/on_play_but.png");
 17             $("#play").removeClass("play");
 18             $("#play").addClass("onplay");
 19
 20             if(Player().src == ""){
 21                 //获取歌曲文本信息
 22                 playMusic();
 23             }else{
 24                 Player().play();
 25             }
 26             //playMusic();
 27             //Player()
 28         }else{
 29
 30             $("#play").removeClass("onplay");
 31             $("#play").addClass("play");
 32             Player().pause();
 33         }
 34     });
 35
 36     $("#next").bind("click",function(){
 37         nextMusic();
 38     });
 39     $("#back").bind("click",function(){
 40         //nextMusic();
 41         if(play_history_position == 0){
 42             return ;
 43         }
 44     });
 45
 46
 47     $("#play").removeClass("play");
 48     $("#play").addClass("onplay");
 49     playMusic();
 50     //非播放器脚本///
 51     $(".nav ul li").bind("click",function(){
 52         location.href=$(this).find("a").attr("href");
 53     });
 54
 55 });
 56 //var 全局
 57 var played = 0;
 58 var play_history_list = [];
 59 var play_history_position = 0;
 60
 61
 62
 63
 64
 65 //获取播放器audio对象
 66 function Player(){
 67     var player = document.getElementById("MyPlayer");
 68     return player;
 69 }
 70 /**************************** 音乐播放控制 start ****************************/
 71 function nextMusic(){
 72
 73     $.post(root_url + "/index.php/Home/Index/find_music",{channel:current_play_music_channel},function(data){
 74         //更改当前曲目标识符
 75         //alert("");
 76         current_play_music_mid = data.mid;
 77         //加载歌词前进行清空
 78         lyric_time = [];
 79         lyric_text = [];
 80         lyric_flag = 0;
 81         loadLyric();
 82         //设置曲目信息
 83         $("#channel_name").html(current_play_music_channel);
 84         //专辑
 85         //$("#album_image").attr("src",""+ root_url+"/download.php?type=image&mid="+data.mid +"");
 86         var album_canvas = document.getElementById("album_canvas");
 87         var context = album_canvas.getContext("2d");
 88         var image = new Image();
 89         image.src = ""+ root_url+"/download.php?type=image&mid="+data.mid +"";
 90         //image.src = public_url+"/images/205798.jpg";
 91         image.onload = function(){
 92             context.drawImage(image,0,0,300,150);
 93         }
 94
 95         //曲目名称
 96         $("#music_name").html("《"+data.real_name+"》");
 97         //演唱者
 98         $("#music_singer").html(data.singer);
 99         Player().src = root_url+"/download.php?type=music&mid="+data.mid;
100         //播放状态
101         Player().play();
102         //alert(data);
103     },"json");
104 }
105 function playMusic(){
106     //alert(current_play_music_channel);
107     if(current_play_music_channel == null || current_play_music_channel == ""){
108         current_play_music_channel = "随便听听";
109     }
110     if(played == 0){
111         mPlay();
112         played = 1;
113     }
114     if (Player().src == "") {
115         $.post(root_url + "/index.php/Home/Index/find_music",{channel:current_play_music_channel},function(data){
116             //更改当前曲目标识符
117             //alert("");
118             current_play_music_mid = data.mid;
119             //加载歌词前进行清空
120             lyric_time = [];
121             lyric_text = [];
122             lyric_flag = 0;
123             loadLyric();
124             //设置曲目信息
125             $("#channel_name").html(current_play_music_channel);
126             //专辑
127             //$("#album_image").attr("src",""+ root_url+"/download.php?type=image&mid="+data.mid +"");
128             var album_canvas = document.getElementById("album_canvas");
129             var context = album_canvas.getContext("2d");
130             var image = new Image();
131             //image.src = ""+ root_url+"/download.php?type=image&mid="+data.mid +"";
132             image.src = public_url+"/images/205798.jpg";
133             //context.drawImage(image,0,0);
134             image.onload = function(){
135                 context.drawImage(image,0,0,300,150);
136             }
137             //曲目名称
138             $("#music_name").html("《"+data.real_name+"》");
139             //演唱者
140             $("#music_singer").html(data.singer);
141             Player().src = root_url+"/download.php?type=music&mid="+data.mid;
142             //播放状态
143             Player().addEventListener("canplay", function(){
144                 Player().play();
145             });
146             /*Player().play();*/
147             //alert(data);
148         },"json");
149
150     }else{
151         Player().pause();
152     }
153 }
154
155 /**************************** 音乐播放控制 end ****************************/
156
157 /**************************** 歌词动态效果实现 start *****************************/
158 //歌词播放进度标识
159 var scrollh = 0;
160
161 //每行的高度20px;
162 function display_lyric(time){
163
164     //清空容器
165     /*if(){
166
167     }*/
168     $("#lyric_div").html("");
169     //歌词有两种状态
170     //1.播放过程中,歌词不在最后一行
171     //2.播放过程中,歌词到最后一行
172     if(time < lyric_time[lyric_time.length-1]){
173         for(var k=0 ; k<lyric_text.length ; k++){
174             if(lyric_time[k] <= time && time < lyric_time[k+1]){
175                 scrollh = k*22;
176                 $("#lyric_div").html($("#lyric_div").html() + "<font style='color:#eae211;font-size:22px;'>" + lyric_text[k] + "<font><br/>");
177             }else{
178                 $("#lyric_div").html($("#lyric_div").html() + lyric_text[k] + "<br/>");
179             }
180         }
181     }else{
182         for(var j=0 ; j<lyric_text.length-1 ; j++)
183             $("#lyric_div").html($("#lyric_div").html() + lyric_text[j] + "<br/>");
184         $("#lyric_div").html($("#lyric_div").html() + "<font style='color:red;'>" + lyric_text[lyric_text.length-1] + "<font><br/>");
185     }
186
187
188 }
189 //根据歌词进度,,动态自动滚动行号
190 function scrollBar()//设置滚动条的滚动
191 {
192     //判断进度
193     if(document.getElementById("lyric_div").scrollTop<=scrollh-50)
194         //调整行号
195         document.getElementById("lyric_div").scrollTop+=1;
196     if(document.getElementById("lyric_div").scrollTop>=scrollh+50)
197         document.getElementById("lyric_div").scrollTop-=1;
198     //调整跨度
199     window.setTimeout("scrollBar()",50);
200 }
201
202 function mPlay()//开始播放
203 {
204     var ms_100 = parseInt(getSeconds());
205     if (isNaN(ms_100))
206         display_lyric(0);
207     else
208         display_lyric(ms_100);
209     window.setTimeout("mPlay()", 100)
210 }
211 function getSeconds()//得到当前播放器播放位置的时间
212 {
213     var t = Player().currentTime;
214     var s = parseFloat(t) * 100.0;
215     return parseInt(s);
216 }
217 /**************************** 歌词动态效果实现 end *****************************/
218
219
220 /***************************歌词解析   start  ***************************/
221 var lyric_time = [];    //保存歌词的时间整数 100ms级;
222 var lyric_text = [];    //保存对应上述时间的歌词文本信息;
223 var lyric_flag = 0;  //歌词保存位置标识
224
225 //ajax访问获取歌词
226 //url :
227 //参数  : mid
228 //响应函数 :
229 function loadLyric(){
230     $.post(root_url+"/download.php",{type:"lyric",mid:current_play_music_mid},function(data){
231         //alert(data);
232         parseLyric(data);
233     },"text");
234     /*alert($.ajax({
235          url: "__ROOT__/download.php",
236          async: false
237     }).responseText);*/
238 }
239
240 //歌词分解
241 function parseLyric(lyric_string){
242     //alert(lyric_string);
243     //按行进行划分
244     var row_string = lyric_string.split("\n");
245
246     //正则表达式
247     var regular_context_start = /^.\d.+/;
248
249     //歌词内容开始下标
250     var lyric_context_index = 0;
251
252     //遍历寻找歌词内容开始部分
253     for(var i=0 ; i<row_string.length ; i++){
254         if(regular_context_start.test(row_string[i])){  //匹配成功
255             lyric_context_index = i;
256             break;
257         }
258     }
259     //alert("0");
260     //歌词数据转换并存入数组
261     for(var k=lyric_context_index ; k<row_string.length ; k++){
262         textFormat(row_string[k]);
263     }
264     //alert("1");
265     //歌词内容数组排序
266     sortLyricArray();
267     //alert("2");
268     //将歌词渲染到容器内
269     var lyric_list_string = "";
270     for(var n=0 ; n<lyric_flag; n++){
271         lyric_list_string = lyric_list_string + lyric_text[n] + "<br/>";
272     }
273     $("#lyric_div").html(lyric_list_string);
274 }
275
276 //歌词数据转换类
277 //[00:12.64]我有必要相信地球也能是个可爱迪士尼
278 //1.判断时间标识符个数N
279 //2.时间转换 [00:12.64] => 1264
280 //3.歌词内容部分写入
281 function textFormat(text){
282     //0 验证
283     if(text == null || text == ""){
284         return ;
285     }
286     //1
287     var char_number = 0;
288     for(var i=0 ; i<text.length ;i++){
289         if(text.charAt(i) == '['){  //统计
290             char_number++;
291         }
292     }
293     if(char_number == 0){ //检测
294         return ;
295     }
296     //alert(char_number);
297     for(var k=0 ; k<char_number ; k++){
298
299         var lyric_tmp_time= parseTime(text.substring(k*10+1,k*10+9));
300
301         lyric_text[lyric_flag] = text.substring((char_number)*10);
302         lyric_time[lyric_flag] = lyric_tmp_time;
303         lyric_flag++;
304     }
305 }
306
307
308 //时间格式化 01:12.45 => 1*60*100+12*100+45;
309 function parseTime(time_string){
310     var m = time_string.substring(0,time_string.indexOf(":"));
311     var s = time_string.substring(time_string.indexOf(":") + 1);
312     var total_time = parseInt(parseInt(m) * 60 *100 + parseFloat(s) * 100.0);
313     //检测
314     if(isNaN(total_time)){
315         total_time = 0;
316     }
317     return total_time;
318 }
319
320
321 //数组排序(根据时间)
322 function sortLyricArray(){
323     //选择排序 lyric_time[]
324     for(var i=0 ; i<lyric_time.length-1 ; i++){
325         var min = i;
326         for(var j=i ; j<lyric_time.length ; j++){
327             if(lyric_time[min] > lyric_time[j]){
328                 min = j;
329             }
330         }
331         //数据交换
332         var tmp_time = lyric_time[i];
333         var tmp_text = lyric_text[i];
334         lyric_time[i] = lyric_time[min];
335         lyric_time[min] = tmp_time;
336         lyric_text[i] = lyric_text[i];
337         lyric_text[min] = tmp_text;
338     }
339 }
340 /***************************歌词解析   end ***************************/

转载于:https://www.cnblogs.com/helingfeng/p/4460662.html

HTML5 javascript实现音乐播放器相关推荐

  1. html实现音乐界面设计,基于HTML5技术的音乐播放器的设计与实现.doc

    基于HTML5技术的音乐播放器的设计与实现 基于HTML5技术的音乐播放器的设计与实现 常志强 刘正余 杨劲楠 皖西学院电子与信息工程学院 X 关注成功! 加关注后您将方便地在 我的关注中得到本文献的 ...

  2. web html5音乐播放器设计与实现,基于HTML5技术的音乐播放器的设计与实现

    Vol.33No.11Nov.2017 赤峰学院学报(自然科学版) Journal of Chifeng University (Natural Science Edition )第33卷第11期(下 ...

  3. JavaScript(JS) 音乐播放器

    代码块中有注释 可以阅读一下 图片和音乐路径不同所以需要自己找一个合适的 播放模式支持:列表播放(默认).循环播放.随机播放 能控制音量大小.上一曲.下一曲.暂停.播放.播放节奏状态.查看播放列表.删 ...

  4. 基于html的音乐播放设计,基于HTML5技术的音乐播放器的设计与实现

    Vol.33No.11 Nov.2017 赤峰学院学报(自然科学版) JournalofChifengUniversity(NaturalScienceEdition) 第 33 卷第11 期(下) ...

  5. html音乐播放器论文,基于HTML5技术的音乐播放器的设计与实现.docx

    基于HTML5技术的音乐播放器的设计与 实现 常志强刘正余杨劲楠 皖西学院电子与信息工程学院 摘要: 本文采用IITML5技术,设计了一款音乐播放器,可以实现在线播放音乐,也可 以加载终端里存储的音乐 ...

  6. html5在线音乐列表播放器,简洁的html5 mp3列表音乐播放器代码

    特效描述:简洁的html5 mp3列表 音乐播放器代码.html5网页音乐播放器,mp3播放器,简洁音乐播放器 代码结构 1. 引入CSS 2. 引入JS 3. HTML代码 标题歌手 00:00/0 ...

  7. discuz自动添加兼容html5标签的音乐播放器

    关于在discuz中mp3附件自动添加Windows Media播放器插件的方法的文章网上有很多,只要修改./templates/default/discuzcode.htm文件就可以了,但是毕竟不是 ...

  8. HTML5移动端音乐播放器(启蒙篇)

    这段时间公司一直在做一个PC的教育类单页应用,庞大复杂,涉及非常多H5的知识,音频就是其中的一部分.前些天偷台风的闲暇时写了一个移动端音乐播放器,作为练手项目. 在线地址:请猛击这里 源码:请猛击这里 ...

  9. 10款Flash和Javascript网页音乐播放器

    关联:9 Fresh jQuery Media Players 10款音乐播放器, 有基于javascript的网页 音乐播放器,也有基于Flash的音乐播放器.赶快挑一款,分享你喜爱的音乐吧! 1. ...

最新文章

  1. linux 压缩 解压 命令大全
  2. js如何使浏览器允许脚本异步加载
  3. decimal函数python_decimal数据类型
  4. OpenCV+yolov3实现目标检测(C++,Python)
  5. 《思科数据中心I/O整合》一2.11 活动-活动连接(Active-Active)
  6. 微软职位内部推荐-Senior Software Engineer_HPC
  7. 通过正则格式化url查询字符串
  8. 2018年python工作好找吗-2018年排名前20的数据科学Python库
  9. Python代码Linux
  10. oracle磁盘满了怎么办,ORACLE磁盘空间占满解决
  11. excel 文件过大 瘦身
  12. Devise Gem简介
  13. DELL 笔记本 - Windows 10 恢复 / 重置此电脑
  14. Device disconnected
  15. 重生之我是赏金猎人-SRC漏洞挖掘(十三)-攻防对抗/梦中绝杀X脖代理商
  16. 耳机——AKG K450 及 Beats Solo2 对比
  17. Struts2注解配置之@Action(二)
  18. SASS的概念和使用
  19. 正版授权|Charles 4 网络封包分析调试工具软件
  20. 软件测试之黑盒测试用例的四种设计方法

热门文章

  1. Spike探针-敏捷
  2. 银行的存款利率是怎么计算的?
  3. 数据库学习之MySQL (十七)—— SQL99 主查询 与 子查询 子查询分类之WHERE的子查询
  4. 外贸邮箱到底用哪个好,什么样企业邮箱更适合做外贸?
  5. 12小时制(AM PM)字符串转换为24时制
  6. 2018年最全Go语言实战抽奖系统教程
  7. JavaWeb新闻项目(查询阅读主题维护)
  8. 月入5万的程序员,日子过得就像月薪5000
  9. 深度学习入门论文(必看)
  10. JavaScript——顶部状态栏背景色