歌词联动

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <% String path = request.getContextPath(); %>
  3. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  4. <html xmlns="http://www.w3.org/1999/xhtml">
  5. <head>
  6. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  7. <title>jplayer实现滚动歌词 </title>
  8. <link href="<%=path%>/Jplayer/skin/blue.monday/jplayer.blue.monday.css" rel="stylesheet" type="text/css" />
  9. <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6/jquery.min.js"></script>
  10. <script type="text/javascript" src="<%=path%>/Jplayer/js/jquery.jplayer.min.js"></script>
  11. <script type="text/javascript">
  12. var playTime;
  13. window.lrc_obj = null;
  14. $(document).ready(function() {
  15. $("#jquery_jplayer_1").jPlayer({
  16. ready: function () {
  17. var lrc="[ar:姜玉阳][ti:痛彻心扉][00:02.43]痛彻心扉[00:07.67]制作 曾经拥有[00:13.81]希望你快乐 QQ511277376[00:28.03]怎么能够让我不再想你[00:36.00]也许爱你爱到最后只能伤心[00:42.76]已经有了离开你的勇气[00:48.44]在我的梦里你不是唯一[00:55.50]我想要再回到你温暖的怀里[01:02.31]感觉你的心跳你的呼吸[01:08.96]想到天长地久对于我们[01:13.38]渴望而不可及[01:15.92]难道命运注定就此分离[01:26.28]爱你 痛彻我心扉[01:32.27]给了你 仅有的一片天[01:38.47]回忆的碎片[01:40.85]撞翻我心中思念的火蕊[01:45.83]燃烧我整座的堡垒[01:51.42]爱你 痛彻我心扉[01:58.88]少了你 还残留一片天[02:05.13]我想我只会[02:07.57]紧握住手中凋零的玫瑰[02:12.64]品尝你赐给的泪水[02:18.89]或许你曾为我流泪[02:25.44]如今你让我痛彻心扉[02:48.09]我想要再回到你温暖的怀里[03:05.66]感觉你的心跳你的呼吸[03:12.21]想到天长地久对于我们[03:16.83]渴望而不可及[03:19.27]难道命运注定就此分离[03:29.38]爱你 痛彻我心扉[03:35.62]给了你 仅有的一片天[03:41.82]回忆的碎片[03:44.26]撞翻我心中思念的火蕊[03:49.29]燃烧我整座的堡垒[03:56.45]爱你 痛彻我心扉[04:02.19]少了你 还残留一片天[04:08.43]我想我只会[04:10.87]紧握住手中凋零的玫瑰[04:15.90]品尝你赐给的泪水[04:22.20]或许你曾为我流泪[04:28.90]如今你让我痛彻心扉[04:35.55]如今你让我痛彻心扉";
  18. change_lrc(lrc);
  19. $(this).jPlayer("setMedia", {
  20. mp3: '<%=path%>/Jplayer/mp3/2.mp3'
  21. }).jPlayer("play");
  22. },
  23. timeupdate : function (obj){
  24. show_lrc(obj.jPlayer.status.currentTime);
  25. playTime = obj.jPlayer.status.currentTime;
  26. },
  27. ended: function (event) {
  28. $(this).jPlayer("play");
  29. },
  30. swfPath: "<%=path%>/Jplayer/js",
  31. supplied: "mp3,oga",
  32. wmode: "window"
  33. });
  34. });
  35. //把歌词转换成时间和歌词内容的一个数组
  36. function change_lrc (data)
  37. {
  38. //alert(data);
  39. window.lrc_item = -1;//重置歌词下标
  40. $('#lrc_panel').html('歌词解析中...');
  41. var lrc = [{time:0, lrc:''}];
  42. var match = data.match(/\[ *ti *\:([^\[\]]+)\]/i);
  43. if (match) lrc[0].lrc += '歌名:' + match[1] + "<br/>";//歌名
  44. var match = data.match(/\[ *ar *\:([^\[\]]+)\]/i);
  45. if (match) lrc[0].lrc += '词:' + match[1] + "<br/>";//作词
  46. var match = data.match(/\[ *cm *\:([^\[\]]+)\]/i);
  47. if (match) lrc[0].lrc += '曲:' + match[1] + "<br/>";//作曲
  48. var match = data.match(/\[ *al *\:([^\[\]]+)\]/i);
  49. if (match) lrc[0].lrc += '  专辑:' + match[1] + "<br/>";//专辑
  50. var match = data.match(/\[ *sr *\:([^\[\]]+)\]/i);
  51. if (match) lrc[0].lrc += '  歌手:' + match[1] + "<br/>";//歌手
  52. var offset = 0;
  53. var match = data.match(/\[ *offset *\:(\d+)\]/i);
  54. if (match) offset = match[1] / 1000;//时间调整
  55. var match = data.match(/(\[ *[\d\:\.]+ *\][^\[\]]+)/g);
  56. if (match){
  57. for (var i = 0; i < match.length; i++){
  58. //alert(match[i]);
  59. var temp = match[i].split(']');
  60. var temp_lrc = temp[1];
  61. temp = temp[0].replace('[', '');
  62. temp = temp.split(':');
  63. var time = 0;
  64. time += temp[temp.length - 1] * 1;//秒
  65. if (temp.length > 1) time += temp[temp.length - 2] * 60;///分
  66. if (temp.length > 2) time += temp[temp.length - 3] * 3600;///时
  67. if (time != 0) time += offset;//只有非0歌词才有必要加调整;
  68. //alert(time + ':' + temp_lrc);
  69. if (lrc[lrc.length -1].time == time) lrc[lrc.length -1].lrc += '  ' + temp_lrc + "<br/>";//相同时间合并
  70. else lrc[lrc.length] = {time:time, lrc:temp_lrc + "<br/>"};//按获取顺序记录,如果lrc是乱序将导致后面显示错误
  71. }
  72. }
  73. window.lrc_obj = lrc;//处理好再复制
  74. //alert(lrc[57].lrc);
  75. show_lrc (0);//显示歌曲信息
  76. }
  77. /*
  78. * 显示歌词,并得到正在播放歌词的下标,
  79. * param:sec 歌词对应的秒.
  80. */
  81. function show_lrc (sec){
  82. if (!window.lrc_obj) return 0;
  83. if ( window.lrc_obj[window.lrc_obj.length-1].time < sec ){
  84. if (window.lrc_item < window.lrc_obj.length){
  85. window.lrc_item = window.lrc_obj.length;
  86. center_lrc(window.lrc_obj.length - 1);//显示尾句
  87. }
  88. return 0;//显示到最后一句
  89. }else if (window.lrc_item < 0){//初始化,且需要刷新歌词
  90. window.lrc_item = 1;
  91. center_lrc(0);//显示第一句
  92. if (sec < window.lrc_obj[window.lrc_item].time) return 0;//处于第二句前
  93. }
  94. if ( (window.lrc_obj[window.lrc_item - 1].time <= sec) && (sec < window.lrc_obj[window.lrc_item].time) ){
  95. return 0;//当前时间处于当前显示句之后,后一句之前,无需要刷新歌词
  96. }
  97. if (window.lrc_obj[window.lrc_item].time < sec){//歌词过时了,自动播放或拉进度到后面
  98. do
  99. {
  100. window.lrc_item++;
  101. }while ( (window.lrc_item <= window.lrc_obj.length) && (window.lrc_obj[window.lrc_item].time < sec) )
  102. center_lrc(window.lrc_item - 1);//显示后面对应一句
  103. return 0;
  104. }else{//歌词过快,如拉前了
  105. do
  106. {
  107. window.lrc_item--;
  108. }while ( (0 <= window.lrc_item) && (sec < window.lrc_obj[window.lrc_item].time) )
  109. window.lrc_item++;
  110. center_lrc(window.lrc_item - 1);//显示前面对应一句
  111. return 0;
  112. }
  113. }
  114. /*
  115. * 得到正在播放的歌词
  116. * index 是数组的下标值.
  117. */
  118. function center_lrc(index)
  119. {
  120. if (! window.lrc_obj || (index >= window.lrc_obj.length ) || (index < 0) ) return 0;
  121. var padding = 10;//居中头尾个数
  122. var lrc_html = '';
  123. for(var m = 0; m <= window.lrc_obj.length - 1; m++) {
  124. if(index != m) {
  125. if(window.lrc_obj[m].lrc == '') {
  126. lrc_html += '<li style= "list-style-type:none;">........</li>';
  127. } else {
  128. lrc_html += '<li style= "list-style-type:none;">' + window.lrc_obj[m].lrc + '</li>';
  129. }
  130. } else if(index == m) {
  131. if(window.lrc_obj[m].lrc == '') {
  132. lrc_html += '<li id="crly" style= "list-style-type:none;"><font color="blue">........</font></li>';
  133. } else {
  134. lrc_html += '<li id="crly" style= "list-style-type:none;"><font color="purple">' + window.lrc_obj[m].lrc + '</font></li>';
  135. }
  136. }
  137. }
  138. //var lp = document.getElementById('lyrics');
  139. //lp.scrollTop=lp.scrollHeight;
  140. //alert(lrc_html);
  141. $('#lrc_panel').get(0).innerHTML = lrc_html;
  142. var lp = document.getElementById("lyrics");
  143. var lh = $("#crly").position().top;
  144. lp.scrollTop+=parseInt(lh) - 80;
  145. }
  146. </script>
  147. <style>
  148. <!--
  149. .lyrics{
  150. font-size: 13px;
  151. color:#f7b607
  152. }
  153. -->
  154. </style>
  155. </head>
  156. <body>
  157. <div style="float: left">
  158. <div id="jquery_jplayer_1" class="jp-jplayer"></div>
  159. <div id="jp_container_1" class="jp-audio">
  160. <div class="jp-type-single">
  161. <div class="jp-gui jp-interface">
  162. <ul class="jp-controls">
  163. <li><a href="javascript:;" class="jp-play" tabindex="1">play</a></li>
  164. <li><a href="javascript:;" class="jp-pause" tabindex="1">pause</a></li>
  165. <li><a href="javascript:;" class="jp-stop" tabindex="1">stop</a></li>
  166. <li><a href="javascript:;" class="jp-mute" tabindex="1" title="mute">mute</a></li>
  167. <li><a href="javascript:;" class="jp-unmute" tabindex="1" title="unmute">unmute</a></li>
  168. <li><a href="javascript:;" class="jp-volume-max" tabindex="1" title="max volume">max volume</a></li>
  169. </ul>
  170. <div class="jp-progress">
  171. <div class="jp-seek-bar">
  172. <div class="jp-play-bar"></div>
  173. </div>
  174. </div>
  175. <div class="jp-volume-bar">
  176. <div class="jp-volume-bar-value"></div>
  177. </div>
  178. <div class="jp-time-holder">
  179. <div class="jp-current-time"></div>
  180. <div class="jp-duration"></div>
  181. <ul class="jp-toggles">
  182. <li><a href="javascript:;" class="jp-repeat" tabindex="1" title="repeat">repeat</a></li>
  183. <li><a href="javascript:;" class="jp-repeat-off" tabindex="1" title="repeat off">repeat off</a></li>
  184. </ul>
  185. </div>
  186. </div>
  187. <div class="jp-title">
  188. <ul>
  189. <li>痛彻心扉</li>
  190. </ul>
  191. </div>
  192. <div class="jp-no-solution">
  193. <span>Update Required</span>
  194. To play the media you will need to either update your browser to a recent version or update your <a href="http://get.adobe.com/flashplayer/" target="_blank">Flash plugin</a>.
  195. </div>
  196. </div>
  197. </div>
  198. </div>
  199. <div class="lyrics" id="lyrics" style="overflow: scroll; width: 255px; height: 275px; float:right">
  200. <strong></strong>
  201. <ul id="lrc_panel" ></ul>
  202. </div>
  203. </body>
  204. </html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值