window.onload = function(){ createlist(); setInterval(checkplay, 3000); } // Title Controller class TitleStat{ constructor( originTitle ){ this.originTitle = originTitle; // this.TempTitle = this.TargetTitle; } GlobalInterval = null; OriginTitle = document.title; TargetTitle = ""; // TempTitle = ""; // Used to determine if the title has changed SCROLL_SPEED = 1000; ActivateStat = false; getActivateStat() { return this.ActivateStat; } activate(){ this.ActivateStat = true; } deactivate() { this.ActivateStat = false; } setTargetTitle( title ){ this.TargetTitle = title; // console.log( this ); } setScrollSpeed( speed ){ this.SCROLL_SPEED = speed; } setOriginTitle( title ){ this.originTitle = title; } setTitleManual( title ){ document.title = title; } startLoop(){ this.activate(); clearInterval(this.GlobalInterval); this.TempTitle = this.TargetTitle; if ( this.TempTitle.length < 10 ){ this.noScrollTitle(); } else { window.userdefines_title = { "TempTitle": this.TargetTitle + " ", } this.GlobalInterval = setInterval(this.scorllTheTitle, this.SCROLL_SPEED); } } stopLoop(){ clearInterval(this.GlobalInterval); } reset(){ this.stopLoop(); delete window.userdefines_title; document.title = this.OriginTitle; this.deactivate(); } noScrollTitle() { console.log("使用的是非滚动标题!"); if( document.getElementById("Player").paused == false ){ document.title = "[▶️] " + this.TempTitle; }else{ document.title = "[⏸] " + this.TempTitle; } } scorllTheTitle() { // console.log("Title Scroll!"); //Debug // if ( this.TempTitle == undefined ) { // console.warn( "this.TempTitle undefined" ); // console.log( this ); // this.TempTitle = this.TargetTitle; // } // 此处的this指的是window对象 if( document.getElementById("Player").paused == false ){ document.title = "[▶️] " + this.userdefines_title.TempTitle.substring(0,20) + "..."; }else{ document.title = "[⏸] " + this.userdefines_title.TempTitle.substring(0,20) + "..."; } this.userdefines_title.TempTitle = this.userdefines_title.TempTitle.substring(1) + this.userdefines_title.TempTitle.substring(0,1); } } // Title Control // var originTitle = document.title; let TitleControl = new TitleStat(document.title); // TitleControl.setTargetTitle("Song!"); window.onblur = () => { // document.title = "Song!"; // TitleControl.setTargetTitle("Song!") console.log("您已离开播放器!"); TitleControl.setScrollSpeed(500); TitleControl.setTargetTitle(document.getElementById("nowplay").innerHTML); TitleControl.startLoop(); } window.onfocus = () => { // document.title = originTitle; console.log("您已回到播放器!"); TitleControl.reset(); } // 搜索音乐 function getsongs(){ document.getElementById("reslist").innerHTML = ""; var search = document.getElementById("search-song"); var reslist = document.getElementById("reslist"); var urls = `http://150.158.7.169:3000/search?keywords=${search.value}` var xhr = new XMLHttpRequest(); xhr.open("GET", urls); xhr.send(); xhr.onreadystatechange = function(){ if(xhr.readyState == 4 && xhr.status == 200){ //console.log(xhr.responseText); var obj = JSON.parse(xhr.responseText); //console.log(obj.result.songs); console.log(obj); var list = obj.result.songs; //for(i = 0; i < obj.result.songs.length; i++){ for(var i = 0; i < list.length; i++){ artiststr = getArtist(list[i]); console.log({"songid":list[i].id, "songname":list[i].name, "artist":artiststr}); if(list[i].fee == 0 || list[i].fee == 8){ reslist.innerHTML += `
  • ${list[i].name} - ${getArtist(list[i])}` + `` + `` + `
  • `; }else{ reslist.innerHTML += `
  • ${list[i].name} - ${getArtist(list[i])}`+ `` + `` + `
  • `; } } }else{ //alert(xhr.statusText); console.warn("WARNNING:API服务器响应失败"); } } document.getElementById("keyword").innerHTML = search.value; } // 获取艺术家 function getArtist(obj){ var artiststr = ""; var artistd = obj.artists; for(var i = 0; i < artistd.length; i++){ if(i != artistd.length - 1){ artiststr += artistd[i].name + "/"; }else{ artiststr += artistd[i].name; } } return artiststr; } // 播放音乐 function playmusic(playid, songname, artist){ document.getElementById("nowplay").innerHTML = `${songname} - ${artist}` url = `https://music.163.com/song/media/outer/url?id=${playid}.mp3`; document.getElementById("Player").setAttribute('src',url); // 选中后自动播放 document.getElementById("Player").play(); // 插入到历史记录 inserthistory(playid, songname, artist); } // 队列 -- Writtrn By Copilot & Web function Queue(){ this.items = []; Queue.prototype.nqueue = (element) => { this.items.push(element); } Queue.prototype.dequeue = () => { return this.items.shift(); } Queue.prototype.front = () => { return this.items[0]; } Queue.prototype.isEmpty = () => { return this.items.length == 0; } Queue.prototype.clear = () => { this.items = []; } Queue.prototype.size = () => { return this.items.length; } Queue.prototype.toString = () => { var str = ""; for(var i = 0; i < this.items.length; i++){ str += this.items[i] + " "; } return str; } } // 列表 function List(){ this.items = []; List.prototype.insertRear = (element) => { this.items.push(element); } List.prototype.deleteItem = (loc) => { if(loc == undefined) { return false; } this.items.splice(loc, 1); return true; } List.prototype.isEmpty = () => { return this.items.length == 0; } List.prototype.clear = () => { this.items = []; } List.prototype.size = () => { return this.items.length; } List.prototype.getElem = (loc) => { if(loc < 0 || loc == undefined){ return undefined; } if(this.isEmpty()){ return false; } return this.items[loc]; } // CodeGeeX Written List.prototype.locate = (items) => { for(var i = 0; i < this.items.length; i++){ if(items == this.items[i]){ return i; } else { return undefined; } } } List.prototype.getLength = () => { return this.items.length; } } // 创建播放列表 function createlist(){ // 构造队列 // list = new Queue(); list = new List(); nowPlay = 0; } // 添加到播放列表 function addlist(songid, songname, artist){ // list.nqueue({"songid":songid, "songname":songname, "artist":artist}); for (var i = 0; i < list.getLength(); i++) { if(list.getElem(i).songid == songid){ console.log(`${songname} - ${artist} 已存在于播放列表`); return; } } list.insertRear({"songid":songid, "songname":songname, "artist":artist}); console.log(`${songname} - ${artist} 已被加入播放列表`); } // 播放下一首 function playnext(){ if(list.isEmpty()){ console.log("音乐列表已经播放完毕了哦,快加入新的音乐吧~"); alert("音乐列表已经播放完毕了哦,快加入新的音乐吧~"); return; } // var next = list.dequeue(); if(nowPlay >= (list.size() - 1)){ nowPlay = 0; }else{ nowPlay += 1; } var next = list.getElem(nowPlay); playmusic(next.songid, next.songname, next.artist); if ( TitleControl.getActivateStat() == true ) { TitleControl.reset(); TitleControl.setTitleManual("Loading..."); TitleControl.setTargetTitle(next.songname + " - " + next.artist); TitleControl.startLoop(); } } // 检测是否播放完毕 function checkplay(){ // 为了防止播放列表结束以后一直调用playnext产生过多的alart,所以需要检测播放列表是否为空 if(!list.isEmpty()){ if(document.getElementById("Player").ended){ // 播放完毕后自动播放下一首 playnext(); } }else{ //clearInterval(checkplay); } } // 播放列表 function playthelist(){ if(list.isEmpty()){ console.log("音乐列表没有歌曲哦,快加入新的音乐吧~"); alert("音乐列表没有歌曲哦,快加入新的音乐吧~"); return; } // var next = list.dequeue(); var next = list.getElem(0); playmusic(next.songid, next.songname, next.artist); } // 获取播放列表 function getplaylist(){ //var playlist = document.getElementById("playlist"); //playlist.innerHTML = ""; var reslist = document.getElementById("reslist"); reslist.innerHTML = ""; for(var i = 0; i < list.size(); i++){ reslist.innerHTML += `
  • ${list.items[i].songname} - ${list.items[i].artist}
  • `; //console.log(`${list.items[i].songname} - ${list.items[i].artist}`); } document.getElementById('keyword').innerHTML = "当前播放列表"; } /* // -- Writtrn By Copilot function RemoveItemFromList(songid){ for(var i = 0; i < list.size(); i++){ if(list.items[i].songid == songid){ list.items.splice(i, 1); break; } } getplaylist(); } */ // 删除指定序号的音乐 -- Writtrn By Copilot function RemoveItemFromListByID(uid){ list.items.splice(uid, 1); getplaylist(); } // 插入音乐到历史记录 -- Writtrn By Copilot function inserthistory(songid, songname, artist){ // 从本地获取历史记录 var historyList = JSON.parse(localStorage.getItem("historyList")); // 判断是否有历史记录 if(historyList == null){ historyList = []; // 创建一个空数组 } var flag = false; // 标记是否已经存在 // 判断是否已经存在 for(var i = 0; i < historyList.length; i++){ // 如果已经存在,则更新播放时间 if(historyList[i].songid == songid){ flag = true; break; } } // 如果不存在,则插入 if(!flag){ // historyList.push({"songid":songid, "songname":songname, "artist":artist, "playtime":new Date().getTime()}); historyList.push({"songid":songid, "songname":songname, "artist":artist}); } // 存储到本地 localStorage.setItem("historyList", JSON.stringify(historyList)); } // 获取历史记录 -- Writtrn By Copilot function gethistory(){ var historyList = JSON.parse(localStorage.getItem("historyList")); if(historyList == null){ historyList = []; } var reslist = document.getElementById("reslist"); reslist.innerHTML = ""; for(var i = 0; i < historyList.length; i++){ reslist.innerHTML += `
  • ${historyList[i].songname} - ${historyList[i].artist}` + `` + `` + `
  • ` + ``; } document.getElementById('keyword').innerHTML = "历史记录"; } // 清空历史记录 -- Writtrn By Copilot function removehistory(){ localStorage.removeItem("historyList"); gethistory(); } // 当点击清空列表的时候进行一次确认,如果确认之后再进行删除操作。 function ClearList(){ var Choose = confirm("确定清空歌单吗?(此操作不可逆!)") if(Choose == true){ removehistory(); console.log("The History List Has been cleared."); return true; }else{ console.log("List Clear Canceled!"); return false; } } // 添加所有歌曲到播放列表 function addAllHistorytoPlayList(){ var historyList = JSON.parse(localStorage.getItem("historyList")); if(historyList == null){ historyList = []; } var reslist = document.getElementById("reslist"); reslist.innerHTML = ""; for(var i = 0; i < historyList.length; i++){ addlist(historyList[i].songid, historyList[i].songname, historyList[i].artist); console.log(`${historyList[i].songname} - ${historyList[i].artist} is add to list.`); } alert("已把历史记录插入到了播放列表"); // Planning to Code... } // 清空播放列表 function ClearthePlaylist(){ if(!list.isEmpty()){ list.clear(); console.log("List Cleared!"); }else{ console.log("List is empty, not need to clear.") } } function convertHist2CloudList(origin){ // var temp = JSON.parse(origin); var result = [] for (var i = 0; i < origin.length; i++) { result.push({ "name" : origin[i].songname, "id" : origin[i].songid, "author": origin[i].artist }); } return result; } // 推送到云播放列表 function PushToCloud(){ // Cloud Prepareing... var server_api = "http://localhost:8080/musiccloud.php?option=upload"; var xhr = new XMLHttpRequest(); var historyList = JSON.parse(localStorage.getItem("historyList")); var list_id = document.getElementById("listid").value; var msg = JSON.stringify({ "list_id": list_id, "length": historyList.length, "list": convertHist2CloudList(historyList) }); var data = new FormData(); data.append("payload", msg); xhr.open("POST", server_api, true); xhr.send(data); xhr.onreadystatechange = function(){ var obj = JSON.parse(xhr.responseText); if(obj.statusCode == 0){ alert("sucess!") console.log("Success! listID is " + obj.list_id); }else{ if(obj.statusCode == -1){ alert("This ListID has been used, please change another one."); } else { alert("Upload failed! Try yo upload again.") } console.log("Send Failed."); } } } // 拉取云播放列表 function PullToCloud(){ // Cloud Prepareing... var listid = document.getElementById("listid").value; // var server_api = `http://localhost:12345/getMusicList?listid=${listid}`; var server_api = `http://localhost:8080/musiccloud.php?option=getlist&list=${listid}`; var xhr = new XMLHttpRequest(); xhr.open("GET", server_api, true); xhr.send(); xhr.onreadystatechange = function(){ console.log(xhr.responseText); var obj = JSON.parse(xhr.responseText); console.log(obj); if(obj.statusCode == 0){ // title document.getElementById('keyword').innerHTML = `列表(${obj.list_id})`; // list var reslist = document.getElementById("reslist"); reslist.innerHTML = ""; for(var i = 0; i < obj.list.length; i++){ reslist.innerHTML += `
  • ${obj.list[i].name} - ${obj.list[i].author}` + `` + `` + `
  • `; } }else{ ; } } } function deleteCloudList(){ //code... console.log("No working...") } function deleteHistory( count ) { // get HistoryList from LocalStorage var historyList = JSON.parse( localStorage.getItem( "historyList" ) ); // is null? if( historyList == null ){ // failed } // if count is smaller than List length, throw error if ( count > historyList.length ){ console.log( "本次删除无效!\nThis deletion is invaild." ); return; } // console log output console.log(`${historyList[count].songname} - ${historyList[count].artist} (位于 ${count}) 已从历史记录删除.`) // find the item and delete it. historyList.splice( count, 1 ); // Refresh the page var reslist = document.getElementById( "reslist" ); reslist.innerHTML = ""; for( var i = 0; i < historyList.length; i++ ){ reslist.innerHTML += `
  • ${historyList[i].songname} - ${historyList[i].artist}` + `` + `` + `` + `
  • `; } document.getElementById( 'keyword' ).innerHTML = "历史记录"; // put the HistoryList back into the LocalStorage localStorage.setItem( "historyList", JSON.stringify( historyList ) ); } function jumpTo163CM( songid ) { console.log("因为没钱,所以放不了,要不你自己去官网开会员听?"); if ( confirm( "因为没钱,所以放不了,要不你自己去官网开会员听?" ) ){ window.open( 'https://music.163.com/#/song?id=' + songid ); console.log("感谢你的理解!^_^"); } else { console.log("好吧,那我也没有办法了,总之是放不了。\(sad") } }