From 16330ca044818afca10e127e65b77df424449161 Mon Sep 17 00:00:00 2001 From: DIYgod Date: Mon, 4 Apr 2016 02:06:11 +0800 Subject: [PATCH] lrc in js --- .gitignore | 3 +- README.md | 42 +++- demo/index.html | 530 ++++++++++------------------------------ dist/APlayer.min.js | 2 +- dist/APlayer.min.js.map | 2 +- package.json | 2 +- src/APlayer.js | 50 ++-- 7 files changed, 191 insertions(+), 440 deletions(-) diff --git a/.gitignore b/.gitignore index 2d2b47d..78d882a 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ .idea -node_modules \ No newline at end of file +node_modules +demo2 \ No newline at end of file diff --git a/README.md b/README.md index 86be780..f0be2cd 100644 --- a/README.md +++ b/README.md @@ -62,14 +62,15 @@ ap.init(); element: document.getElementById('player1'), // Optional, player element narrow: false, // Optional, narrow style autoplay: true, // Optional, autoplay song(s), not supported by mobile browsers - showlrc: false, // Optional, show lrc + showlrc: 0, // Optional, show lrc, can be 0, 1, 2, see: ###With lrc mutex: true, // Optional, pause other players when this player playing theme: '#e6d0b2', // Optional, theme color, default: #b7daff - music: { // Required, music info + music: { // Required, music info, see: ###With playlist title: 'Preparation', // Required, music title author: 'Hans Zimmer/Richard Harvey', // Required, music author url: 'http://7xifn9.com1.z0.glb.clouddn.com/Preparation.mp3', // Required, music url pic: 'http://7xifn9.com1.z0.glb.clouddn.com/Preparation.jpg' // Optional, music picture + lrc: '[00:00.00]lrc here' // Optional, lrc, see: ###With lrc } } ``` @@ -84,7 +85,9 @@ ap.init(); ```js var APlayer = require('APlayer'); -var ap = new APlayer({...}); +var ap = new APlayer({ + // ... +}); ``` ### With lrc @@ -100,11 +103,32 @@ Support multiple time tag, support three decimal second ... ``` -#### HTML: +#### LRC in JS: + +JS: + +```js +{ + showlrc: 1, + music: { + lrc: '[00:00.00]' // lrc here, separate lines with \n + } +} +``` + +#### LRC in HTML: + +JS: + +```js +{ + showlrc: 2 +} +``` + +HTML: ```HTML - -
         [ti:平凡之路]
@@ -132,14 +156,8 @@ Support multiple time tag, support three decimal second
         
     
- - ``` -#### JS: - -Option: `showlrc: true` - ### With playlist #### JS: diff --git a/demo/index.html b/demo/index.html index fd83edf..a234af0 100644 --- a/demo/index.html +++ b/demo/index.html @@ -46,418 +46,136 @@ - -
-

APlayer

-

Wow, such a beautiful html5 music player

-

Made by DIYgod. Available on GitHub. Licensed MIT.

-
-

Normal

-
-

With lyrics

-
-
-                [by:京兆万年]
-                [ti:回レ!雪月花 小紫ver.]
-                [ar:小倉唯]
-                [lr:ヒゲドライバー]
-                [co:ヒゲドライバー]
-                [ag:ヒゲドライバー]
-                [00:00.00]せ〜の いちにっさんはい!(预~备 一 二 三 嗨!)
-                [00:04.68]ほい! いよーーーーっ ぽん!(嘿 咿哟 嘭)
-                [00:07.66]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [00:11.12]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜~)
-                [00:13.36]さぁさぁさぁ(来 来 来)
-                [00:14.08]これよりご覧いただきますは(接下来诸位将欣赏到的是)
-                [00:15.65]カブキ者たちの栄枯盛衰(歌舞伎演员们的荣辱盛衰)
-                [00:17.14]時代常に日進月歩(时代总是在日新月异)
-                [00:18.24]聞いてってよ老若男女(且听我一一道来 男女老少)
-                [00:20.14]一見は勧善懲悪(乍一看是惩恶扬善)
-                [00:21.49]悪者どもを一刀両断(将坏人们一刀两断)
-                [00:22.85]「でもホンドにそれだけで楽しいの?」(“但是你真的会因此而觉得扬眉吐气吗?”)
-                [00:25.63]もうなんだって蒟蒻問答(无论问什么 都是牛头马嘴)
-                [00:27.58]ハッハッハッハッハッハッハィヤ(哈哈哈哈哈哈 咿呀)
-                [00:30.57]ハッハッハッハッ(哈哈哈哈)
-                [00:31.97]いよーーーーっ ぽん!(咿哟 嘭)
-                [00:33.61]どこからともなく現れて(自何处出现委实难料)
-                [00:34.96]すぐどこかへ行っちゃって神出鬼沒(眼又遁隐他处总是神出鬼没)
-                [00:36.35]チャンスを待ったら一日千秋(若是静候机会 便是一日千秋)
-                [00:38.03]追いかければ東奔西走(追上前去的话又要东奔西走)
-                [00:39.68]時代常に千変万化(时代总是千变万化)
-                [00:40.95]人の心は複雑怪奇(世人之心复杂怪奇)
-                [00:42.31]「でも本気でそんなこ言ってんの?」(“但是说着这些话的你岂不也是难免戏谑?”)
-                [00:45.02]もうどうにも満身創痍(也罢 无论怎样都将满身疮痍)
-                [00:46.98]嗚呼、巡り巡って夜の町(呜呼 绕来绕去相会在这夜色下的街)
-                [00:53.27]キミは合図出し踊りだす((由)你发出信号 (让)我们一同起舞转)
-                [00:58.12]はぁ~(哈呜~)
-                [00:58.88]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)
-                [01:02.12]華麗に花弁 散らすように(在散落的美丽花瓣中)
-                [01:04.97]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)
-                [01:08.13]髪も振り乱して(头发凌乱又怎样?)
-                [01:10.23]一昨日、昨日、今日と、明日と、明後日と(前日、昨日、今日、明日、后日)
-                [01:14.13]この宴は続く(这场宴会亦不息)
-                [01:16.31]踊レ、歌エ、一心不乱に回レ!(舞动吧 歌唱吧 一心不乱的旋转吧于)
-                [01:20.19]今宵は雪月花(今夜的雪月花)
-                [01:25.43]ほい! いよーーーーっ ぽん!(哈~!~哟ーーーー~嘣~!)
-                [01:29.14]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [01:32.16]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜)
-                [01:34.39]ねぇねぇねぇ(呐~呐~呐~)
-                [01:35.12]この世に平安訪れるの?(平安已经访问此世了吗?)
-                [01:36.50]のべつ幕無し丁丁発止(不会闭幕的丁当争斗)
-                [01:38.09]兵ども千客万来(官兵们接踵而来)
-                [01:39.50]ひしめき合群雄割拠(相互吵吵嚷嚷群雄割据)
-                [01:41.00]伸るか反るか一攫千金(成败在于敢否一举千金)
-                [01:42.47]気が付いたら絶体絶命(回过头来却已穷途末路)
-                [01:43.50]「でも本音のとこ、どうなってんの?」(「不过真心的所在、到底是什么样呢?」)
-                [01:46.62]もうまったく奇想天外(真是的总这么异想天开)
-                [01:48.51]嗚呼、辿り辿って夜の町(呜呼、追溯于夜晚小镇上)
-                [01:54.83]迷い一つなく踊りだす(心无杂念的就此起舞吧)
-                [01:59.68]はぁ~(哈阿~)
-                [02:00.44]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [02:03.64]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)
-                [02:06.49]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [02:09.66]髪も振り乱して(长发也随风飘散)
-                [02:11.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)
-                [02:15.63]この宴は続く(这宴会还会持续)
-                [02:17.67]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)
-                [02:21.60]今宵は雪月花(因为今宵乃是雪月花)
-                [02:36.74]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [02:39.72]ハッハッハッハッハッハッ さぁさぁさぁ(哈 哈 哈 哈 哈 哈 来~来~来~)
-                [02:42.45]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [02:45.49]ハッハッハッハッハッハッ(哈 哈 哈 哈 哈 哈)
-                [02:47.66]花で一つ、鳥で二つ(花就是一、鸟就是二)
-                [02:51.31]手打ち鳴らす(拍着手轻声唱)
-                [02:54.12]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)
-                [02:58.76]鳴らす鳴らす……(轻声唱轻轻唱……)
-                [03:00.09]花で一つ、鳥で二つ(花就是一、鸟就是二)
-                [03:03.34]手打ち鳴らす(拍着手轻声唱)
-                [03:06.25]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)
-                [03:10.78]鳴らす鳴らす……(轻轻唱轻声唱……)
-                [03:13.28]今は(在此)
-                [03:15.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [03:18.63]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)
-                [03:21.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [03:24.60]髪も振り乱して(长发也随风飘散)
-                [03:26.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)
-                [03:30.67]この宴は続く(这宴会不会结束)
-                [03:32.75]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)
-                [03:36.63]今宵は何曜日か?(今宵是星期几呢?)
-                [03:39.02]水木金?(三四五?)
-                [03:40.56]土日月火?(六七一二?)
-                [03:44.11]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [03:47.00]ハッハッハッハッ(哈 哈 哈 哈 哈 哈)
-                [03:48.57]いよーーーーっ ぽん!(~哟ーーーー~嘣~!)
-                [03:50.43]-終わり-(-End-)
-            
-
-

With playlist

-
-

With playlist and lyrics

-
-
-                [ti:あっちゅ~ま青春!]
-                [ar:七森中☆ごらく部]
-                [al:あっちゅ~ま青春!]
-                [00:00.76]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)
-                [00:05.96]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)
-                [00:09.67]Yeah!! Yeah!! Yeah!! Yeah!!
-                [00:12.21]青春はじめよう 1・2・さん☆ハイ!(让青春起步吧! 1·2·三☆OK!)
-                [00:14.78]ひとまず走るぞ 1・2・さん☆ハイ!(不管如何先跑起来吧! 1·2·三☆OK!)
-                [00:17.32]みんなが笑顔で 1・2・さん☆ハイ!(大家都露出笑脸! 1·2·三☆OK!)
-                [00:19.95]これが青春だ 1・2・さん☆ハイ!(这就是青春! 1·2·三☆OK!)
-                [00:22.71]春! 桜もちを食べよう 夏! かき氷で決まり(春天! 来吃樱叶饼吧 夏天! 就决定是刨冰啦)
-                [00:27.89]秋! 焼きいもを頬張り 冬! 雪でまたかき氷(秋天! 把烤白薯大口塞进嘴里 冬天! 在雪里面又是刨冰)
-                [00:32.57]もういっちょ☆(再来☆)
-                [00:33.16]春! 教室を間違えて 夏! 宿題を忘れて(春天! 进错了教室 夏天! 把作业忘掉了)
-                [00:38.37]秋! マラソンでビリケツ 冬! こたつに長期滞在(秋天! 马拉松最后一名 冬天! 长期居住在暖炉里)
-                [00:43.61]1年365日 ときどき366日(一年中的365天 有时候是366天)
-                [00:48.69]色々あるけど 全力!全開! 全身全霊! 楽しもうよ よーよよよよ(虽然会发生很多事情,但是一起尽力尽兴!全心全意!享受每一天吧!吧~吧吧吧吧)
-                [00:55.23]「えんじょい!えんじょい!じょじょじょじょじょい!」(「享受吧!享受吧! 吧吧吧吧吧!」)
-                [00:57.83]あっちゅ~ま青春! まぶし~いよ青春!(转瞬即逝的青春! 灿烂无比的青春!)
-                [01:03.17]眠気さよなら ココロの瞳をぱっちりあけよう(向困意说拜拜 把心灵的眼睛睁得大大的吧)
-                [01:08.42]あっちゅ~ま青春! 猛スピード青春!(转瞬即逝的青春! 飞速前进的青春!)
-                [01:13.64]まばたきしてちゃ おいしいところ見逃しちゃうよ 注意!(要是乱眨眼睛的话 就会把美味的时光错过了的啦! 要注意哦!)
-                [01:18.87]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)
-                [01:24.17]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind(别在意) 青春 Fight(奋斗) 青春最棒了!)
-                [01:27.85]Yeah!! Yeah!! Yeah!! Yeah!!
-                [01:30.44]朝! ニワトリに追いかけられ 昼! まさかのテスト0点(早上!被鸡到处追着跑 中午! 考试没想到竟然零分!)
-                [01:35.72]放課後! みんなに励まされて 夜! 今日は寝て忘れましょう(放学后! 大家给我加油 晚上!今天就睡觉把烦恼忘掉吧!)
-                [01:40.35]次の日~っ☆(第二天~☆)
-                [01:40.84]朝! ぎりぎり社長出勤 昼! 給食をおかわり(早上!差点就迟到了 中午!食堂的饭再来一份)
-                [01:46.10]放課後! 部室でダラダララ~ 夜! 長電話止まらない(放学后! 在部团教室懒散度过 晚上! 煲电话粥停不下来)
-                [01:51.32]1日いつでも24時間 巻くこと押すことどちらもできない(一天永远都是24小时 既不会提前也不会延后)
-                [01:56.52]やりたいことなら貪欲強欲 別腹パッパラやり尽そうよ よーよよよよ(如果是想做的事情的话 就要贪婪地去追求 开启第二个胃 去把所有想干的事情都做了吧!)
-                [02:02.95]「わっしょい!わっしょい!しょしょしょしょしょい!」(「欧耶! 欧耶! 耶耶耶耶耶!」)
-                [02:05.58]あっちゅ~ま青春! 楽し~いよ青春!(转瞬即逝的青春! 快乐无比的青春!)
-                [02:11.06]春に始まり春に向かってく 思い出つくろう(开始在春天的青春 为了这个春天 一起创造回忆吧)
-                [02:16.23]あっちゅ~ま青春! 青い春だ青春!(转瞬即逝的青春! 青色的春天就是……青春!)
-                [02:21.40]ブルーなキモチ みんなといるとカラフルになる 不思議!(那些忧郁的心情 只要和大家在一起就会变得色彩缤纷 真是不可思议!)
-                [02:26.82]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)
-                [02:31.99]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)
-                [02:35.68]Yeah!! Yeah!! Yeah!! Yeah!!
-                [02:47.61]あっちゅ~ま青春! まぶし~いよ青春!(转瞬即逝的青春! 灿烂无比的青春!)
-                [02:52.67]眠気さよなら ココロの瞳をぱっちりあけよう(向困意说拜拜 把心灵的眼睛睁得大大的吧)
-                [02:58.01]あっちゅ~ま青春! 猛スピード青春!(转瞬即逝的青春! 飞速前进的青春!)
-                [03:03.22]まばたきしてちゃ おいしいところ見逃しちゃうよ 注意!(要是乱眨眼睛的话 就会把美味的时光错过了的啦! 要注意哦!)
-                [03:08.56]あっちゅ~ま青春! にぎや~かな青春!(转瞬即逝的青春! 热热闹闹的青春!)
-                [03:13.68]今が青春 感じられた日はステキな日だよ(现在就是能感受到青春的 最棒的日子哦)
-                [03:18.86]あっちゅ~ま青春! 二度と来ない青春!(转瞬即逝的青春! 一去不复返的青春!)
-                [03:24.07]気付けばいつも私の青春 キミがいるんだ キ・セ・キ(回过神来 在我的青春中都有你在身边 真・是・奇・迹)
-                [03:29.41]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)
-                [03:34.56]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)
-                [03:38.23]Yeah!! Yeah!! Yeah!! Yeah!!
-            
-
-                [00:00.230]君と夏の終わり 将来の夢(与你在夏末约定 将来的梦想)
-                [00:04.170]大きな希望 忘れない(远大的希望 不要忘记了)
-                [00:07.170]10年後の8月(我相信 十年後的八月)
-                [00:09.700]また出会えるのを 信じて(我们还能再相遇)
-                [00:14.360]最高の思い出を…(共划美好的回忆)
-                [00:39.960]出会いは ふっとした 瞬間 帰り道の交差点で(相识 是那麼不经意的瞬间 我在回家途中的十字路口)
-                [00:47.050]声をかけてくれたね 「一緒に帰ろう」(听见你的一声〞一起回家吧〞)
-                [00:54.310]僕は 照れくさそうに カバンで顔を隠しながら(我当时有点尴尬 还拿书包遮著脸)
-                [01:01.470]本当は とても とても 嬉しかったよ(其实我 心里好高兴 真的好高兴)
-                [01:08.590]あぁ 花火が夜空 きれいに咲いて ちょっとセツナク(啊!烟火在夜空中 灿烂盛开 几许伤感)
-                [01:15.770]あぁ 風が時間とともに 流れる(啊!风随着时光流逝)
-                [01:22.580]嬉しくって 楽しくって 冒険も いろいろしたね(满心欢喜地 兴致冲冲地 我们四处探险)
-                [01:29.760]二人の 秘密の 基地の中(就在我们的 秘密基地中)
-                [01:36.740]君と夏の終わり 将来の夢 大きな希望 忘れない(与你在夏末约定 将来的梦想 远大的希望 不要忘记了)
-                [01:43.920]10年後の8月 また出会えるのを 信じて(我相信 十年後的八月 我们还能再相遇)
-                [01:51.010]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)
-                [01:56.930]知っていたよ(你仍在心底呼喊著〞谢谢你〞)
-                [01:58.200]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)
-                [02:05.420]最高の思い出を…(那一段最美好的回忆…)
-                [02:13.070]あぁ 夏休みも あと少しで 終っちゃうから(啊!暑假就快要过完了)
-                [02:20.310]あぁ 太陽と月 仲良くして(啊!太阳和月亮 默契十足)
-                [02:27.080]悲しくって 寂しくって 喧嘩も いろいろしたね(想到令人悲伤 或许有些寂寥 我们也多有争吵)
-                [02:34.160]二人の 秘密の 基地の中(就在我们的 秘密基地中)
-                [02:41.140]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)
-                [02:47.000]知っていたよ(你仍在心底呼喊著〞谢谢你)
-                [02:48.340]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)
-                [02:55.630]最高の思い出を…(那一段最美好的回忆)
-                [03:03.320]突然の 転校で どうしようもなく(你突然要转学 你我都可奈何)
-                [03:24.190]手紙 書くよ 電話もするよ 忘れないでね 僕のことを(我会写信给你 也会打电话给你 千万不要忘记我)
-                [03:31.420]いつまでも 二人の 基地の中(永远别忘记 那段在秘密基地中的日子)
-                [03:38.520]君と夏の終わり ずっと話して(与你在夏末 聊了这麼多)
-                [03:42.530]夕日を見てから星を眺め(从黄昏到繁星点点)
-                [03:45.670]君の頬を 流れた涙は ずっと忘れない(流过你双颊的泪水 我永远不会忘记)
-                [03:52.820]君が最後まで 大きく手を振ってくれたこと(直到最後 你紧紧握住我的手 这感觉也将长在我心中)
-                [03:58.540]きっと忘れない(於是就这样)
-                [03:59.930]だから こうして 夢の中で ずっと永遠に…(让我们在梦中相会吧 永远的…)
-                [04:07.110]君と夏の終わり 将来の夢 大きな希望 忘れない(与你在夏末约定 将来的梦想 远大的希望 不要忘记了)
-                [04:14.270]10年後の8月 また出会えるのを 信じて(我相信 十年後的八月 我们还能再相遇)
-                [04:21.400]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)
-                [04:27.260]知っていたよ(你仍在心底呼喊著〞谢谢你〞)
-                [04:28.640]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)
-                [04:35.910]最高の思い出を…(那一段最美好的回忆…)
-                [04:43.160]最高の思い出を…(那一段最美好的回忆…)
-            
-
-                                [by:京兆万年]
-                [ti:回レ!雪月花 小紫ver.]
-                [ar:小倉唯]
-                [lr:ヒゲドライバー]
-                [co:ヒゲドライバー]
-                [ag:ヒゲドライバー]
-                [00:00.00]せ〜の いちにっさんはい!(预~备 一 二 三 嗨!)
-                [00:04.68]ほい! いよーーーーっ ぽん!(嘿 咿哟 嘭)
-                [00:07.66]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [00:11.12]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜~)
-                [00:13.36]さぁさぁさぁ(来 来 来)
-                [00:14.08]これよりご覧いただきますは(接下来诸位将欣赏到的是)
-                [00:15.65]カブキ者たちの栄枯盛衰(歌舞伎演员们的荣辱盛衰)
-                [00:17.14]時代常に日進月歩(时代总是在日新月异)
-                [00:18.24]聞いてってよ老若男女(且听我一一道来 男女老少)
-                [00:20.14]一見は勧善懲悪(乍一看是惩恶扬善)
-                [00:21.49]悪者どもを一刀両断(将坏人们一刀两断)
-                [00:22.85]「でもホンドにそれだけで楽しいの?」(“但是你真的会因此而觉得扬眉吐气吗?”)
-                [00:25.63]もうなんだって蒟蒻問答(无论问什么 都是牛头马嘴)
-                [00:27.58]ハッハッハッハッハッハッハィヤ(哈哈哈哈哈哈 咿呀)
-                [00:30.57]ハッハッハッハッ(哈哈哈哈)
-                [00:31.97]いよーーーーっ ぽん!(咿哟 嘭)
-                [00:33.61]どこからともなく現れて(自何处出现委实难料)
-                [00:34.96]すぐどこかへ行っちゃって神出鬼沒(眼又遁隐他处总是神出鬼没)
-                [00:36.35]チャンスを待ったら一日千秋(若是静候机会 便是一日千秋)
-                [00:38.03]追いかければ東奔西走(追上前去的话又要东奔西走)
-                [00:39.68]時代常に千変万化(时代总是千变万化)
-                [00:40.95]人の心は複雑怪奇(世人之心复杂怪奇)
-                [00:42.31]「でも本気でそんなこ言ってんの?」(“但是说着这些话的你岂不也是难免戏谑?”)
-                [00:45.02]もうどうにも満身創痍(也罢 无论怎样都将满身疮痍)
-                [00:46.98]嗚呼、巡り巡って夜の町(呜呼 绕来绕去相会在这夜色下的街)
-                [00:53.27]キミは合図出し踊りだす((由)你发出信号 (让)我们一同起舞转)
-                [00:58.12]はぁ~(哈呜~)
-                [00:58.88]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)
-                [01:02.12]華麗に花弁 散らすように(在散落的美丽花瓣中)
-                [01:04.97]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)
-                [01:08.13]髪も振り乱して(头发凌乱又怎样?)
-                [01:10.23]一昨日、昨日、今日と、明日と、明後日と(前日、昨日、今日、明日、后日)
-                [01:14.13]この宴は続く(这场宴会亦不息)
-                [01:16.31]踊レ、歌エ、一心不乱に回レ!(舞动吧 歌唱吧 一心不乱的旋转吧于)
-                [01:20.19]今宵は雪月花(今夜的雪月花)
-                [01:25.43]ほい! いよーーーーっ ぽん!(哈~!~哟ーーーー~嘣~!)
-                [01:29.14]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [01:32.16]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜)
-                [01:34.39]ねぇねぇねぇ(呐~呐~呐~)
-                [01:35.12]この世に平安訪れるの?(平安已经访问此世了吗?)
-                [01:36.50]のべつ幕無し丁丁発止(不会闭幕的丁当争斗)
-                [01:38.09]兵ども千客万来(官兵们接踵而来)
-                [01:39.50]ひしめき合群雄割拠(相互吵吵嚷嚷群雄割据)
-                [01:41.00]伸るか反るか一攫千金(成败在于敢否一举千金)
-                [01:42.47]気が付いたら絶体絶命(回过头来却已穷途末路)
-                [01:43.50]「でも本音のとこ、どうなってんの?」(「不过真心的所在、到底是什么样呢?」)
-                [01:46.62]もうまったく奇想天外(真是的总这么异想天开)
-                [01:48.51]嗚呼、辿り辿って夜の町(呜呼、追溯于夜晚小镇上)
-                [01:54.83]迷い一つなく踊りだす(心无杂念的就此起舞吧)
-                [01:59.68]はぁ~(哈阿~)
-                [02:00.44]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [02:03.64]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)
-                [02:06.49]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [02:09.66]髪も振り乱して(长发也随风飘散)
-                [02:11.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)
-                [02:15.63]この宴は続く(这宴会还会持续)
-                [02:17.67]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)
-                [02:21.60]今宵は雪月花(因为今宵乃是雪月花)
-                [02:36.74]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [02:39.72]ハッハッハッハッハッハッ さぁさぁさぁ(哈 哈 哈 哈 哈 哈 来~来~来~)
-                [02:42.45]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [02:45.49]ハッハッハッハッハッハッ(哈 哈 哈 哈 哈 哈)
-                [02:47.66]花で一つ、鳥で二つ(花就是一、鸟就是二)
-                [02:51.31]手打ち鳴らす(拍着手轻声唱)
-                [02:54.12]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)
-                [02:58.76]鳴らす鳴らす……(轻声唱轻轻唱……)
-                [03:00.09]花で一つ、鳥で二つ(花就是一、鸟就是二)
-                [03:03.34]手打ち鳴らす(拍着手轻声唱)
-                [03:06.25]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)
-                [03:10.78]鳴らす鳴らす……(轻轻唱轻声唱……)
-                [03:13.28]今は(在此)
-                [03:15.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [03:18.63]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)
-                [03:21.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)
-                [03:24.60]髪も振り乱して(长发也随风飘散)
-                [03:26.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)
-                [03:30.67]この宴は続く(这宴会不会结束)
-                [03:32.75]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)
-                [03:36.63]今宵は何曜日か?(今宵是星期几呢?)
-                [03:39.02]水木金?(三四五?)
-                [03:40.56]土日月火?(六七一二?)
-                [03:44.11]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)
-                [03:47.00]ハッハッハッハッ(哈 哈 哈 哈 哈 哈)
-                [03:48.57]いよーーーーっ ぽん!(~哟ーーーー~嘣~!)
-                [03:50.43]-終わり-(-End-)
-            
-
-

Narrow

-
-
- - + + var ap5 = new APlayer({ + element: document.getElementById('player5'), + narrow: false, + autoplay: false, + showlrc: 1, + mutex: true, + theme: '#ad7a86', + music: [ + { + title: 'あっちゅ~ま青春!', + author: '七森中☆ごらく部', + url: 'http://7xq131.com1.z0.glb.clouddn.com/あっちゅ~ま青春!.mp3', + pic: 'http://7xq131.com1.z0.glb.clouddn.com/あっちゅ~ま青春!.jpg', + lrc: "[ti:あっちゅ~ま青春!]\n[ar:七森中☆ごらく部]\n[al:あっちゅ~ま青春!]\n[00:00.76]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)\n[00:05.96]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)\n[00:09.67]Yeah!! Yeah!! Yeah!! Yeah!!\n[00:12.21]青春はじめよう 1・2・さん☆ハイ!(让青春起步吧! 1·2·三☆OK!)\n[00:14.78]ひとまず走るぞ 1・2・さん☆ハイ!(不管如何先跑起来吧! 1·2·三☆OK!)\n[00:17.32]みんなが笑顔で 1・2・さん☆ハイ!(大家都露出笑脸! 1·2·三☆OK!)\n[00:19.95]これが青春だ 1・2・さん☆ハイ!(这就是青春! 1·2·三☆OK!)\n[00:22.71]春! 桜もちを食べよう 夏! かき氷で決まり(春天! 来吃樱叶饼吧 夏天! 就决定是刨冰啦)\n[00:27.89]秋! 焼きいもを頬張り 冬! 雪でまたかき氷(秋天! 把烤白薯大口塞进嘴里 冬天! 在雪里面又是刨冰)\n[00:32.57]もういっちょ☆(再来☆)\n[00:33.16]春! 教室を間違えて 夏! 宿題を忘れて(春天! 进错了教室 夏天! 把作业忘掉了)\n[00:38.37]秋! マラソンでビリケツ 冬! こたつに長期滞在(秋天! 马拉松最后一名 冬天! 长期居住在暖炉里)\n[00:43.61]1年365日 ときどき366日(一年中的365天 有时候是366天)\n[00:48.69]色々あるけど 全力!全開! 全身全霊! 楽しもうよ よーよよよよ(虽然会发生很多事情,但是一起尽力尽兴!全心全意!享受每一天吧!吧~吧吧吧吧)\n[00:55.23]「えんじょい!えんじょい!じょじょじょじょじょい!」(「享受吧!享受吧! 吧吧吧吧吧!」)\n[00:57.83]あっちゅ~ま青春! まぶし~いよ青春!(转瞬即逝的青春! 灿烂无比的青春!)\n[01:03.17]眠気さよなら ココロの瞳をぱっちりあけよう(向困意说拜拜 把心灵的眼睛睁得大大的吧)\n[01:08.42]あっちゅ~ま青春! 猛スピード青春!(转瞬即逝的青春! 飞速前进的青春!)\n[01:13.64]まばたきしてちゃ おいしいところ見逃しちゃうよ 注意!(要是乱眨眼睛的话 就会把美味的时光错过了的啦! 要注意哦!)\n[01:18.87]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)\n[01:24.17]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind(别在意) 青春 Fight(奋斗) 青春最棒了!)\n[01:27.85]Yeah!! Yeah!! Yeah!! Yeah!!\n[01:30.44]朝! ニワトリに追いかけられ 昼! まさかのテスト0点(早上!被鸡到处追着跑 中午! 考试没想到竟然零分!)\n[01:35.72]放課後! みんなに励まされて 夜! 今日は寝て忘れましょう(放学后! 大家给我加油 晚上!今天就睡觉把烦恼忘掉吧!)\n[01:40.35]次の日~っ☆(第二天~☆)\n[01:40.84]朝! ぎりぎり社長出勤 昼! 給食をおかわり(早上!差点就迟到了 中午!食堂的饭再来一份)\n[01:46.10]放課後! 部室でダラダララ~ 夜! 長電話止まらない(放学后! 在部团教室懒散度过 晚上! 煲电话粥停不下来)\n[01:51.32]1日いつでも24時間 巻くこと押すことどちらもできない(一天永远都是24小时 既不会提前也不会延后)\n[01:56.52]やりたいことなら貪欲強欲 別腹パッパラやり尽そうよ よーよよよよ(如果是想做的事情的话 就要贪婪地去追求 开启第二个胃 去把所有想干的事情都做了吧!)\n[02:02.95]「わっしょい!わっしょい!しょしょしょしょしょい!」(「欧耶! 欧耶! 耶耶耶耶耶!」)\n[02:05.58]あっちゅ~ま青春! 楽し~いよ青春!(转瞬即逝的青春! 快乐无比的青春!)\n[02:11.06]春に始まり春に向かってく 思い出つくろう(开始在春天的青春 为了这个春天 一起创造回忆吧)\n[02:16.23]あっちゅ~ま青春! 青い春だ青春!(转瞬即逝的青春! 青色的春天就是……青春!)\n[02:21.40]ブルーなキモチ みんなといるとカラフルになる 不思議!(那些忧郁的心情 只要和大家在一起就会变得色彩缤纷 真是不可思议!)\n[02:26.82]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)\n[02:31.99]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)\n[02:35.68]Yeah!! Yeah!! Yeah!! Yeah!!\n[02:47.61]あっちゅ~ま青春! まぶし~いよ青春!(转瞬即逝的青春! 灿烂无比的青春!)\n[02:52.67]眠気さよなら ココロの瞳をぱっちりあけよう(向困意说拜拜 把心灵的眼睛睁得大大的吧)\n[02:58.01]あっちゅ~ま青春! 猛スピード青春!(转瞬即逝的青春! 飞速前进的青春!)\n[03:03.22]まばたきしてちゃ おいしいところ見逃しちゃうよ 注意!(要是乱眨眼睛的话 就会把美味的时光错过了的啦! 要注意哦!)\n[03:08.56]あっちゅ~ま青春! にぎや~かな青春!(转瞬即逝的青春! 热热闹闹的青春!)\n[03:13.68]今が青春 感じられた日はステキな日だよ(现在就是能感受到青春的 最棒的日子哦)\n[03:18.86]あっちゅ~ま青春! 二度と来ない青春!(转瞬即逝的青春! 一去不复返的青春!)\n[03:24.07]気付けばいつも私の青春 キミがいるんだ キ・セ・キ(回过神来 在我的青春中都有你在身边 真・是・奇・迹)\n[03:29.41]青春オーライ 青春オーエス 青春謳歌 はりきって行くぞ(青春 All right 青春 Oh Hisse 青春讴歌 鼓足干劲上吧!)\n[03:34.56]青春ドンマイ 青春ファイト 青春最高(青春 Don't Mind 青春 Fight 青春最棒了!)\n[03:38.23]Yeah!! Yeah!! Yeah!! Yeah!!" + }, + { + title: 'secret base~君がくれたもの~', + author: '茅野愛衣', + url: 'http://7xq131.com1.z0.glb.clouddn.com/secret base~.mp3', + pic: 'http://7xq131.com1.z0.glb.clouddn.com/secret base~.jpg', + lrc: "[00:00.230]君と夏の終わり 将来の夢(与你在夏末约定 将来的梦想)\n[00:04.170]大きな希望 忘れない(远大的希望 不要忘记了)\n[00:07.170]10年後の8月(我相信 十年後的八月)\n[00:09.700]また出会えるのを 信じて(我们还能再相遇)\n[00:14.360]最高の思い出を…(共划美好的回忆)\n[00:39.960]出会いは ふっとした 瞬間 帰り道の交差点で(相识 是那麼不经意的瞬间 我在回家途中的十字路口)\n[00:47.050]声をかけてくれたね 「一緒に帰ろう」(听见你的一声〞一起回家吧〞)\n[00:54.310]僕は 照れくさそうに カバンで顔を隠しながら(我当时有点尴尬 还拿书包遮著脸)\n[01:01.470]本当は とても とても 嬉しかったよ(其实我 心里好高兴 真的好高兴)\n[01:08.590]あぁ 花火が夜空 きれいに咲いて ちょっとセツナク(啊!烟火在夜空中 灿烂盛开 几许伤感)\n[01:15.770]あぁ 風が時間とともに 流れる(啊!风随着时光流逝)\n[01:22.580]嬉しくって 楽しくって 冒険も いろいろしたね(满心欢喜地 兴致冲冲地 我们四处探险)\n[01:29.760]二人の 秘密の 基地の中(就在我们的 秘密基地中)\n[01:36.740]君と夏の終わり 将来の夢 大きな希望 忘れない(与你在夏末约定 将来的梦想 远大的希望 不要忘记了)\n[01:43.920]10年後の8月 また出会えるのを 信じて(我相信 十年後的八月 我们还能再相遇)\n[01:51.010]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)\n[01:56.930]知っていたよ(你仍在心底呼喊著〞谢谢你〞)\n[01:58.200]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)\n[02:05.420]最高の思い出を…(那一段最美好的回忆…)\n[02:13.070]あぁ 夏休みも あと少しで 終っちゃうから(啊!暑假就快要过完了)\n[02:20.310]あぁ 太陽と月 仲良くして(啊!太阳和月亮 默契十足)\n[02:27.080]悲しくって 寂しくって 喧嘩も いろいろしたね(想到令人悲伤 或许有些寂寥 我们也多有争吵)\n[02:34.160]二人の 秘密の 基地の中(就在我们的 秘密基地中)\n[02:41.140]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)\n[02:47.000]知っていたよ(你仍在心底呼喊著〞谢谢你)\n[02:48.340]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)\n[02:55.630]最高の思い出を…(那一段最美好的回忆)\n[03:03.320]突然の 転校で どうしようもなく(你突然要转学 你我都可奈何)\n[03:24.190]手紙 書くよ 電話もするよ 忘れないでね 僕のことを(我会写信给你 也会打电话给你 千万不要忘记我)\n[03:31.420]いつまでも 二人の 基地の中(永远别忘记 那段在秘密基地中的日子)\n[03:38.520]君と夏の終わり ずっと話して(与你在夏末 聊了这麼多)\n[03:42.530]夕日を見てから星を眺め(从黄昏到繁星点点)\n[03:45.670]君の頬を 流れた涙は ずっと忘れない(流过你双颊的泪水 我永远不会忘记)\n[03:52.820]君が最後まで 大きく手を振ってくれたこと(直到最後 你紧紧握住我的手 这感觉也将长在我心中)\n[03:58.540]きっと忘れない(於是就这样)\n[03:59.930]だから こうして 夢の中で ずっと永遠に…(让我们在梦中相会吧 永远的…)\n[04:07.110]君と夏の終わり 将来の夢 大きな希望 忘れない(与你在夏末约定 将来的梦想 远大的希望 不要忘记了)\n[04:14.270]10年後の8月 また出会えるのを 信じて(我相信 十年後的八月 我们还能再相遇)\n[04:21.400]君が最後まで 心から 「ありがとう」叫んでいたこと(我知道 一直到最後)\n[04:27.260]知っていたよ(你仍在心底呼喊著〞谢谢你〞)\n[04:28.640]涙をこらえて 笑顔でさようなら せつないよね(强忍著泪水 笑著说再见 无限感叹涌现)\n[04:35.910]最高の思い出を…(那一段最美好的回忆…)\n[04:43.160]最高の思い出を…(那一段最美好的回忆…)" + }, + { + title: '回レ!雪月花', + author: '小倉唯', + url: 'http://7xq131.com1.z0.glb.clouddn.com/回レ!雪月花.mp3', + pic: 'http://7xq131.com1.z0.glb.clouddn.com/回レ!雪月花.jpg', + lrc: "[by:京兆万年]\n[ti:回レ!雪月花 小紫ver.]\n[ar:小倉唯]\n[lr:ヒゲドライバー]\n[co:ヒゲドライバー]\n[ag:ヒゲドライバー]\n[00:00.00]せ〜の いちにっさんはい!(预~备 一 二 三 嗨!)\n[00:04.68]ほい! いよーーーーっ ぽん!(嘿 咿哟 嘭)\n[00:07.66]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)\n[00:11.12]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜~)\n[00:13.36]さぁさぁさぁ(来 来 来)\n[00:14.08]これよりご覧いただきますは(接下来诸位将欣赏到的是)\n[00:15.65]カブキ者たちの栄枯盛衰(歌舞伎演员们的荣辱盛衰)\n[00:17.14]時代常に日進月歩(时代总是在日新月异)\n[00:18.24]聞いてってよ老若男女(且听我一一道来 男女老少)\n[00:20.14]一見は勧善懲悪(乍一看是惩恶扬善)\n[00:21.49]悪者どもを一刀両断(将坏人们一刀两断)\n[00:22.85]「でもホンドにそれだけで楽しいの?」(“但是你真的会因此而觉得扬眉吐气吗?”)\n[00:25.63]もうなんだって蒟蒻問答(无论问什么 都是牛头马嘴)\n[00:27.58]ハッハッハッハッハッハッハィヤ(哈哈哈哈哈哈 咿呀)\n[00:30.57]ハッハッハッハッ(哈哈哈哈)\n[00:31.97]いよーーーーっ ぽん!(咿哟 嘭)\n[00:33.61]どこからともなく現れて(自何处出现委实难料)\n[00:34.96]すぐどこかへ行っちゃって神出鬼沒(眼又遁隐他处总是神出鬼没)\n[00:36.35]チャンスを待ったら一日千秋(若是静候机会 便是一日千秋)\n[00:38.03]追いかければ東奔西走(追上前去的话又要东奔西走)\n[00:39.68]時代常に千変万化(时代总是千变万化)\n[00:40.95]人の心は複雑怪奇(世人之心复杂怪奇)\n[00:42.31]「でも本気でそんなこ言ってんの?」(“但是说着这些话的你岂不也是难免戏谑?”)\n[00:45.02]もうどうにも満身創痍(也罢 无论怎样都将满身疮痍)\n[00:46.98]嗚呼、巡り巡って夜の町(呜呼 绕来绕去相会在这夜色下的街)\n[00:53.27]キミは合図出し踊りだす((由)你发出信号 (让)我们一同起舞转)\n[00:58.12]はぁ~(哈呜~)\n[00:58.88]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)\n[01:02.12]華麗に花弁 散らすように(在散落的美丽花瓣中)\n[01:04.97]回レ回レ回レ回レ回レ回レ回レ回レ回レ!(旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧旋转吧!)\n[01:08.13]髪も振り乱して(头发凌乱又怎样?)\n[01:10.23]一昨日、昨日、今日と、明日と、明後日と(前日、昨日、今日、明日、后日)\n[01:14.13]この宴は続く(这场宴会亦不息)\n[01:16.31]踊レ、歌エ、一心不乱に回レ!(舞动吧 歌唱吧 一心不乱的旋转吧于)\n[01:20.19]今宵は雪月花(今夜的雪月花)\n[01:25.43]ほい! いよーーーーっ ぽん!(哈~!~哟ーーーー~嘣~!)\n[01:29.14]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)\n[01:32.16]ハッハッハッハッハッハッ う~(哈 哈 哈 哈 哈 哈 呜)\n[01:34.39]ねぇねぇねぇ(呐~呐~呐~)\n[01:35.12]この世に平安訪れるの?(平安已经访问此世了吗?)\n[01:36.50]のべつ幕無し丁丁発止(不会闭幕的丁当争斗)\n[01:38.09]兵ども千客万来(官兵们接踵而来)\n[01:39.50]ひしめき合群雄割拠(相互吵吵嚷嚷群雄割据)\n[01:41.00]伸るか反るか一攫千金(成败在于敢否一举千金)\n[01:42.47]気が付いたら絶体絶命(回过头来却已穷途末路)\n[01:43.50]「でも本音のとこ、どうなってんの?」(「不过真心的所在、到底是什么样呢?」)\n[01:46.62]もうまったく奇想天外(真是的总这么异想天开)\n[01:48.51]嗚呼、辿り辿って夜の町(呜呼、追溯于夜晚小镇上)\n[01:54.83]迷い一つなく踊りだす(心无杂念的就此起舞吧)\n[01:59.68]はぁ~(哈阿~)\n[02:00.44]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)\n[02:03.64]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)\n[02:06.49]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)\n[02:09.66]髪も振り乱して(长发也随风飘散)\n[02:11.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)\n[02:15.63]この宴は続く(这宴会还会持续)\n[02:17.67]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)\n[02:21.60]今宵は雪月花(因为今宵乃是雪月花)\n[02:36.74]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)\n[02:39.72]ハッハッハッハッハッハッ さぁさぁさぁ(哈 哈 哈 哈 哈 哈 来~来~来~)\n[02:42.45]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)\n[02:45.49]ハッハッハッハッハッハッ(哈 哈 哈 哈 哈 哈)\n[02:47.66]花で一つ、鳥で二つ(花就是一、鸟就是二)\n[02:51.31]手打ち鳴らす(拍着手轻声唱)\n[02:54.12]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)\n[02:58.76]鳴らす鳴らす……(轻声唱轻轻唱……)\n[03:00.09]花で一つ、鳥で二つ(花就是一、鸟就是二)\n[03:03.34]手打ち鳴らす(拍着手轻声唱)\n[03:06.25]風で三つ、嗚呼、月出て四つ(风就是三、呜呼、月出就有四)\n[03:10.78]鳴らす鳴らす……(轻轻唱轻声唱……)\n[03:13.28]今は(在此)\n[03:15.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)\n[03:18.63]華麗に花弁 散らすように(犹如花瓣华丽的散落一般)\n[03:21.35]回レ回レ回レ回レ回レ 回レ回レ回レ回レ!(转啊转啊转啊转啊转啊转啊转啊转啊转啊!)\n[03:24.60]髪も振り乱して(长发也随风飘散)\n[03:26.72]一昨日、昨日、今日と、明日と、明後日と(无论前天、昨天、还是今天、明天、与后天)\n[03:30.67]この宴は続く(这宴会不会结束)\n[03:32.75]踊レ、歌エ、一心不乱に回レ!(跳吧、唱吧、一心一意的转吧!)\n[03:36.63]今宵は何曜日か?(今宵是星期几呢?)\n[03:39.02]水木金?(三四五?)\n[03:40.56]土日月火?(六七一二?)\n[03:44.11]ハッハッハッハッハッハッハィヤ(哈 哈 哈 哈 哈 哈 嗨呀)\n[03:47.00]ハッハッハッハッ(哈 哈 哈 哈 哈 哈)\n[03:48.57]いよーーーーっ ぽん!(~哟ーーーー~嘣~!)\n[03:50.43]-終わり-(-End-)" + } + ] + }); + ap5.init(); + - \ No newline at end of file +http://7xq131.com1.z0.glb.clouddn.com/ \ No newline at end of file diff --git a/dist/APlayer.min.js b/dist/APlayer.min.js index d5d2c52..abad91e 100644 --- a/dist/APlayer.min.js +++ b/dist/APlayer.min.js @@ -1,2 +1,2 @@ -"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var a=0;ae?"0"+e:""+e},a=parseInt(e/60),s=parseInt(e-60*a);return t(a)+":"+t(s)},this.parseLrc=function(e){for(var t=[],a=0;al;l++){var o=s[l].match(/\[(\d{2}):(\d{2})\.(\d{2,3})]/g),r=s[l].replace(/\[(\d{2}):(\d{2})\.(\d{2,3})]/g,"").replace(/^\s+|\s+$/g,"");if(null!=o)for(var d=o.length,u=0;d>u;u++){var c=/\[(\d{2}):(\d{2})\.(\d{2,3})]/.exec(o[u]),p=60*c[1]+parseInt(c[2])+parseInt(c[3])/(2===(c[3]+"").length?100:1e3);i.push([p,r])}}i.sort(function(e,t){return e[0]-t[0]}),t.push(i)}return t},this.updateBar=function(e,t,s){t=t>0?t:0,t=1>t?t:1,a[e+"Bar"].style[s]=100*t+"%"},this.updateLrc=function(){var e=arguments.length<=0||void 0===arguments[0]?a.audio.currentTime:arguments[0];if(a.lrcIndex>a.lrc.length-1||e=a.lrc[a.lrcIndex+1][0])for(var t=0;t=a.lrc[t][0]&&(!a.lrc[t+1]||e-1?this.option.music[this.playIndex]:this.option.music;var i=void 0;if(this.option.showlrc){var n=[];for(i=0;i\n
\n \n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n - 00:00 / 00:00\n
\n \n
\n
\n
\n
\n
\n
\n '+(this.playIndex>-1?'':"")+"\n
\n
\n
";if(this.playIndex>-1){for(l+='\n
\n
    ',i=0;i\n \n '+(i+1)+'\n '+this.option.music[i].title+'\n '+this.option.music[i].author+"\n ";l+="\n
\n
"}this.element.innerHTML=l,this.element.getElementsByClassName("aplayer-info")[0].offsetWidth<200&&this.element.getElementsByClassName("aplayer-time")[0].classList.add("aplayer-time-narrow"),this.element.getElementsByClassName("aplayer-bar-wrap")[0].style.marginRight=this.element.getElementsByClassName("aplayer-time")[0].offsetWidth+5+"px",this.option.narrow&&this.element.classList.add("aplayer-narrow"),this.button=this.element.getElementsByClassName("aplayer-button")[0],this.button.addEventListener("click",function(e){s.button.classList.contains("aplayer-play")?s.play():s.button.classList.contains("aplayer-pause")&&s.pause()}),this.playIndex>-1&&!function(){for(var e=s.element.getElementsByClassName("aplayer-list")[0].getElementsByTagName("li"),t=function(t){e[t].addEventListener("click",function(){var a=parseInt(e[t].getElementsByClassName("aplayer-list-index")[0].innerHTML)-1;a!==s.playIndex&&s.setMusic(a),s.play()})},a=0;a0?i:0,i=1>i?i:1,s.updateBar("played",i,"width"),s.option.showlrc&&s.updateLrc(parseFloat(s.playedBar.style.width)/100*s.audio.duration),s.element.getElementsByClassName("aplayer-ptime")[0].innerHTML=s.secondToTime(i*s.audio.duration)},d=function h(){document.removeEventListener("mouseup",h),document.removeEventListener("mousemove",r),s.audio.currentTime=parseFloat(s.playedBar.style.width)/100*s.audio.duration,s.play()};this.thumb.addEventListener("mousedown",function(){o=s.bar.clientWidth,clearInterval(s.playedTime),document.addEventListener("mousemove",r),document.addEventListener("mouseup",d)}),this.volumeBar=this.element.getElementsByClassName("aplayer-volume")[0];var u=this.element.getElementsByClassName("aplayer-volume-bar")[0],c=this.element.getElementsByClassName("aplayer-time")[0].getElementsByTagName("i")[0],p=35;this.element.getElementsByClassName("aplayer-volume-bar-wrap")[0].addEventListener("click",function(e){var t=e||window.event,i=(p-t.clientY+a(u))/p;i=i>0?i:0,i=1>i?i:1,s.updateBar("volume",i,"height"),s.audio.volume=i,s.audio.muted&&(s.audio.muted=!1),1===i?c.className="demo-icon aplayer-icon-volume-up":c.className="demo-icon aplayer-icon-volume-down"}),c.addEventListener("click",function(){s.audio.muted?(s.audio.muted=!1,c.className=1===s.audio.volume?"demo-icon aplayer-icon-volume-up":"demo-icon aplayer-icon-volume-down",s.updateBar("volume",s.audio.volume,"height")):(s.audio.muted=!0,c.className="demo-icon aplayer-icon-volume-off",s.updateBar("volume",0,"height"))});var m=this.element.getElementsByClassName("aplayer-icon-loop")[0];m.addEventListener("click",function(){s.loop?(m.classList.add("aplayer-noloop"),s.loop=!1,s.audio.loop=s.playIndex>-1?!1:s.loop):(m.classList.remove("aplayer-noloop"),s.loop=!0,s.audio.loop=s.playIndex>-1?!1:s.loop)}),this.playIndex>-1&&this.element.getElementsByClassName("aplayer-icon-menu")[0].addEventListener("click",function(){var e=s.element.getElementsByClassName("aplayer-list")[0];e.classList.contains("aplayer-list-hide")?e.classList.remove("aplayer-list-hide"):e.classList.add("aplayer-list-hide")}),this.setMusic(0),e.push(this)}},{key:"setMusic",value:function(e){var t=this;this.playIndex>-1&&"undefined"!=typeof e&&(this.playIndex=e);var a=this.playIndex;if(this.music=this.playIndex>-1?this.option.music[a]:this.option.music,this.music.pic&&(this.element.getElementsByClassName("aplayer-pic")[0].style.backgroundImage="url("+encodeURI(this.music.pic)+")"),this.element.getElementsByClassName("aplayer-title")[0].innerHTML=this.music.title,this.element.getElementsByClassName("aplayer-author")[0].innerHTML=" - "+this.music.author,this.playIndex>-1&&(this.element.getElementsByClassName("aplayer-list-light")[0]&&this.element.getElementsByClassName("aplayer-list-light")[0].classList.remove("aplayer-list-light"),this.element.getElementsByClassName("aplayer-list")[0].getElementsByTagName("li")[a].classList.add("aplayer-list-light")),this.audio&&(this.pause(),this.audio.currentTime=0),this.playIndex>-1&&!this.audios[a]||-1===this.playIndex?(this.audio=document.createElement("audio"),this.audio.src=this.music.url,this.audio.preload=this.isMobile?"none":"metadata",this.audio.addEventListener("durationchange",function(){1!==t.audio.duration&&(t.element.getElementsByClassName("aplayer-dtime")[0].innerHTML=t.secondToTime(t.audio.duration))}),this.audio.addEventListener("progress",function(){var e=t.audio.buffered.length?t.audio.buffered.end(t.audio.buffered.length-1)/t.audio.duration:0;t.updateBar("loaded",e,"width")}),this.audio.addEventListener("error",function(){t.element.getElementsByClassName("aplayer-author")[0].innerHTML=" - Error happens ╥﹏╥"}),this.playIndex>-1?this.audio.addEventListener("ended",function(){t.playIndex-1?!1:this.loop,this.playIndex>-1&&(this.audios[a]=this.audio)):(this.audio=this.audios[a],this.audio.volume=parseInt(this.element.getElementsByClassName("aplayer-volume")[0].style.height)/100,this.audio.currentTime=0),this.option.showlrc){this.lrc=this.playIndex>-1?this.lrcs[a]:this.lrcs[0];var s="";this.lrcContents=this.element.getElementsByClassName("aplayer-lrc-contents")[0];for(var i=0;i"+this.lrc[i][1]+"

";this.lrcContents.innerHTML=s,this.lrcIndex||(this.lrcIndex=0),this.lrcContents.getElementsByTagName("p")[0].classList.add("aplayer-lrc-current"),this.lrcContents.style.transform="translateY(0px)",this.lrcContents.style.webkitTransform="translateY(0px)"}1!==this.audio.duration&&(this.element.getElementsByClassName("aplayer-dtime")[0].innerHTML=this.audio.duration?this.secondToTime(this.audio.duration):"00:00"),this.option.autoplay&&!this.isMobile&&this.play(),this.option.autoplay=!0,this.isMobile&&this.pause()}},{key:"play",value:function(){var t=this;if(this.audio.paused){if(this.button.classList.remove("aplayer-play"),this.button.classList.add("aplayer-pause"),this.button.innerHTML="",setTimeout(function(){t.button.innerHTML=''},100),this.option.mutex)for(var a=0;a'},100),this.audio.pause(),clearInterval(this.playedTime))}}]),t}();"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t:window.APlayer=t}(); +"use strict";function _classCallCheck(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}var _createClass=function(){function e(e,t){for(var a=0;ae?"0"+e:""+e},a=parseInt(e/60),s=parseInt(e-60*a);return t(a)+":"+t(s)},this.parseLrc=function(e){for(var t=[],a=0;an;n++){var o=s[n].match(/\[(\d{2}):(\d{2})\.(\d{2,3})]/g),r=s[n].replace(/\[(\d{2}):(\d{2})\.(\d{2,3})]/g,"").replace(/^\s+|\s+$/g,"");if(null!=o)for(var u=o.length,d=0;u>d;d++){var p=/\[(\d{2}):(\d{2})\.(\d{2,3})]/.exec(o[d]),m=60*p[1]+parseInt(p[2])+parseInt(p[3])/(2===(p[3]+"").length?100:1e3);i.push([m,r])}}i.sort(function(e,t){return e[0]-t[0]}),t.push(i)}return t},this.updateBar=function(e,t,s){t=t>0?t:0,t=1>t?t:1,a[e+"Bar"].style[s]=100*t+"%"},this.updateLrc=function(){var e=arguments.length<=0||void 0===arguments[0]?a.audio.currentTime:arguments[0];if(a.lrcIndex>a.lrc.length-1||e=a.lrc[a.lrcIndex+1][0])for(var t=0;t=a.lrc[t][0]&&(!a.lrc[t+1]||e-1,this.music=this.multiple?this.option.music[this.playIndex]:this.option.music;var i=void 0;if(this.option.showlrc){var l=[];if(1===this.option.showlrc)if(this.multiple)for(i=0;i\n
\n \n
\n \n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n - 00:00 / 00:00\n
\n \n
\n
\n
\n
\n
\n
\n '+(this.multiple?'':"")+"\n
\n
\n
";if(this.multiple){for(n+='\n
\n
    ',i=0;i\n \n '+(i+1)+'\n '+this.option.music[i].title+'\n '+this.option.music[i].author+"\n ";n+="\n
\n
"}this.element.innerHTML=n,this.element.getElementsByClassName("aplayer-info")[0].offsetWidth<200&&this.element.getElementsByClassName("aplayer-time")[0].classList.add("aplayer-time-narrow"),this.element.getElementsByClassName("aplayer-bar-wrap")[0].style.marginRight=this.element.getElementsByClassName("aplayer-time")[0].offsetWidth+5+"px",this.option.narrow&&this.element.classList.add("aplayer-narrow"),this.button=this.element.getElementsByClassName("aplayer-button")[0],this.button.addEventListener("click",function(e){s.button.classList.contains("aplayer-play")?s.play():s.button.classList.contains("aplayer-pause")&&s.pause()}),this.multiple&&!function(){for(var e=s.element.getElementsByClassName("aplayer-list")[0].getElementsByTagName("li"),t=function(t){e[t].addEventListener("click",function(){var a=parseInt(e[t].getElementsByClassName("aplayer-list-index")[0].innerHTML)-1;a!==s.playIndex&&s.setMusic(a),s.play()})},a=0;a0?i:0,i=1>i?i:1,s.updateBar("played",i,"width"),s.option.showlrc&&s.updateLrc(parseFloat(s.playedBar.style.width)/100*s.audio.duration),s.element.getElementsByClassName("aplayer-ptime")[0].innerHTML=s.secondToTime(i*s.audio.duration)},u=function h(){document.removeEventListener("mouseup",h),document.removeEventListener("mousemove",r),s.audio.currentTime=parseFloat(s.playedBar.style.width)/100*s.audio.duration,s.play()};this.thumb.addEventListener("mousedown",function(){o=s.bar.clientWidth,clearInterval(s.playedTime),document.addEventListener("mousemove",r),document.addEventListener("mouseup",u)}),this.volumeBar=this.element.getElementsByClassName("aplayer-volume")[0];var d=this.element.getElementsByClassName("aplayer-volume-bar")[0],p=this.element.getElementsByClassName("aplayer-time")[0].getElementsByTagName("i")[0],m=35;this.element.getElementsByClassName("aplayer-volume-bar-wrap")[0].addEventListener("click",function(e){var t=e||window.event,i=(m-t.clientY+a(d))/m;i=i>0?i:0,i=1>i?i:1,s.updateBar("volume",i,"height"),s.audio.volume=i,s.audio.muted&&(s.audio.muted=!1),1===i?p.className="demo-icon aplayer-icon-volume-up":p.className="demo-icon aplayer-icon-volume-down"}),p.addEventListener("click",function(){s.audio.muted?(s.audio.muted=!1,p.className=1===s.audio.volume?"demo-icon aplayer-icon-volume-up":"demo-icon aplayer-icon-volume-down",s.updateBar("volume",s.audio.volume,"height")):(s.audio.muted=!0,p.className="demo-icon aplayer-icon-volume-off",s.updateBar("volume",0,"height"))});var c=this.element.getElementsByClassName("aplayer-icon-loop")[0];c.addEventListener("click",function(){s.loop?(c.classList.add("aplayer-noloop"),s.loop=!1,s.audio.loop=s.multiple?!1:s.loop):(c.classList.remove("aplayer-noloop"),s.loop=!0,s.audio.loop=s.multiple?!1:s.loop)}),this.multiple&&this.element.getElementsByClassName("aplayer-icon-menu")[0].addEventListener("click",function(){var e=s.element.getElementsByClassName("aplayer-list")[0];e.classList.contains("aplayer-list-hide")?e.classList.remove("aplayer-list-hide"):e.classList.add("aplayer-list-hide")}),this.setMusic(0),e.push(this)}},{key:"setMusic",value:function(e){var t=this;this.multiple&&"undefined"!=typeof e&&(this.playIndex=e);var a=this.playIndex;if(this.music=this.multiple?this.option.music[a]:this.option.music,this.music.pic&&(this.element.getElementsByClassName("aplayer-pic")[0].style.backgroundImage="url("+encodeURI(this.music.pic)+")"),this.element.getElementsByClassName("aplayer-title")[0].innerHTML=this.music.title,this.element.getElementsByClassName("aplayer-author")[0].innerHTML=" - "+this.music.author,this.multiple&&(this.element.getElementsByClassName("aplayer-list-light")[0]&&this.element.getElementsByClassName("aplayer-list-light")[0].classList.remove("aplayer-list-light"),this.element.getElementsByClassName("aplayer-list")[0].getElementsByTagName("li")[a].classList.add("aplayer-list-light")),this.audio&&(this.pause(),this.audio.currentTime=0),this.multiple&&!this.audios[a]||-1===this.playIndex?(this.audio=document.createElement("audio"),this.audio.src=this.music.url,this.audio.preload=this.isMobile?"none":"metadata",this.audio.addEventListener("durationchange",function(){1!==t.audio.duration&&(t.element.getElementsByClassName("aplayer-dtime")[0].innerHTML=t.secondToTime(t.audio.duration))}),this.audio.addEventListener("progress",function(){var e=t.audio.buffered.length?t.audio.buffered.end(t.audio.buffered.length-1)/t.audio.duration:0;t.updateBar("loaded",e,"width")}),this.audio.addEventListener("error",function(){t.element.getElementsByClassName("aplayer-author")[0].innerHTML=" - Error happens ╥﹏╥"}),this.multiple?this.audio.addEventListener("ended",function(){t.playIndex"+this.lrc[i][1]+"

";this.lrcContents.innerHTML=s,this.lrcIndex||(this.lrcIndex=0),this.lrcContents.getElementsByTagName("p")[0].classList.add("aplayer-lrc-current"),this.lrcContents.style.transform="translateY(0px)",this.lrcContents.style.webkitTransform="translateY(0px)"}1!==this.audio.duration&&(this.element.getElementsByClassName("aplayer-dtime")[0].innerHTML=this.audio.duration?this.secondToTime(this.audio.duration):"00:00"),this.option.autoplay&&!this.isMobile&&this.play(),this.option.autoplay=!0,this.isMobile&&this.pause()}},{key:"play",value:function(){var t=this;if(this.audio.paused){if(this.button.classList.remove("aplayer-play"),this.button.classList.add("aplayer-pause"),this.button.innerHTML="",setTimeout(function(){t.button.innerHTML=''},100),this.option.mutex)for(var a=0;a'},100),this.audio.pause(),clearInterval(this.playedTime))}}]),t}();"undefined"!=typeof module&&"undefined"!=typeof module.exports?module.exports=t:window.APlayer=t}(); //# sourceMappingURL=APlayer.min.js.map diff --git a/dist/APlayer.min.js.map b/dist/APlayer.min.js.map index 5feda75..8186aa2 100644 --- a/dist/APlayer.min.js.map +++ b/dist/APlayer.min.js.map @@ -1 +1 @@ -{"version":3,"sources":["APlayer.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","APlayers","APlayer","option","_this","this","isMobile","navigator","userAgent","match","autoplay","defaultOption","element","document","getElementsByClassName","narrow","mutex","showlrc","theme","defaultKey","hasOwnProperty","playIndex","toString","call","music","audios","loop","secondToTime","second","add0","num","min","parseInt","sec","parseLrc","arr","lrcs","k","lyric","split","lrc","lyricLen","lrcTimes","lrcText","replace","timeLen","j","oneTime","exec","lrcTime","push","sort","a","b","updateBar","type","percentage","direction","style","updateLrc","currentTime","arguments","undefined","audio","lrcIndex","lrcContents","transform","webkitTransform","classList","remove","getElementsByTagName","add","value","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","body","scrollLeft","documentElement","getElementViewTop","actualTop","offsetTop","elementScrollTop","scrollTop","_this2","innerHTML","eleHTML","pic","encodeURI","title","author","offsetWidth","marginRight","button","addEventListener","e","contains","play","pause","listItem","_loop","_i","musicIndex","setMusic","playedBar","loadedBar","thumb","bar","barWidth","event","window","clientWidth","clientX","duration","parseFloat","width","background","thumbMove","thumbUp","removeEventListener","clearInterval","playedTime","volumeBar","volumeBarWrap","volumeicon","barHeight","clientY","volume","muted","className","loopEle","list","index","_this3","indexMusic","backgroundImage","createElement","src","url","preload","buffered","end","height","lrcHTML","_this4","paused","setTimeout","setInterval","_this5","module","exports"],"mappings":"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","file":"APlayer.min.js","sourcesContent":["/**\n * APlayer constructor function\n *\n * @param {Object} option - See README\n * @constructor\n */\n(() => {\n let APlayers = [];\n\n class APlayer {\n constructor(option) {\n\n this.isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i);\n // compatibility: some mobile browsers don't suppose autoplay\n if (this.isMobile) {\n option.autoplay = false;\n }\n\n // default options\n const defaultOption = {\n element: document.getElementsByClassName('aplayer')[0],\n narrow: false,\n autoplay: false,\n mutex: true,\n showlrc: false,\n theme: '#b7daff'\n };\n for (let defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {\n option[defaultKey] = defaultOption[defaultKey];\n }\n }\n\n // multiple music\n this.playIndex = Object.prototype.toString.call(option.music) === '[object Array]' ? 0 : -1;\n\n this.option = option;\n this.audios = [];\n this.loop = true;\n\n /**\n * Parse second to 00:00 format\n *\n * @param {Number} second\n * @return {String} 00:00 format\n */\n this.secondToTime = (second) => {\n const add0 = (num) => {\n return num < 10 ? '0' + num : '' + num;\n };\n const min = parseInt(second / 60);\n const sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n };\n\n /**\n * Parse lrc, suppose multiple time tag\n *\n * @param {Array} arr - Format:\n * [mm:ss.xx]lyric\n * [mm:ss.xxx]lyric\n * [mm:ss.xx][mm:ss.xx][mm:ss.xx]lyric\n *\n * @return {Array} [[[time, text], [time, text], [time, text], ...], [[time, text], [time, text], [time, text], ...], ...]\n */\n this.parseLrc = (arr) => {\n let lrcs = [];\n for (let k = 0; k < arr.length; k++) {\n const lyric = arr[k].split('\\n');\n let lrc = [];\n const lyricLen = lyric.length;\n for (let i = 0; i < lyricLen; i++) {\n // match lrc time\n const lrcTimes = lyric[i].match(/\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/g);\n // match lrc text\n const lrcText = lyric[i].replace(/\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/g, '').replace(/^\\s+|\\s+$/g, '');\n\n if (lrcTimes != null) {\n // handle multiple time tag\n const timeLen = lrcTimes.length;\n for (let j = 0; j < timeLen; j++) {\n const oneTime = /\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/.exec(lrcTimes[j]);\n const lrcTime = (oneTime[1]) * 60 + parseInt(oneTime[2]) + parseInt(oneTime[3]) / ((oneTime[3] + '').length === 2 ? 100 : 1000);\n lrc.push([lrcTime, lrcText]);\n }\n }\n }\n // sort by time\n lrc.sort((a, b) => a[0] - b[0]);\n lrcs.push(lrc);\n }\n return lrcs;\n };\n\n /**\n * Update progress bar, including loading progress bar and play progress bar\n *\n * @param {String} type - Point out which bar it is, should be played loaded or volume\n * @param {Number} percentage\n * @param {String} direction - Point out the direction of this bar, Should be height or width\n */\n this.updateBar = (type, percentage, direction) => {\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this[type + 'Bar'].style[direction] = percentage * 100 + '%';\n };\n\n /**\n * Update lrc\n *\n * @param {Number} currentTime\n */\n this.updateLrc = (currentTime = this.audio.currentTime) => {\n if (this.lrcIndex > this.lrc.length - 1 || currentTime < this.lrc[this.lrcIndex][0] || (!this.lrc[this.lrcIndex + 1] || currentTime >= this.lrc[this.lrcIndex + 1][0])) {\n for (let i = 0; i < this.lrc.length; i++) {\n if (currentTime >= this.lrc[i][0] && (!this.lrc[i + 1] || currentTime < this.lrc[i + 1][0])) {\n this.lrcIndex = i;\n this.lrcContents.style.transform = `translateY(${-this.lrcIndex * 20}px)`;\n this.lrcContents.style.webkitTransform = `translateY(${-this.lrcIndex * 20}px)`;\n this.lrcContents.getElementsByClassName('aplayer-lrc-current')[0].classList.remove('aplayer-lrc-current');\n this.lrcContents.getElementsByTagName('p')[i].classList.add('aplayer-lrc-current');\n }\n }\n }\n };\n }\n\n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n this.music = this.playIndex > -1 ? this.option.music[this.playIndex] : this.option.music;\n\n let i;\n // parser lrc\n if (this.option.showlrc) {\n let lrcs = [];\n for (i = 0; i < this.element.getElementsByClassName('aplayer-lrc-content').length; i++) {\n lrcs.push(this.element.getElementsByClassName('aplayer-lrc-content')[i].innerHTML);\n }\n this.lrcs = this.parseLrc(lrcs);\n }\n\n // add class aplayer-withlrc\n if (this.option.showlrc) {\n this.element.classList.add('aplayer-withlrc');\n }\n\n // fill in HTML\n let eleHTML = `\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n - 00:00 / 00:00\n
\n \n
\n
\n
\n
\n
\n
\n ${(this.playIndex > -1 ? `` : ``)}\n
\n
\n
`;\n if (this.playIndex > -1) {\n eleHTML += `\n
\n
    `;\n for (i = 0; i < this.option.music.length; i++) {\n eleHTML += `\n
  1. \n \n ${(i + 1)}\n ${this.option.music[i].title}\n ${this.option.music[i].author}\n
  2. `\n }\n eleHTML += `\n
\n
`\n }\n this.element.innerHTML = eleHTML;\n\n if (this.element.getElementsByClassName('aplayer-info')[0].offsetWidth < 200) {\n this.element.getElementsByClassName('aplayer-time')[0].classList.add('aplayer-time-narrow');\n }\n // fix the width of aplayer bar\n this.element.getElementsByClassName('aplayer-bar-wrap')[0].style.marginRight = this.element.getElementsByClassName('aplayer-time')[0].offsetWidth + 5 + 'px';\n\n // switch to narrow style\n if (this.option.narrow) {\n this.element.classList.add('aplayer-narrow');\n }\n\n // play and pause button\n this.button = this.element.getElementsByClassName('aplayer-button')[0];\n this.button.addEventListener('click', (e) => {\n if (this.button.classList.contains('aplayer-play')) {\n this.play();\n }\n else if (this.button.classList.contains('aplayer-pause')) {\n this.pause();\n }\n });\n\n // click music list: change music\n if (this.playIndex > -1) {\n const listItem = this.element.getElementsByClassName('aplayer-list')[0].getElementsByTagName('li');\n for (let i = 0; i < this.option.music.length; i++) {\n listItem[i].addEventListener('click', () => {\n const musicIndex = parseInt(listItem[i].getElementsByClassName('aplayer-list-index')[0].innerHTML) - 1;\n if (musicIndex !== this.playIndex) {\n this.setMusic(musicIndex);\n }\n this.play();\n });\n }\n }\n\n // control play progress\n this.playedBar = this.element.getElementsByClassName('aplayer-played')[0];\n this.loadedBar = this.element.getElementsByClassName('aplayer-loaded')[0];\n this.thumb = this.element.getElementsByClassName('aplayer-thumb')[0];\n this.bar = this.element.getElementsByClassName('aplayer-bar')[0];\n let barWidth;\n this.bar.addEventListener('click', (event) => {\n const e = event || window.event;\n barWidth = this.bar.clientWidth;\n const percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n });\n\n this.thumb.addEventListener('mouseover', () => {\n this.thumb.style.background = this.option.theme;\n });\n this.thumb.addEventListener('mouseout', () => {\n this.thumb.style.background = '#fff';\n });\n\n const thumbMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n if (this.option.showlrc) {\n this.updateLrc(parseFloat(this.playedBar.style.width) / 100 * this.audio.duration);\n }\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n };\n\n const thumbUp = () => {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n this.play();\n };\n\n this.thumb.addEventListener('mousedown', () => {\n barWidth = this.bar.clientWidth;\n clearInterval(this.playedTime);\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n // control volume\n this.volumeBar = this.element.getElementsByClassName('aplayer-volume')[0];\n const volumeBarWrap = this.element.getElementsByClassName('aplayer-volume-bar')[0];\n const volumeicon = this.element.getElementsByClassName('aplayer-time')[0].getElementsByTagName('i')[0];\n const barHeight = 35;\n this.element.getElementsByClassName('aplayer-volume-bar-wrap')[0].addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (barHeight - e.clientY + getElementViewTop(volumeBarWrap)) / barHeight;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'height');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n if (percentage === 1) {\n volumeicon.className = 'demo-icon aplayer-icon-volume-up';\n }\n else {\n volumeicon.className = 'demo-icon aplayer-icon-volume-down';\n }\n });\n volumeicon.addEventListener('click', () => {\n if (this.audio.muted) {\n this.audio.muted = false;\n volumeicon.className = this.audio.volume === 1 ? 'demo-icon aplayer-icon-volume-up' : 'demo-icon aplayer-icon-volume-down';\n this.updateBar('volume', this.audio.volume, 'height');\n }\n else {\n this.audio.muted = true;\n volumeicon.className = 'demo-icon aplayer-icon-volume-off';\n this.updateBar('volume', 0, 'height');\n }\n });\n\n // get element's view position\n function getElementViewLeft(element) {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n }\n\n function getElementViewTop(element) {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n }\n\n // loop control\n const loopEle = this.element.getElementsByClassName('aplayer-icon-loop')[0];\n loopEle.addEventListener('click', () => {\n if (this.loop) {\n loopEle.classList.add('aplayer-noloop');\n this.loop = false;\n this.audio.loop = this.playIndex > -1 ? false : this.loop;\n }\n else {\n loopEle.classList.remove('aplayer-noloop');\n this.loop = true;\n this.audio.loop = this.playIndex > -1 ? false : this.loop;\n }\n });\n\n // toggle menu control\n if (this.playIndex > -1) {\n this.element.getElementsByClassName('aplayer-icon-menu')[0].addEventListener('click', () => {\n const list = this.element.getElementsByClassName('aplayer-list')[0];\n if (!list.classList.contains('aplayer-list-hide')) {\n list.classList.add('aplayer-list-hide');\n }\n else {\n list.classList.remove('aplayer-list-hide');\n }\n });\n }\n\n this.setMusic(0);\n\n APlayers.push(this);\n };\n\n /**\n * Set music\n */\n setMusic(index) {\n // get this.music\n if (this.playIndex > -1 && typeof(index) !== 'undefined') {\n this.playIndex = index;\n }\n const indexMusic = this.playIndex;\n this.music = this.playIndex > -1 ? this.option.music[indexMusic] : this.option.music;\n\n // set html\n if (this.music.pic) {\n this.element.getElementsByClassName('aplayer-pic')[0].style.backgroundImage = `url(${encodeURI(this.music.pic)})`;\n }\n this.element.getElementsByClassName('aplayer-title')[0].innerHTML = this.music.title;\n this.element.getElementsByClassName('aplayer-author')[0].innerHTML = ` - ${this.music.author}`;\n if (this.playIndex > -1) {\n if (this.element.getElementsByClassName('aplayer-list-light')[0]) {\n this.element.getElementsByClassName('aplayer-list-light')[0].classList.remove('aplayer-list-light');\n }\n this.element.getElementsByClassName('aplayer-list')[0].getElementsByTagName('li')[indexMusic].classList.add('aplayer-list-light');\n }\n\n // set the previous audio object\n if (this.audio) {\n this.pause();\n this.audio.currentTime = 0;\n }\n\n // get this audio object\n if ((this.playIndex > -1 && !this.audios[indexMusic]) || this.playIndex === -1) {\n this.audio = document.createElement(\"audio\");\n this.audio.src = this.music.url;\n this.audio.preload = this.isMobile ? 'none' : 'metadata';\n\n // show audio time\n this.audio.addEventListener('durationchange', () => {\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('aplayer-dtime')[0].innerHTML = this.secondToTime(this.audio.duration);\n }\n });\n\n // show audio loaded bar\n this.audio.addEventListener('progress', () => {\n const percentage = this.audio.buffered.length ? this.audio.buffered.end(this.audio.buffered.length - 1) / this.audio.duration : 0;\n this.updateBar('loaded', percentage, 'width');\n });\n\n // audio download error\n this.audio.addEventListener('error', () => {\n this.element.getElementsByClassName('aplayer-author')[0].innerHTML = ` - Error happens ╥﹏╥`;\n });\n\n // multiple music play\n if (this.playIndex > -1) {\n this.audio.addEventListener('ended', () => {\n if (this.playIndex < this.option.music.length - 1) {\n this.setMusic(++this.playIndex);\n }\n else if (this.loop) {\n this.setMusic(0);\n }\n else if (!this.loop) {\n this.pause();\n }\n });\n }\n else {\n this.audio.addEventListener('ended', () => {\n if (!this.loop) {\n this.pause();\n }\n });\n }\n\n // control volume\n this.audio.volume = parseInt(this.element.getElementsByClassName('aplayer-volume')[0].style.height) / 100;\n\n // loop\n this.audio.loop = this.playIndex > -1 ? false : this.loop;\n\n if (this.playIndex > -1) {\n this.audios[indexMusic] = this.audio;\n }\n }\n else {\n this.audio = this.audios[indexMusic];\n this.audio.volume = parseInt(this.element.getElementsByClassName('aplayer-volume')[0].style.height) / 100;\n this.audio.currentTime = 0;\n }\n\n // fill in lrc\n if (this.option.showlrc) {\n this.lrc = this.playIndex > -1 ? this.lrcs[indexMusic] : this.lrcs[0];\n let lrcHTML = '';\n this.lrcContents = this.element.getElementsByClassName('aplayer-lrc-contents')[0];\n for (let i = 0; i < this.lrc.length; i++) {\n lrcHTML += `

${this.lrc[i][1]}

`;\n }\n this.lrcContents.innerHTML = lrcHTML;\n if (!this.lrcIndex) {\n this.lrcIndex = 0;\n }\n this.lrcContents.getElementsByTagName('p')[0].classList.add('aplayer-lrc-current');\n this.lrcContents.style.transform = 'translateY(0px)';\n this.lrcContents.style.webkitTransform = 'translateY(0px)';\n }\n\n // set duration time\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('aplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00';\n }\n\n // autoplay\n if (this.option.autoplay && !this.isMobile) {\n this.play();\n }\n this.option.autoplay = true; // autoplay next music\n\n if (this.isMobile) {\n this.pause();\n }\n };\n\n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.button.classList.remove('aplayer-play');\n this.button.classList.add('aplayer-pause');\n this.button.innerHTML = '';\n setTimeout(() => {\n this.button.innerHTML = '';\n }, 100);\n\n // pause other players (Thanks @Aprikyblue)\n if (this.option.mutex) {\n for (let i = 0; i < APlayers.length; i++) {\n if (this != APlayers[i]) {\n APlayers[i].pause();\n }\n }\n }\n this.audio.play();\n if (this.playedTime) {\n clearInterval(this.playedTime);\n }\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n if (this.option.showlrc) {\n this.updateLrc();\n }\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime);\n }, 100);\n }\n };\n\n /**\n * Pause music\n */\n pause() {\n if (!this.audio.paused) {\n this.button.classList.remove('aplayer-pause');\n this.button.classList.add('aplayer-play');\n this.button.innerHTML = '';\n setTimeout(() => {\n this.button.innerHTML = '';\n }, 100);\n this.audio.pause();\n clearInterval(this.playedTime);\n }\n };\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = APlayer\n }\n else {\n window.APlayer = APlayer;\n }\n})();"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["APlayer.js"],"names":["_classCallCheck","instance","Constructor","TypeError","_createClass","defineProperties","target","props","i","length","descriptor","enumerable","configurable","writable","Object","defineProperty","key","protoProps","staticProps","prototype","APlayers","APlayer","option","_this","this","isMobile","navigator","userAgent","match","autoplay","defaultOption","element","document","getElementsByClassName","narrow","mutex","showlrc","theme","defaultKey","hasOwnProperty","playIndex","toString","call","music","audios","loop","secondToTime","second","add0","num","min","parseInt","sec","parseLrc","arr","lrcs","k","lyric","split","lrc","lyricLen","lrcTimes","lrcText","replace","timeLen","j","oneTime","exec","lrcTime","push","sort","a","b","updateBar","type","percentage","direction","style","updateLrc","currentTime","arguments","undefined","audio","lrcIndex","lrcContents","transform","webkitTransform","classList","remove","getElementsByTagName","add","value","getElementViewLeft","actualLeft","offsetLeft","current","offsetParent","elementScrollLeft","body","scrollLeft","documentElement","getElementViewTop","actualTop","offsetTop","elementScrollTop","scrollTop","_this2","multiple","innerHTML","eleHTML","pic","encodeURI","title","author","offsetWidth","marginRight","button","addEventListener","e","contains","play","pause","listItem","_loop","_i","musicIndex","setMusic","playedBar","loadedBar","thumb","bar","barWidth","event","window","clientWidth","clientX","duration","parseFloat","width","background","thumbMove","thumbUp","removeEventListener","clearInterval","playedTime","volumeBar","volumeBarWrap","volumeicon","barHeight","clientY","volume","muted","className","loopEle","list","index","_this3","indexMusic","backgroundImage","createElement","src","url","preload","buffered","end","height","lrcHTML","_this4","paused","setTimeout","setInterval","_this5","module","exports"],"mappings":"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","file":"APlayer.min.js","sourcesContent":["/**\n * APlayer constructor function\n *\n * @param {Object} option - See README\n * @constructor\n */\n(() => {\n let APlayers = [];\n\n class APlayer {\n constructor(option) {\n\n this.isMobile = navigator.userAgent.match(/(iPad)|(iPhone)|(iPod)|(android)|(webOS)/i);\n // compatibility: some mobile browsers don't suppose autoplay\n if (this.isMobile) {\n option.autoplay = false;\n }\n\n // default options\n const defaultOption = {\n element: document.getElementsByClassName('aplayer')[0],\n narrow: false,\n autoplay: false,\n mutex: true,\n showlrc: 0,\n theme: '#b7daff'\n };\n for (let defaultKey in defaultOption) {\n if (defaultOption.hasOwnProperty(defaultKey) && !option.hasOwnProperty(defaultKey)) {\n option[defaultKey] = defaultOption[defaultKey];\n }\n }\n\n // multiple music\n this.playIndex = Object.prototype.toString.call(option.music) === '[object Array]' ? 0 : -1;\n\n this.option = option;\n this.audios = [];\n this.loop = true;\n\n /**\n * Parse second to 00:00 format\n *\n * @param {Number} second\n * @return {String} 00:00 format\n */\n this.secondToTime = (second) => {\n const add0 = (num) => {\n return num < 10 ? '0' + num : '' + num;\n };\n const min = parseInt(second / 60);\n const sec = parseInt(second - min * 60);\n return add0(min) + ':' + add0(sec);\n };\n\n /**\n * Parse lrc, suppose multiple time tag\n *\n * @param {Array} arr - Format:\n * [mm:ss.xx]lyric\n * [mm:ss.xxx]lyric\n * [mm:ss.xx][mm:ss.xx][mm:ss.xx]lyric\n *\n * @return {Array} [[[time, text], [time, text], [time, text], ...], [[time, text], [time, text], [time, text], ...], ...]\n */\n this.parseLrc = (arr) => {\n let lrcs = [];\n for (let k = 0; k < arr.length; k++) {\n const lyric = arr[k].split('\\n');\n let lrc = [];\n const lyricLen = lyric.length;\n for (let i = 0; i < lyricLen; i++) {\n // match lrc time\n const lrcTimes = lyric[i].match(/\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/g);\n // match lrc text\n const lrcText = lyric[i].replace(/\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/g, '').replace(/^\\s+|\\s+$/g, '');\n\n if (lrcTimes != null) {\n // handle multiple time tag\n const timeLen = lrcTimes.length;\n for (let j = 0; j < timeLen; j++) {\n const oneTime = /\\[(\\d{2}):(\\d{2})\\.(\\d{2,3})]/.exec(lrcTimes[j]);\n const lrcTime = (oneTime[1]) * 60 + parseInt(oneTime[2]) + parseInt(oneTime[3]) / ((oneTime[3] + '').length === 2 ? 100 : 1000);\n lrc.push([lrcTime, lrcText]);\n }\n }\n }\n // sort by time\n lrc.sort((a, b) => a[0] - b[0]);\n lrcs.push(lrc);\n }\n return lrcs;\n };\n\n /**\n * Update progress bar, including loading progress bar and play progress bar\n *\n * @param {String} type - Point out which bar it is, should be played loaded or volume\n * @param {Number} percentage\n * @param {String} direction - Point out the direction of this bar, Should be height or width\n */\n this.updateBar = (type, percentage, direction) => {\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this[type + 'Bar'].style[direction] = percentage * 100 + '%';\n };\n\n /**\n * Update lrc\n *\n * @param {Number} currentTime\n */\n this.updateLrc = (currentTime = this.audio.currentTime) => {\n if (this.lrcIndex > this.lrc.length - 1 || currentTime < this.lrc[this.lrcIndex][0] || (!this.lrc[this.lrcIndex + 1] || currentTime >= this.lrc[this.lrcIndex + 1][0])) {\n for (let i = 0; i < this.lrc.length; i++) {\n if (currentTime >= this.lrc[i][0] && (!this.lrc[i + 1] || currentTime < this.lrc[i + 1][0])) {\n this.lrcIndex = i;\n this.lrcContents.style.transform = `translateY(${-this.lrcIndex * 20}px)`;\n this.lrcContents.style.webkitTransform = `translateY(${-this.lrcIndex * 20}px)`;\n this.lrcContents.getElementsByClassName('aplayer-lrc-current')[0].classList.remove('aplayer-lrc-current');\n this.lrcContents.getElementsByTagName('p')[i].classList.add('aplayer-lrc-current');\n }\n }\n }\n };\n }\n\n /**\n * AutoLink initialization function\n */\n init() {\n this.element = this.option.element;\n this.multiple = this.playIndex > -1;\n this.music = this.multiple ? this.option.music[this.playIndex] : this.option.music;\n\n let i;\n // parser lrc\n if (this.option.showlrc) {\n let lrcs = [];\n if (this.option.showlrc === 1) {\n if (this.multiple) {\n for (i = 0; i < this.option.music.length; i++) {\n lrcs.push(this.option.music[i].lrc);\n }\n }\n else {\n lrcs.push(this.option.music.lrc);\n }\n }\n else if (this.option.showlrc === 2 || this.option.showlrc === true) {\n for (i = 0; i < this.element.getElementsByClassName('aplayer-lrc-content').length; i++) {\n lrcs.push(this.element.getElementsByClassName('aplayer-lrc-content')[i].innerHTML);\n }\n }\n\n this.lrcs = this.parseLrc(lrcs);\n }\n\n // add class aplayer-withlrc\n if (this.option.showlrc) {\n this.element.classList.add('aplayer-withlrc');\n }\n\n // fill in HTML\n let eleHTML = `\n
\n
\n \n
\n
\n
\n
\n \n \n
\n
\n
\n
\n
\n
\n
\n
\n
\n \n
\n
\n
\n
\n - 00:00 / 00:00\n
\n \n
\n
\n
\n
\n
\n
\n ${(this.multiple ? `` : ``)}\n
\n
\n
`;\n if (this.multiple) {\n eleHTML += `\n
\n
    `;\n for (i = 0; i < this.option.music.length; i++) {\n eleHTML += `\n
  1. \n \n ${(i + 1)}\n ${this.option.music[i].title}\n ${this.option.music[i].author}\n
  2. `\n }\n eleHTML += `\n
\n
`\n }\n this.element.innerHTML = eleHTML;\n\n if (this.element.getElementsByClassName('aplayer-info')[0].offsetWidth < 200) {\n this.element.getElementsByClassName('aplayer-time')[0].classList.add('aplayer-time-narrow');\n }\n // fix the width of aplayer bar\n this.element.getElementsByClassName('aplayer-bar-wrap')[0].style.marginRight = this.element.getElementsByClassName('aplayer-time')[0].offsetWidth + 5 + 'px';\n\n // switch to narrow style\n if (this.option.narrow) {\n this.element.classList.add('aplayer-narrow');\n }\n\n // play and pause button\n this.button = this.element.getElementsByClassName('aplayer-button')[0];\n this.button.addEventListener('click', (e) => {\n if (this.button.classList.contains('aplayer-play')) {\n this.play();\n }\n else if (this.button.classList.contains('aplayer-pause')) {\n this.pause();\n }\n });\n\n // click music list: change music\n if (this.multiple) {\n const listItem = this.element.getElementsByClassName('aplayer-list')[0].getElementsByTagName('li');\n for (let i = 0; i < this.option.music.length; i++) {\n listItem[i].addEventListener('click', () => {\n const musicIndex = parseInt(listItem[i].getElementsByClassName('aplayer-list-index')[0].innerHTML) - 1;\n if (musicIndex !== this.playIndex) {\n this.setMusic(musicIndex);\n }\n this.play();\n });\n }\n }\n\n // control play progress\n this.playedBar = this.element.getElementsByClassName('aplayer-played')[0];\n this.loadedBar = this.element.getElementsByClassName('aplayer-loaded')[0];\n this.thumb = this.element.getElementsByClassName('aplayer-thumb')[0];\n this.bar = this.element.getElementsByClassName('aplayer-bar')[0];\n let barWidth;\n this.bar.addEventListener('click', (event) => {\n const e = event || window.event;\n barWidth = this.bar.clientWidth;\n const percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n this.updateBar('played', percentage, 'width');\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n });\n\n this.thumb.addEventListener('mouseover', () => {\n this.thumb.style.background = this.option.theme;\n });\n this.thumb.addEventListener('mouseout', () => {\n this.thumb.style.background = '#fff';\n });\n\n const thumbMove = (event) => {\n const e = event || window.event;\n let percentage = (e.clientX - getElementViewLeft(this.bar)) / barWidth;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('played', percentage, 'width');\n if (this.option.showlrc) {\n this.updateLrc(parseFloat(this.playedBar.style.width) / 100 * this.audio.duration);\n }\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(percentage * this.audio.duration);\n };\n\n const thumbUp = () => {\n document.removeEventListener('mouseup', thumbUp);\n document.removeEventListener('mousemove', thumbMove);\n this.audio.currentTime = parseFloat(this.playedBar.style.width) / 100 * this.audio.duration;\n this.play();\n };\n\n this.thumb.addEventListener('mousedown', () => {\n barWidth = this.bar.clientWidth;\n clearInterval(this.playedTime);\n document.addEventListener('mousemove', thumbMove);\n document.addEventListener('mouseup', thumbUp);\n });\n\n // control volume\n this.volumeBar = this.element.getElementsByClassName('aplayer-volume')[0];\n const volumeBarWrap = this.element.getElementsByClassName('aplayer-volume-bar')[0];\n const volumeicon = this.element.getElementsByClassName('aplayer-time')[0].getElementsByTagName('i')[0];\n const barHeight = 35;\n this.element.getElementsByClassName('aplayer-volume-bar-wrap')[0].addEventListener('click', (event) => {\n const e = event || window.event;\n let percentage = (barHeight - e.clientY + getElementViewTop(volumeBarWrap)) / barHeight;\n percentage = percentage > 0 ? percentage : 0;\n percentage = percentage < 1 ? percentage : 1;\n this.updateBar('volume', percentage, 'height');\n this.audio.volume = percentage;\n if (this.audio.muted) {\n this.audio.muted = false;\n }\n if (percentage === 1) {\n volumeicon.className = 'demo-icon aplayer-icon-volume-up';\n }\n else {\n volumeicon.className = 'demo-icon aplayer-icon-volume-down';\n }\n });\n volumeicon.addEventListener('click', () => {\n if (this.audio.muted) {\n this.audio.muted = false;\n volumeicon.className = this.audio.volume === 1 ? 'demo-icon aplayer-icon-volume-up' : 'demo-icon aplayer-icon-volume-down';\n this.updateBar('volume', this.audio.volume, 'height');\n }\n else {\n this.audio.muted = true;\n volumeicon.className = 'demo-icon aplayer-icon-volume-off';\n this.updateBar('volume', 0, 'height');\n }\n });\n\n // get element's view position\n function getElementViewLeft(element) {\n let actualLeft = element.offsetLeft;\n let current = element.offsetParent;\n let elementScrollLeft;\n while (current !== null) {\n actualLeft += current.offsetLeft;\n current = current.offsetParent;\n }\n elementScrollLeft = document.body.scrollLeft + document.documentElement.scrollLeft;\n return actualLeft - elementScrollLeft;\n }\n\n function getElementViewTop(element) {\n let actualTop = element.offsetTop;\n let current = element.offsetParent;\n let elementScrollTop;\n while (current !== null) {\n actualTop += current.offsetTop;\n current = current.offsetParent;\n }\n elementScrollTop = document.body.scrollTop + document.documentElement.scrollTop;\n return actualTop - elementScrollTop;\n }\n\n // loop control\n const loopEle = this.element.getElementsByClassName('aplayer-icon-loop')[0];\n loopEle.addEventListener('click', () => {\n if (this.loop) {\n loopEle.classList.add('aplayer-noloop');\n this.loop = false;\n this.audio.loop = this.multiple ? false : this.loop;\n }\n else {\n loopEle.classList.remove('aplayer-noloop');\n this.loop = true;\n this.audio.loop = this.multiple ? false : this.loop;\n }\n });\n\n // toggle menu control\n if (this.multiple) {\n this.element.getElementsByClassName('aplayer-icon-menu')[0].addEventListener('click', () => {\n const list = this.element.getElementsByClassName('aplayer-list')[0];\n if (!list.classList.contains('aplayer-list-hide')) {\n list.classList.add('aplayer-list-hide');\n }\n else {\n list.classList.remove('aplayer-list-hide');\n }\n });\n }\n\n this.setMusic(0);\n\n APlayers.push(this);\n };\n\n /**\n * Set music\n */\n setMusic(index) {\n // get this.music\n if (this.multiple && typeof(index) !== 'undefined') {\n this.playIndex = index;\n }\n const indexMusic = this.playIndex;\n this.music = this.multiple ? this.option.music[indexMusic] : this.option.music;\n\n // set html\n if (this.music.pic) {\n this.element.getElementsByClassName('aplayer-pic')[0].style.backgroundImage = `url(${encodeURI(this.music.pic)})`;\n }\n this.element.getElementsByClassName('aplayer-title')[0].innerHTML = this.music.title;\n this.element.getElementsByClassName('aplayer-author')[0].innerHTML = ` - ${this.music.author}`;\n if (this.multiple) {\n if (this.element.getElementsByClassName('aplayer-list-light')[0]) {\n this.element.getElementsByClassName('aplayer-list-light')[0].classList.remove('aplayer-list-light');\n }\n this.element.getElementsByClassName('aplayer-list')[0].getElementsByTagName('li')[indexMusic].classList.add('aplayer-list-light');\n }\n\n // set the previous audio object\n if (this.audio) {\n this.pause();\n this.audio.currentTime = 0;\n }\n\n // get this audio object\n if ((this.multiple && !this.audios[indexMusic]) || this.playIndex === -1) {\n this.audio = document.createElement(\"audio\");\n this.audio.src = this.music.url;\n this.audio.preload = this.isMobile ? 'none' : 'metadata';\n\n // show audio time\n this.audio.addEventListener('durationchange', () => {\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('aplayer-dtime')[0].innerHTML = this.secondToTime(this.audio.duration);\n }\n });\n\n // show audio loaded bar\n this.audio.addEventListener('progress', () => {\n const percentage = this.audio.buffered.length ? this.audio.buffered.end(this.audio.buffered.length - 1) / this.audio.duration : 0;\n this.updateBar('loaded', percentage, 'width');\n });\n\n // audio download error\n this.audio.addEventListener('error', () => {\n this.element.getElementsByClassName('aplayer-author')[0].innerHTML = ` - Error happens ╥﹏╥`;\n });\n\n // multiple music play\n if (this.multiple) {\n this.audio.addEventListener('ended', () => {\n if (this.playIndex < this.option.music.length - 1) {\n this.setMusic(++this.playIndex);\n }\n else if (this.loop) {\n this.setMusic(0);\n }\n else if (!this.loop) {\n this.pause();\n }\n });\n }\n else {\n this.audio.addEventListener('ended', () => {\n if (!this.loop) {\n this.pause();\n }\n });\n }\n\n // control volume\n this.audio.volume = parseInt(this.element.getElementsByClassName('aplayer-volume')[0].style.height) / 100;\n\n // loop\n this.audio.loop = this.multiple ? false : this.loop;\n\n if (this.multiple) {\n this.audios[indexMusic] = this.audio;\n }\n }\n else {\n this.audio = this.audios[indexMusic];\n this.audio.volume = parseInt(this.element.getElementsByClassName('aplayer-volume')[0].style.height) / 100;\n this.audio.currentTime = 0;\n }\n\n // fill in lrc\n if (this.option.showlrc) {\n this.lrc = this.multiple ? this.lrcs[indexMusic] : this.lrcs[0];\n let lrcHTML = '';\n this.lrcContents = this.element.getElementsByClassName('aplayer-lrc-contents')[0];\n for (let i = 0; i < this.lrc.length; i++) {\n lrcHTML += `

${this.lrc[i][1]}

`;\n }\n this.lrcContents.innerHTML = lrcHTML;\n if (!this.lrcIndex) {\n this.lrcIndex = 0;\n }\n this.lrcContents.getElementsByTagName('p')[0].classList.add('aplayer-lrc-current');\n this.lrcContents.style.transform = 'translateY(0px)';\n this.lrcContents.style.webkitTransform = 'translateY(0px)';\n }\n\n // set duration time\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\n this.element.getElementsByClassName('aplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00';\n }\n\n // autoplay\n if (this.option.autoplay && !this.isMobile) {\n this.play();\n }\n this.option.autoplay = true; // autoplay next music\n\n if (this.isMobile) {\n this.pause();\n }\n };\n\n /**\n * Play music\n */\n play() {\n if (this.audio.paused) {\n this.button.classList.remove('aplayer-play');\n this.button.classList.add('aplayer-pause');\n this.button.innerHTML = '';\n setTimeout(() => {\n this.button.innerHTML = '';\n }, 100);\n\n // pause other players (Thanks @Aprikyblue)\n if (this.option.mutex) {\n for (let i = 0; i < APlayers.length; i++) {\n if (this != APlayers[i]) {\n APlayers[i].pause();\n }\n }\n }\n this.audio.play();\n if (this.playedTime) {\n clearInterval(this.playedTime);\n }\n this.playedTime = setInterval(() => {\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\n if (this.option.showlrc) {\n this.updateLrc();\n }\n this.element.getElementsByClassName('aplayer-ptime')[0].innerHTML = this.secondToTime(this.audio.currentTime);\n }, 100);\n }\n };\n\n /**\n * Pause music\n */\n pause() {\n if (!this.audio.paused) {\n this.button.classList.remove('aplayer-pause');\n this.button.classList.add('aplayer-play');\n this.button.innerHTML = '';\n setTimeout(() => {\n this.button.innerHTML = '';\n }, 100);\n this.audio.pause();\n clearInterval(this.playedTime);\n }\n };\n }\n\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\n module.exports = APlayer\n }\n else {\n window.APlayer = APlayer;\n }\n})();"],"sourceRoot":"/source/"} \ No newline at end of file diff --git a/package.json b/package.json index a5b3da6..9da9322 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "aplayer", - "version": "1.3.10", + "version": "1.4.0", "description": "Wow, such a beautiful html5 music player", "main": "dist/APlayer.min.js", "scripts": { diff --git a/src/APlayer.js b/src/APlayer.js index edebd7b..71863b6 100644 --- a/src/APlayer.js +++ b/src/APlayer.js @@ -22,7 +22,7 @@ narrow: false, autoplay: false, mutex: true, - showlrc: false, + showlrc: 0, theme: '#b7daff' }; for (let defaultKey in defaultOption) { @@ -130,15 +130,29 @@ */ init() { this.element = this.option.element; - this.music = this.playIndex > -1 ? this.option.music[this.playIndex] : this.option.music; + this.multiple = this.playIndex > -1; + this.music = this.multiple ? this.option.music[this.playIndex] : this.option.music; let i; // parser lrc if (this.option.showlrc) { let lrcs = []; - for (i = 0; i < this.element.getElementsByClassName('aplayer-lrc-content').length; i++) { - lrcs.push(this.element.getElementsByClassName('aplayer-lrc-content')[i].innerHTML); + if (this.option.showlrc === 1) { + if (this.multiple) { + for (i = 0; i < this.option.music.length; i++) { + lrcs.push(this.option.music[i].lrc); + } + } + else { + lrcs.push(this.option.music.lrc); + } } + else if (this.option.showlrc === 2 || this.option.showlrc === true) { + for (i = 0; i < this.element.getElementsByClassName('aplayer-lrc-content').length; i++) { + lrcs.push(this.element.getElementsByClassName('aplayer-lrc-content')[i].innerHTML); + } + } + this.lrcs = this.parseLrc(lrcs); } @@ -181,11 +195,11 @@ - ${(this.playIndex > -1 ? `` : ``)} + ${(this.multiple ? `` : ``)} `; - if (this.playIndex > -1) { + if (this.multiple) { eleHTML += `
    `; @@ -227,7 +241,7 @@ }); // click music list: change music - if (this.playIndex > -1) { + if (this.multiple) { const listItem = this.element.getElementsByClassName('aplayer-list')[0].getElementsByTagName('li'); for (let i = 0; i < this.option.music.length; i++) { listItem[i].addEventListener('click', () => { @@ -354,17 +368,17 @@ if (this.loop) { loopEle.classList.add('aplayer-noloop'); this.loop = false; - this.audio.loop = this.playIndex > -1 ? false : this.loop; + this.audio.loop = this.multiple ? false : this.loop; } else { loopEle.classList.remove('aplayer-noloop'); this.loop = true; - this.audio.loop = this.playIndex > -1 ? false : this.loop; + this.audio.loop = this.multiple ? false : this.loop; } }); // toggle menu control - if (this.playIndex > -1) { + if (this.multiple) { this.element.getElementsByClassName('aplayer-icon-menu')[0].addEventListener('click', () => { const list = this.element.getElementsByClassName('aplayer-list')[0]; if (!list.classList.contains('aplayer-list-hide')) { @@ -386,11 +400,11 @@ */ setMusic(index) { // get this.music - if (this.playIndex > -1 && typeof(index) !== 'undefined') { + if (this.multiple && typeof(index) !== 'undefined') { this.playIndex = index; } const indexMusic = this.playIndex; - this.music = this.playIndex > -1 ? this.option.music[indexMusic] : this.option.music; + this.music = this.multiple ? this.option.music[indexMusic] : this.option.music; // set html if (this.music.pic) { @@ -398,7 +412,7 @@ } this.element.getElementsByClassName('aplayer-title')[0].innerHTML = this.music.title; this.element.getElementsByClassName('aplayer-author')[0].innerHTML = ` - ${this.music.author}`; - if (this.playIndex > -1) { + if (this.multiple) { if (this.element.getElementsByClassName('aplayer-list-light')[0]) { this.element.getElementsByClassName('aplayer-list-light')[0].classList.remove('aplayer-list-light'); } @@ -412,7 +426,7 @@ } // get this audio object - if ((this.playIndex > -1 && !this.audios[indexMusic]) || this.playIndex === -1) { + if ((this.multiple && !this.audios[indexMusic]) || this.playIndex === -1) { this.audio = document.createElement("audio"); this.audio.src = this.music.url; this.audio.preload = this.isMobile ? 'none' : 'metadata'; @@ -436,7 +450,7 @@ }); // multiple music play - if (this.playIndex > -1) { + if (this.multiple) { this.audio.addEventListener('ended', () => { if (this.playIndex < this.option.music.length - 1) { this.setMusic(++this.playIndex); @@ -461,9 +475,9 @@ this.audio.volume = parseInt(this.element.getElementsByClassName('aplayer-volume')[0].style.height) / 100; // loop - this.audio.loop = this.playIndex > -1 ? false : this.loop; + this.audio.loop = this.multiple ? false : this.loop; - if (this.playIndex > -1) { + if (this.multiple) { this.audios[indexMusic] = this.audio; } } @@ -475,7 +489,7 @@ // fill in lrc if (this.option.showlrc) { - this.lrc = this.playIndex > -1 ? this.lrcs[indexMusic] : this.lrcs[0]; + this.lrc = this.multiple ? this.lrcs[indexMusic] : this.lrcs[0]; let lrcHTML = ''; this.lrcContents = this.element.getElementsByClassName('aplayer-lrc-contents')[0]; for (let i = 0; i < this.lrc.length; i++) {