🔖v2.4 update

修复网易云音乐无法播放
增加标题栏滚动效果(感谢@lzcykevin)
增加歌曲循环播放控制(感谢@yuxizhe)
修复百度音乐无法播放
优化连续播放失败的歌曲过多时,自动终止播放。防止卡死
压缩图片素材,限制封面图片尺寸,优化页面加载速度
master
mengkun 6 years ago
parent 1197c3b23e
commit 6fc03396ad
  1. 8
      README.MD
  2. 11
      api.php
  3. BIN
      images/album_cover_player.png
  4. BIN
      images/history.png
  5. BIN
      images/icon_list_menu.png
  6. BIN
      images/player.png
  7. BIN
      images/player_cover.png
  8. 6
      index.html
  9. 14
      js/ajax.js
  10. 10
      js/functions.js
  11. 101
      js/player.js
  12. 1276
      plugns/Meting.php

@ -77,6 +77,14 @@ php 5.4+, curl_exec, file_get_contents, json_decode, openssl_encrypt
### 更新日志
-----
#### v2.4 `2018/3/11`
- 修复网易云音乐无法播放
- 增加标题栏滚动效果(感谢@lzcykevin)
- 增加歌曲循环播放控制(感谢@yuxizhe)
- 修复百度音乐无法播放
- 优化连续播放失败的歌曲过多时,自动终止播放。防止卡死
- 压缩图片素材,限制封面图片尺寸,优化页面加载速度
#### v2.32 `2017/9/15`
- 修复播放历史记录歌曲时播放失败的 BUG
- 新增播放歌曲时浏览器标题栏显示相关信息

@ -1,9 +1,9 @@
<?php
/**************************************************
* MKOnlinePlayer v2.3
* MKOnlinePlayer v2.4
* 后台音乐数据抓取模块
* 编写:mengkun(https://mkblog.cn)
* 时间:2018-2-11
* 时间:2018-3-11
* 特别感谢 @metowolf 提供的 Meting.php
*************************************************/
@ -22,7 +22,7 @@ $netease_cookie = '';
**/
define('HTTPS', true); // 如果您的网站启用了https,请将此项置为“true”,如果你的网站未启用 https,建议将此项设置为“false”
define('HTTPS', false); // 如果您的网站启用了https,请将此项置为“true”,如果你的网站未启用 https,建议将此项设置为“false”
define('DEBUG', false); // 是否开启调试模式,正常使用时请将此项置为“false”
/*
@ -59,6 +59,11 @@ switch(getParam('types')) // 根据请求的 Api,执行相应操作
$data = $API->url($id);
if($source == 'netease' && json_decode($data, true)['url'] == '') { // 修复网易云链接获取失效(双保险)
echojson('{"url":"https://music.163.com/song/media/outer/url?id='.$id.'.mp3","br":320}');
return;
}
echojson($data);
break;

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.8 KiB

After

Width:  |  Height:  |  Size: 2.9 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.9 KiB

After

Width:  |  Height:  |  Size: 2.3 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 9.5 KiB

After

Width:  |  Height:  |  Size: 4.4 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 4.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.2 KiB

After

Width:  |  Height:  |  Size: 1.5 KiB

@ -18,7 +18,7 @@
<meta name="x5-fullscreen" content="true"><!--QQ强制全屏-->
<meta name="x5-page-mode" content="app"><!--QQ应用模式-->
<title>MKOnlinePlayer v2.3</title>
<title>MKOnlinePlayer v2.4</title>
<meta name="description" content="一款开源的基于网易云音乐api的在线音乐播放器。具有音乐搜索、播放、下载、歌词同步显示、个人音乐播放列表同步等功能。"/>
<meta name="keywords" content="孟坤播放器,在线音乐播放器,MKOnlinePlayer,网易云音乐,音乐api,音乐播放器源代码"/>
@ -51,7 +51,7 @@
<!-- 头部logo -->
<div class="header">
<div class="logo" title="Version 2.32; Based on Meting; Powered by Mengkun">
<div class="logo" title="Version 2.4; Based on Meting; Powered by Mengkun">
♫ MKOnlinePlayer
</div>
</div> <!--class="header"-->
@ -148,7 +148,7 @@
<!-- 站长统计代码 -->
<span style="display: none">
<!-- 各类统计代码都放在这里…… -->
<script src="https://s95.cnzz.com/z_stat.php?id=1261525999&web_id=1261525999" language="JavaScript"></script>
</span>
</body>

@ -1,8 +1,8 @@
/**************************************************
* MKOnlinePlayer v2.31
* MKOnlinePlayer v2.4
* Ajax 后台数据交互请求模块
* 编写mengkun(http://mkblog.cn)
* 时间2017-9-13
* 编写mengkun(https://mkblog.cn)
* 时间2018-3-11
*************************************************/
// ajax加载搜索结果
@ -188,7 +188,7 @@ function ajaxPic(music, callback)
// ajax加载用户歌单
// 参数:歌单网易云 id, 歌单存储 id,回调函数
function ajaxPlayList(lid, id, callback){
function ajaxPlayList(lid, id, callback) {
if(!lid) return false;
// 已经在加载了,跳过
@ -218,7 +218,7 @@ function ajaxPlayList(lid, id, callback){
};
if(jsonData.playlist.coverImgUrl !== '') {
tempList.cover = jsonData.playlist.coverImgUrl;
tempList.cover = jsonData.playlist.coverImgUrl + "?param=200y200";
} else {
tempList.cover = musicList[id].cover;
}
@ -235,7 +235,7 @@ function ajaxPlayList(lid, id, callback){
url_id: jsonData.playlist.tracks[i].id, // 链接ID
pic_id: null, // 封面ID
lyric_id: jsonData.playlist.tracks[i].id, // 歌词ID
pic: jsonData.playlist.tracks[i].al.picUrl, // 专辑图片
pic: jsonData.playlist.tracks[i].al.picUrl + "?param=300y300", // 专辑图片
url: null // mp3链接
};
}
@ -354,7 +354,7 @@ function ajaxUserList(uid)
tempList = {
id: jsonData.playlist[i].id, // 列表的网易云 id
name: jsonData.playlist[i].name, // 列表名字
cover: jsonData.playlist[i].coverImgUrl, // 列表封面
cover: jsonData.playlist[i].coverImgUrl + "?param=200y200", // 列表封面
creatorID: uid, // 列表创建者id
creatorName: jsonData.playlist[i].creator.nickname, // 列表创建者名字
creatorAvatar: jsonData.playlist[i].creator.avatarUrl, // 列表创建者头像

@ -1,8 +1,8 @@
/**************************************************
* MKOnlinePlayer v2.32
* MKOnlinePlayer v2.4
* 封装函数及UI交互模块
* 编写mengkun(http://mkblog.cn)
* 时间2017-9-15
* 编写mengkun(https://mkblog.cn)
* 时间2018-3-11
*************************************************/
// 判断是否是移动设备
var isMobile = {
@ -28,8 +28,9 @@ $(function(){
console.warn('播放器调试模式已开启,正常使用时请在 js/player.js 中按说明关闭调试模式');
}
rem.isMobile = isMobile.any();
rem.isMobile = isMobile.any(); // 判断是否是移动设备
rem.webTitle = document.title; // 记录页面原本的标题
rem.errCount = 0; // 连续播放失败的歌曲数归零
initProgress(); // 初始化音量条、进度条(进度条初始化要在 Audio 前,别问我为什么……)
initAudio(); // 初始化 audio 标签,事件绑定
@ -397,6 +398,7 @@ function openDownloadDialog(url, saveName)
}
var aLink = document.createElement('a');
aLink.href = url;
aLink.target = "_blank";
aLink.download = saveName || ''; // HTML5新增的属性,指定保存文件名,可以不要后缀,注意,file:///模式下不会生效
var event;
if(window.MouseEvent) event = new MouseEvent('click');

@ -1,8 +1,8 @@
/**************************************************
* MKOnlinePlayer v2.32
* MKOnlinePlayer v2.4
* 播放器主功能模块
* 编写mengkun(https://mkblog.cn)
* 时间2018-2-11
* 时间2018-3-11
*************************************************/
// 播放器功能配置
var mkPlayer = {
@ -16,7 +16,7 @@ var mkPlayer = {
dotshine: true, // 是否开启播放进度条的小点闪动效果[不支持IE](true/false) *开启后会有些卡
mdotshine: false, // 是否开启[移动端]播放进度条的小点闪动效果[不支持IE](true/false)
volume: 0.6, // 默认音量值(0~1之间)
version: "v2.32", // 播放器当前版本号(仅供调试)
version: "v2.4", // 播放器当前版本号(仅供调试)
debug: false // 是否开启调试模式(true/false)
};
@ -36,8 +36,14 @@ function audioErr() {
// 没播放过,直接跳过
if(rem.playlist === undefined) return true;
layer.msg('当前歌曲播放失败,自动播放下一首');
nextMusic(); // 切换下一首歌
if(rem.errCount > 10) { // 连续播放失败的歌曲过多
layer.msg('似乎出了点问题~播放已停止');
rem.errCount = 0;
} else {
rem.errCount++; // 记录连续播放失败的歌曲数目
layer.msg('当前歌曲播放失败,自动播放下一首');
nextMusic(); // 切换下一首歌
}
}
// 点击暂停按钮的事件
@ -62,29 +68,29 @@ function pause() {
// 循环顺序
function orderChange() {
if(!rem.order){
rem.order = 2
}
rem.order++;
if(rem.order > 3){
rem.order = 1
}
var orderDiv = $(".btn-order")
orderDiv.removeClass()
if ( 1 === rem.order ) {
orderDiv.addClass("player-btn btn-order btn-order-single")
orderDiv.attr("title","单曲循环")
}
else if ( 2 === rem.order ) {
orderDiv.addClass("player-btn btn-order btn-order-list")
orderDiv.attr("title","列表循环")
}
else if ( 3 === rem.order ) {
orderDiv.addClass("player-btn btn-order btn-order-random")
orderDiv.attr("title","随机播放")
}
if(!rem.order) rem.order = 2;
rem.order++;
if(rem.order > 3) rem.order = 1;
var orderDiv = $(".btn-order");
orderDiv.removeClass();
switch(rem.order) {
case 1: // 单曲循环
orderDiv.addClass("player-btn btn-order btn-order-single");
orderDiv.attr("title","单曲循环");
break;
case 3: // 随机播放
orderDiv.addClass("player-btn btn-order btn-order-random");
orderDiv.attr("title","随机播放");
break;
default: // 顺序播放
orderDiv.addClass("player-btn btn-order btn-order-list");
orderDiv.attr("title","列表循环");
}
}
// 播放
function audioPlay() {
rem.paused = false; // 更新状态(未暂停)
@ -142,28 +148,28 @@ function prevMusic() {
// 播放下一首歌
function nextMusic() {
switch (rem.order ? rem.order : 1) {
case 1,2:
playList(rem.playid + 1);
break;
case 3:
if (musicList[1] && musicList[1].item.length) {
var id = parseInt(Math.random() * musicList[1].item.length)
playList(id);
}
break;
default:
playList(rem.playid + 1);
break;
}
switch (rem.order ? rem.order : 1) {
case 1,2:
playList(rem.playid + 1);
break;
case 3:
if (musicList[1] && musicList[1].item.length) {
var id = parseInt(Math.random() * musicList[1].item.length);
playList(id);
}
break;
default:
playList(rem.playid + 1);
break;
}
}
// 自动播放时的下一首歌
function autoNextMusic() {
if(rem.order && rem.order === 1) {
playList(rem.playid);
} else {
nextMusic()
}
if(rem.order && rem.order === 1) {
playList(rem.playid);
} else {
nextMusic();
}
}
// 歌曲时间变动回调函数
@ -328,6 +334,7 @@ function play(music) {
return;
}
rem.errCount = 0; // 连续播放失败的歌曲数归零
music_bar.goto(0); // 进度条强制归零
changeCover(music); // 更新封面展示
ajaxLyric(music, lyricCallback); // ajax加载歌词
@ -337,7 +344,7 @@ function play(music) {
// 我的要求并不高,保留这一句版权信息可好?
// 保留了,你不会损失什么;而保留版权,是对作者最大的尊重。
console.info('欢迎使用 MKOnlinePlayer!\n当前版本:'+mkPlayer.version+' \n作者:mengkun(http://mkblog.cn)\n歌曲来源于各大音乐平台\nGithub:https://github.com/mengkunsoft/MKOnlineMusicPlayer');
console.info('欢迎使用 MKOnlinePlayer!\n当前版本:'+mkPlayer.version+' \n作者:mengkun(https://mkblog.cn)\n歌曲来源于各大音乐平台\nGithub:https://github.com/mengkunsoft/MKOnlineMusicPlayer');
// 音乐进度条拖动回调函数
function mBcallback(newVal) {

File diff suppressed because it is too large Load Diff
Loading…
Cancel
Save