From 5316a0c97f81ffd4c6d1b1a616659d320833c547 Mon Sep 17 00:00:00 2001 From: Corps Qiu Date: Sat, 24 Dec 2016 23:47:42 +0800 Subject: [PATCH] fix the problem of progressLine --- demo/cplayer.css | 1 + demo/cplayer.js | 188 ++++++++++++++++++++++++------------------- demo/cplayer.js.map | 2 +- demo/cplayer.min.css | 2 +- demo/cplayer.min.js | 2 +- demo/index.html | 1 + dist/cplayer.css | 1 + dist/cplayer.js | 188 ++++++++++++++++++++++++------------------- dist/cplayer.js.map | 2 +- dist/cplayer.min.css | 2 +- dist/cplayer.min.js | 2 +- gulpfile.js | 12 ++- package.json | 2 +- src/js/cplayer.js | 173 ++++++++++++++++++++++----------------- 14 files changed, 326 insertions(+), 252 deletions(-) diff --git a/demo/cplayer.css b/demo/cplayer.css index 45ebd04..b3e096c 100644 --- a/demo/cplayer.css +++ b/demo/cplayer.css @@ -339,6 +339,7 @@ c-player .controls .c-right .volume { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; + -ms-grid-row-align: center; align-items: center; cursor: pointer; -webkit-transition: width 0.2s; diff --git a/demo/cplayer.js b/demo/cplayer.js index 32b8359..b0d283e 100644 --- a/demo/cplayer.js +++ b/demo/cplayer.js @@ -187,10 +187,12 @@ var cPlayer = function () { "name": this.CBASE.getByClass("music-name"), "artist": this.CBASE.getByClass("music-artist"), "time": this.CBASE.getByClass("time"), + "timeBody": this.CBASE.getByClass("time-body"), "timeLine": this.CBASE.getByClass("time-line"), "timePoint": this.CBASE.getByClass("time-point"), "lyricPower": this.CBASE.getByClass("lyric-power"), "volumePower": this.CBASE.getByClass("volume-power"), + "volumeBody": this.CBASE.getByClass("volume-body"), "volumeLine": this.CBASE.getByClass("volume-line"), "volumePoint": this.CBASE.getByClass("volume-point"), "listPower": this.CBASE.getByClass("list-power"), @@ -200,6 +202,98 @@ var cPlayer = function () { this.__LIST__.toggleIcon = this.CBASE.getByTagName("svg", this.__LIST__.toggle); this.__LIST__.volumeIcon = this.CBASE.getByTagName("svg", this.__LIST__.volumePower); + var that = this;function dragPercentage(options) { + /* + While anything... + rightTarget(if.it.possible)[ + 0 -> sth.point + 1 -> sth.line + 2 -> sth.point & sth.line & sth.body + ] + */ + var rightTarget = []; + rightTarget.push(options.target === that.__LIST__.timePoint || options.target === that.__LIST__.volumePoint); //Check if the focus of mouse is the `point circle` + rightTarget.push(options.target === that.__LIST__.timeLine || options.target === that.__LIST__.volumeLine); + rightTarget.push(options.target === that.__LIST__.timePoint || options.target === that.__LIST__.volumePoint || options.target === that.__LIST__.timeBody || options.target === that.__LIST__.volumeBody || options.target === that.__LIST__.timeLine || options.target === that.__LIST__.volumeLine); + if (!rightTarget[2]) return; + that.dragging.contain = true; + that.dragging.target = options.target; + if (rightTarget[0]) window.addEventListener("mousemove", function mover(options) { + if (that.dragging.contain === false) return; + if (!rightTarget[0]) return; + parent = that.dragging.target.parentNode.parentNode; + if (parent.classList && parent.classList.contains("volume-body")) { + that.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } else if (parent.classList && parent.classList.contains("time-body")) { + that.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } + //实时修正VOLUME + if (parent.classList.contains("volume-body")) { + var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } + window.addEventListener("mouseup", function upper(options) { + if (that.dragging.contain === false) return; + /* + While anything... + sth.body -> self + sth.line -> parent + sth.point-> parent.parent + */ + if (false) {} else if (rightTarget[0]) { + parent = that.dragging.target.parentNode.parentNode; + } else if (rightTarget[1]) { + parent = that.dragging.target.parentNode; + } else if (rightTarget[2]) { + parent = that.dragging.target; + } else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + var _vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + _vol = _vol > 1 ? 1 : _vol; + _vol = _vol < 0 ? 0 : _vol; + that.music.volume = _vol; + } else if (parent.classList.contains("time-body")) { + var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup", upper); + window.removeEventListener("mousemove", mover); + }); + }); + if (!rightTarget[0]) window.addEventListener("mouseup", function upper(options) { + if (that.dragging.contain === false) return; + if (false) {} else if (rightTarget[0]) { + parent = that.dragging.target.parentNode.parentNode; + } else if (rightTarget[1]) { + parent = that.dragging.target.parentNode; + } else if (rightTarget[2]) { + parent = that.dragging.target; + } else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } else if (parent.classList.contains("time-body")) { + var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup", upper); + }); + } + this.music = document.createElement("audio"); this.music.autoplay = !!this.options.autoplay; //绑定事件开始: @@ -288,83 +382,20 @@ var cPlayer = function () { this.music.addEventListener("ended", function () { return _this.emitter.emit("ended"); }); - //以下内容不适合使用cEmitter,所以就不使用了. this.options.element.addEventListener("mousedown", function (a) { - return _this.dragPercentage(a); - }); - this.options.element.addEventListener("mousemove", function (a) { - return _this.dragPercentage(a); + return dragPercentage(a); }); - this.options.element.addEventListener("mouseup", function (a) { - return _this.dragPercentage(a); - }); - //以上内容不适合使用cEmitter,所以就不使用了. - - //以下内容是为了兼容UC - if (this.music.onplay = undefined) Object.defineProperty(music, "paused", { set: function set(check) { - if (check = true) { - this.emitter.emit("pause"); - } else { - this.emitter.emit("play"); - } - } }); - //以上内容是为了兼容UC this.volume(); this.refreshList(); } _createClass(cPlayer, [{ - key: "dragPercentage", - value: function dragPercentage(options) { - var parent = void 0; - switch (options.type) { - case "mousedown": - if (!(options.target !== this.__LIST__.timePoint || options.target !== this.__LIST__.volumePoint)) return; - this.dragging.contain = true; - this.dragging.target = options.target; - break; - case "mousemove": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - this.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } else if (parent.classList.contains("time-body")) { - this.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } - //实时修正VOLUME(某人强烈要求) - if (parent.classList.contains("volume-body")) { - var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - vol = vol > 1 ? 1 : vol; - vol = vol < 0 ? 0 : vol; - this.music.volume = vol; - } - break; - case "mouseup": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - var _vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - _vol = _vol > 1 ? 1 : _vol; - _vol = _vol < 0 ? 0 : _vol; - this.music.volume = _vol; - } else if (parent.classList.contains("time-body")) { - var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - time = time > 1 ? 1 : time; - time = time < 0 ? 0 : time; - this.updateTime(time * this.music.duration); - } - this.dragging.contain = false; - this.dragging.target = undefined; - break; - } - } - }, { key: "volume", value: function volume() { var _this2 = this; - var vl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var vl = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; var checkLevel = function checkLevel() { if (_this2.music.volume === 0 || _this2.isMuted()) { @@ -402,10 +433,6 @@ var cPlayer = function () { }, { key: "play", value: function play() { - /*this.interval = setInterval(()=>{ - if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + "%"; - },500); - */ if (this.music.seeking === true) return this; this.music.play(); return this; @@ -414,7 +441,6 @@ var cPlayer = function () { key: "pause", value: function pause() { if (this.music.seeking === true) return; - //clearInterval(this.interval); this.music.pause(); return this; } @@ -447,13 +473,12 @@ var cPlayer = function () { }, { key: "toggle", value: function toggle() { - var now = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.now; + var now = arguments.length <= 0 || arguments[0] === undefined ? this.now : arguments[0]; this.emitter.emit("toggle"); var list = this.options.list[now], dom = this.__LIST__; this.music.pause(); - //if(this.music.ended)this.music.load(); var _ref = [list.image, list.name, list.artist, list.url]; dom.img.src = _ref[0]; dom.name.innerHTML = _ref[1]; @@ -463,9 +488,7 @@ var cPlayer = function () { this.transLock = false; this.refreshLyric(); if (!this.hasLyric(this.now)) this.hideLyric(); - //this.__LIST__.lyricBody.style.transform = ""; this.CBASE.style(this.__LIST__.lyricBody, "transform", ""); - //this.play(); return this; } }, { @@ -477,7 +500,7 @@ var cPlayer = function () { }, { key: "hasLyric", value: function hasLyric() { - var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var id = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; var func = arguments[1]; if (func !== undefined) func(); @@ -527,7 +550,6 @@ var cPlayer = function () { var _this3 = this; this.emitter.emit("changeList"); - //let __SELF__ = this; var list = this.options.list, lb = this.__LIST__.listBody; lb.innerHTML = ""; @@ -551,7 +573,6 @@ var cPlayer = function () { value: function add(u, func) { var _this4 = this; - //let __SELF__ = this; var ln = this.options.list.push(u); var div = document.createElement("div"); div.innerHTML = '' + u.name + '' + u.artist + ''; @@ -565,7 +586,7 @@ var cPlayer = function () { }, { key: "lyric", value: function lyric() { - var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var content = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; if (content === undefined) { if (this.hasLyric(this.now)) return this.options.list[this.now].lyric; @@ -585,7 +606,7 @@ var cPlayer = function () { //START LRC BASEING... lr = lr.split("\n"); var lrcs = []; - for ( /* let content of lr */var i = 0, content = lr[i]; i < lr.length; i++, content = lr[i]) { + for (var i = 0, content = lr[i]; i < lr.length; i++, content = lr[i]) { if (typeof content !== "string") break; var onelrc = content.split(/\[|\]\[|\]/gi); for (var _i = 0; _i < onelrc.length - 1; _i++) { @@ -641,7 +662,7 @@ var cPlayer = function () { }, { key: "updateTime", value: function updateTime() { - var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var time = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; var func = arguments[1]; if (time !== undefined) this.music.currentTime = time; @@ -653,9 +674,8 @@ var cPlayer = function () { }, { key: "slideLyric", value: function slideLyric(time) { - //如果没开歌词,就不干事了 if (this.__LIST__.lyric.classList.contains("invisible")) return; - //声明变量 + var lyricToTop = void 0, halfBody = void 0, translateY = void 0, @@ -735,7 +755,6 @@ var cEmitter = function () { _createClass(cEmitter, [{ key: "on", value: function on(eventName, func) { - //func的参数这样写:function([参数A,参数B]){}或者箭头函数([参数A,参数B])=>{} if (this.events[eventName] && this.events[eventName].push !== undefined && typeof func === "function") { this.events[eventName].push(func); } else if (this.events[eventName] === undefined || this.events[eventName].push === undefined) { @@ -756,7 +775,6 @@ var cEmitter = function () { this.events[eventName][i](args); } return this; - //也许会有emitter.emit(..).emit(..)的写法?一次执行俩事件,实在不知道哪里有用... } }]); @@ -764,7 +782,7 @@ var cEmitter = function () { }(); var cBase = function () { function cBase() { - var rootNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.documentElement; + var rootNode = arguments.length <= 0 || arguments[0] === undefined ? document.documentElement : arguments[0]; _classCallCheck(this, cBase); diff --git a/demo/cplayer.js.map b/demo/cplayer.js.map index 9dab775..0cc03c9 100644 --- a/demo/cplayer.js.map +++ b/demo/cplayer.js.map @@ -1 +1 @@ -{"version":3,"sources":["cplayer.js"],"names":["cPlayer","options","transLock","EVENTS","emitter","cEmitter","on","eventName","func","DEFAULTS","document","getElementById","Object","assign","undefined","SVG","i","keys","length","svg","createElementNS","setAttribute","CBASE","cBase","now","dragging","contain","target","createElement","lyric","classList","add","lyricBody","appendChild","controls","cLeft","musicDescription","image","metaBak","musicMeta","div","musicName","musicArtist","playIcon","replaceInner","playArrow","cCenter","time","timeBody","timeLine","timePoint","cRight","volume","volumeButton","volumePower","volumeOff","volumeBody","volumeLine","volumePoint","listButton","listPower","playlistPlay","lyricButton","lyricPower","note","list","listBody","element","root","getElementsByTagName","__LIST__","getByClass","getByTagName","toggleIcon","toggle","volumeIcon","music","autoplay","isPaused","play","pause","hasLyric","contains","showLyric","hideLyric","hasList","showList","hideList","isMuted","muted","updateTime","slideLyric","currentTime","style","loop","next","addEventListener","emit","ev","a","dragPercentage","onplay","defineProperty","set","check","refreshList","parent","type","parentNode","width","clientX","offsetLeft","offsetWidth","vol","duration","vl","checkLevel","volumeDown","volumeUp","console","log","seeking","dom","name","artist","url","img","src","innerHTML","refreshLyric","paused","id","remove","lb","to","u","ln","push","content","isTrans","lr","transLyric","split","lrcs","onelrc","match","splice","lyricsarray","parseInt","parseFloat","Error","count","sort","b","__LYRIC__","lyricToTop","halfBody","translateY","lrc","childNodes","offsetTop","clientHeight","getElementsByClassName","n","SyntaxError","TypeError","index","arguments","source","key","prototype","hasOwnProperty","call","typeList","events","args","rootNode","documentElement","styleList","indexOf","browser","oldElement","newElement","cloneNode","removeChild","innerContent","className","parentElement","tagName","start","end","Math","random","RangeError","property","slice","toUpperCase","window"],"mappings":"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","file":"cplayer.js","sourcesContent":["/*\r\n \tcPlayer\r\n Author\tCorps\r\n */\r\nconst cPlayer = class cPlayer {\r\n\t constructor(options) {\r\n\t \tthis.transLock = false;\r\n\t const EVENTS = {\r\n\t \"play\" :[], //When Music be played, Emit.\r\n\t \"pause\" :[], //When Music be paused, Emit.\r\n\t \"volumechange\" :[],\r\n\t \"timeupdate\" :[],\r\n\t \"canplaythrough\" :[],\r\n\t \"ended\" :[],\r\n\t //All the above are binded on AUDIO Elements,\r\n\t //The following items are Function's callback function.\r\n\t \"toggle\" :[],\r\n\t \"previous\" :[],\r\n\t \"next\" :[],\r\n\t \"changeList\" :[],\r\n\t \"changeLyric\" :[],\r\n\t \"slideList\" :[],\r\n\t \"slideLyric\" :[],\r\n\t \"clickLyricPower\" :[],\r\n\t \"clickListPower\" :[],\r\n\t \"clickVolumePower\" :[],\r\n\t };\r\n\t this.emitter = new cEmitter(EVENTS);\r\n\t this.on = (eventName,func)=>this.emitter.on(eventName,func);\r\n\t /*\r\n\t * 參數处理,合并默认参数与定义參數\r\n\t */\r\n\t const DEFAULTS = {\r\n\t \"element\": document.getElementById(\"cplayer\"),\r\n\t \"list\" : []\r\n\t };\r\n\t if(Object.assign !== undefined){\r\n\t this.options = Object.assign({}, DEFAULTS, options);\r\n\t }\r\n\r\n\t //SVG建立\r\n\t this.SVG = {\r\n\t \"playArrow\" :'M16 10v28l22-14z',\r\n\t \"pause\" :'M12 38h8V10h-8v28zm16-28v28h8V10h-8z',\r\n\t \"playlistPlay\" :'M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z',\r\n\t \"note\" :'M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z',\r\n\t \"volumeUp\" :'M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z',\r\n\t \"volumeMute\" :'M14 18v12h8l10 10V8L22 18h-8z',\r\n\t \"volumeOff\" :'M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z',\r\n\t \"volumeDown\" :'M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z',\r\n\t };\r\n\t (()=>{\r\n\t for(let i = 0,keys = Object.keys(this.SVG),length = keys.length;i' :\r\n\t '';\r\n\t this.SVG[keys[i]] = svg;\r\n\t }\r\n\t })();\r\n\r\n\t this.CBASE = new cBase;\r\n\t this.now = 0;\r\n\t this.dragging = {contain: false, target: undefined};\r\n\t //现在开始填DOM\r\n\t (()=>{\r\n\t let cPlayer = document.createElement(\"c-player\");\r\n\t let lyric = document.createElement(\"div\");\r\n\t lyric.classList.add(\"lyric\");\r\n\t lyric.classList.add(\"invisible\");\r\n\t let lyricBody = document.createElement(\"lyric-body\");\r\n\t lyric.appendChild(lyricBody);\r\n\t let controls = document.createElement(\"div\");\r\n\t controls.classList.add(\"controls\");\r\n\t let cLeft = document.createElement(\"div\");\r\n\t cLeft.classList.add(\"c-left\");\r\n\t let musicDescription = document.createElement(\"div\");\r\n\t musicDescription.classList.add(\"music-description\");\r\n\t let image = document.createElement(\"div\");\r\n\t image.classList.add(\"image\");\r\n\t let metaBak = document.createElement(\"img\");\r\n\t metaBak.classList.add(\"meta-bak\");\r\n\t image.appendChild(metaBak);\r\n\t let musicMeta = document.createElement(\"div\");\r\n\t musicMeta.classList.add(\"music-meta\");\r\n\t let div = document.createElement(\"div\");\r\n\t let musicName = document.createElement(\"span\");\r\n\t musicName.classList.add(\"music-name\");\r\n\t let musicArtist = document.createElement(\"span\");\r\n\t musicArtist.classList.add(\"music-artist\");\r\n\t div.appendChild(musicName);\r\n\t div.appendChild(musicArtist);\r\n\t musicMeta.appendChild(div);\r\n\t musicDescription.appendChild(image);\r\n\t musicDescription.appendChild(musicMeta);\r\n\t let playIcon = document.createElement(\"a\");\r\n\t playIcon.classList.add(\"play-icon\");\r\n\t this.CBASE.replaceInner(playIcon,this.SVG.playArrow);\r\n\t cLeft.appendChild(musicDescription);\r\n\t cLeft.appendChild(playIcon);\r\n\t let cCenter = document.createElement(\"div\");\r\n\t cCenter.classList.add(\"c-center\");\r\n\t let time = document.createElement(\"div\");\r\n\t time.classList.add(\"time\");\r\n\t let timeBody = document.createElement(\"div\");\r\n\t timeBody.classList.add(\"time-body\");\r\n\t let timeLine = document.createElement(\"div\");\r\n\t timeLine.classList.add(\"time-line\");\r\n\t\t let timePoint = document.createElement(\"div\");\r\n\t\t timePoint.classList.add(\"time-point\");\r\n\t \t\ttimeLine.appendChild(timePoint);\r\n\t timeBody.appendChild(timeLine);\r\n\t time.appendChild(timeBody);\r\n\t cCenter.appendChild(time);\r\n\t let cRight = document.createElement(\"div\");\r\n\t cRight.classList.add(\"c-right\");\r\n\t let volume = document.createElement(\"div\");\r\n\t volume.classList.add(\"volume\");\r\n\t let volumeButton = document.createElement(\"div\");\r\n\t volumeButton.classList.add(\"volume-button\");\r\n\t let volumePower = document.createElement(\"a\");\r\n\t volumePower.classList.add(\"volume-power\");\r\n\t this.CBASE.replaceInner(volumePower,this.SVG.volumeOff);\r\n\t volumeButton.appendChild(volumePower);\r\n\t let volumeBody = document.createElement(\"div\");\r\n\t volumeBody.classList.add(\"volume-body\");\r\n\t let volumeLine = document.createElement(\"div\");\r\n\t volumeLine.classList.add(\"volume-line\");\r\n\t\t let volumePoint = document.createElement(\"div\");\r\n\t\t volumePoint.classList.add(\"volume-point\");\r\n\t \t\tvolumeLine.appendChild(volumePoint);\r\n\t volumeBody.appendChild(volumeLine);\r\n\t volume.appendChild(volumeButton);\r\n\t volume.appendChild(volumeBody);\r\n\t let listButton = document.createElement(\"div\");\r\n\t listButton.classList.add(\"list-button\");\r\n\t let listPower = document.createElement(\"a\");\r\n\t listPower.classList.add(\"list-power\");\r\n\t this.CBASE.replaceInner(listPower,this.SVG.playlistPlay);\r\n\t listButton.appendChild(listPower);\r\n\t let lyricButton = document.createElement(\"div\");\r\n\t lyricButton.classList.add(\"lyric-button\");\r\n\t let lyricPower = document.createElement(\"a\");\r\n\t lyricPower.classList.add(\"lyric-power\");\r\n\t this.CBASE.replaceInner(lyricPower,this.SVG.note);\r\n\t lyricButton.appendChild(lyricPower);\r\n\t cRight.appendChild(volume);\r\n\t cRight.appendChild(listButton);\r\n\t cRight.appendChild(lyricButton);\r\n\t controls.appendChild(cLeft);\r\n\t controls.appendChild(cCenter);\r\n\t controls.appendChild(cRight);\r\n\t let list = document.createElement(\"div\");\r\n\t list.classList.add(\"list\");\r\n\t list.classList.add(\"invisible\");\r\n\t let listBody = document.createElement(\"list-body\");\r\n\t list.appendChild(listBody);\r\n\t cPlayer.appendChild(lyric);\r\n\t cPlayer.appendChild(controls);\r\n\t cPlayer.appendChild(list);\r\n\t this.options.element.appendChild(cPlayer);\r\n\t })();\r\n\t this.CBASE.root = this.options.element.getElementsByTagName(\"c-player\");\r\n\t this.CBASE.root = this.CBASE.root[this.CBASE.root.length-1];\r\n\t //然后为DOMList填充一下吧\r\n\t this.__LIST__ = {\r\n\t \"lyric\" : this.CBASE.getByClass(\"lyric\"),\r\n\t \"lyricBody\" : this.CBASE.getByTagName(\"lyric-body\"),\r\n\t \"toggle\" : this.CBASE.getByClass(\"play-icon\"),\r\n\t \"img\" : this.CBASE.getByClass(\"meta-bak\"),\r\n\t \"name\" : this.CBASE.getByClass(\"music-name\"),\r\n\t \"artist\" : this.CBASE.getByClass(\"music-artist\"),\r\n\t \"time\" : this.CBASE.getByClass(\"time\"),\r\n\t \"timeLine\" : this.CBASE.getByClass(\"time-line\"),\r\n\t \"timePoint\" : this.CBASE.getByClass(\"time-point\"),\r\n\t \"lyricPower\" : this.CBASE.getByClass(\"lyric-power\"),\r\n\t \"volumePower\": this.CBASE.getByClass(\"volume-power\"),\r\n\t \"volumeLine\" : this.CBASE.getByClass(\"volume-line\"),\r\n\t \"volumePoint\": this.CBASE.getByClass(\"volume-point\"),\r\n\t \"listPower\" : this.CBASE.getByClass(\"list-power\"),\r\n\t \"list\" : this.CBASE.getByClass(\"list\"),\r\n\t \"listBody\" : this.CBASE.getByTagName(\"list-body\")\r\n\t };\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\r\n\r\n\t this.music = document.createElement(\"audio\");\r\n\t this.music.autoplay = !!this.options.autoplay;\r\n\t //绑定事件开始:\r\n\r\n\t this.emitter.on(\"toggle\",()=>{\r\n\t if (this.isPaused()) {\r\n\t this.play();\r\n\t } else {\r\n\t this.pause();\r\n\t }\r\n\t }).on(\"clickLyricPower\",()=>{\r\n\t if (this.hasLyric(this.now) && this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.showLyric();\r\n\t } else if (this.hasLyric(this.now) && !this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.hideLyric();\r\n\t }\r\n\t }).on(\"clickListPower\",()=>{\r\n\t if (this.hasList() && this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.showList();\r\n\t } else if (this.hasLyric() && !this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.hideList();\r\n\t }\r\n\t }).on(\"clickVolumePower\",()=>{\r\n\t if (this.isMuted()) {\r\n\t this.music.muted = false;\r\n\t } else {\r\n\t this.volume(0);\r\n\t }\r\n\t }).on(\"timeupdate\",()=>{\r\n\t this.updateTime();\r\n\t if (this.hasLyric(this.now)) {\r\n\t this.slideLyric(this.music.currentTime);\r\n\t }\r\n\t }).on(\"volumechange\",()=>{\r\n\t this.volume(); //做更新界面用.\r\n\t }).on(\"pause\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.playArrow);\r\n\t //再赋值,更新内容.\r\n\t //this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"play\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.pause);\r\n\t //再赋值,更新内容.\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"ended\",()=>{\r\n\t //this.__LIST__.lyricBody.style.transform = \"\"; 为了兼容性封装一遍\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t if (this.options.list[this.now].loop === true) {\r\n\t this.updateTime(0);\r\n\t this.play();\r\n\t }else if (this.hasList()&&this.now !== this.options.list.length-1) {\r\n\t this.next();\r\n\t }\r\n\t });\r\n\r\n\t //结束\r\n\r\n\r\n\t if(this.options.list[0]) this.toggle();\r\n\t this.__LIST__.toggle.addEventListener(\"click\", ()=>this.emitter.emit(\"toggle\"));\r\n\t this.__LIST__.lyricPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickLyricPower\"));\r\n\t this.__LIST__.listPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickListPower\"));\r\n\t this.__LIST__.volumePower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickVolumePower\"));\r\n\t this.music.addEventListener(\"volumechange\", (ev)=>this.emitter.emit(\"volumechange\",ev));\r\n\t this.music.addEventListener(\"timeupdate\", (ev)=>this.emitter.emit(\"timeupdate\",ev));\r\n\t this.music.addEventListener(\"canplaythrough\", ()=>this.emitter.emit(\"canplaythrough\"));\r\n\t this.music.addEventListener(\"pause\", ()=>this.emitter.emit(\"pause\"));\r\n\t this.music.addEventListener(\"play\", ()=>this.emitter.emit(\"play\"));\r\n\t this.music.addEventListener(\"ended\", ()=>this.emitter.emit(\"ended\"));\r\n\t //以下内容不适合使用cEmitter,所以就不使用了.\r\n\t this.options.element.addEventListener(\"mousedown\", (a)=>this.dragPercentage(a));\r\n\t this.options.element.addEventListener(\"mousemove\", (a)=>this.dragPercentage(a));\r\n\t this.options.element.addEventListener(\"mouseup\", (a)=>this.dragPercentage(a));\r\n\t //以上内容不适合使用cEmitter,所以就不使用了.\r\n\r\n\t //以下内容是为了兼容UC\r\n\t if(this.music.onplay = undefined) Object.defineProperty(music,\"paused\",{set:function(check){\r\n\t if(check = true){\r\n\t this.emitter.emit(\"pause\");\r\n\t }else{\r\n\t this.emitter.emit(\"play\");\r\n\t }\r\n\t }});\r\n\t //以上内容是为了兼容UC\r\n\r\n\t this.volume();\r\n\t this.refreshList();\r\n\t };\r\n\r\n\t dragPercentage(options) {\r\n\t \tlet parent;\r\n\t switch (options.type) {\r\n\t case \"mousedown\":\r\n\t if (!(options.target !== this.__LIST__.timePoint || options.target !== this.__LIST__.volumePoint)) return;\r\n\t this.dragging.contain = true;\r\n\t this.dragging.target = options.target;\r\n\t break;\r\n\t case \"mousemove\":\r\n\t if (this.dragging.contain === false) return;\r\n\t parent = this.dragging.target.parentNode.parentNode;\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t this.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t this.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t }\r\n\t //实时修正VOLUME(某人强烈要求)\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t vol = vol > 1 ? 1 : vol;\r\n\t vol = vol < 0 ? 0 : vol;\r\n\t this.music.volume = vol;\r\n\t }\r\n\t break;\r\n\t case \"mouseup\":\r\n\t if (this.dragging.contain === false) return;\r\n\t parent = this.dragging.target.parentNode.parentNode;\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t vol = vol > 1 ? 1 : vol;\r\n\t vol = vol < 0 ? 0 : vol;\r\n\t this.music.volume = vol;\r\n\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t time = time > 1 ? 1 : time;\r\n\t time = time < 0 ? 0 : time;\r\n\t this.updateTime(time * this.music.duration);\r\n\t }\r\n\t this.dragging.contain = false;\r\n\t this.dragging.target = undefined;\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t volume(vl = undefined) {\r\n\t let checkLevel = ()=>{\r\n\t if(this.music.volume===0||this.isMuted()){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeOff);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0&&this.music.volume<=0.5){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeDown);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0.5&&this.music.volume<=1){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeUp);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else {\r\n\t console.log(\"Unexcepted Volume: \"+this.music.volume);\r\n\t }\r\n\t }\r\n\t if (vl === undefined) {\r\n\t this.__LIST__.volumeLine.style.width = (this.music.volume * 100) + \"%\";\r\n\t checkLevel();\r\n\t return this.isMuted() ? 0 : this.music.volume;\r\n\t } else {\r\n\t if (vl === 0) {\r\n\t this.music.muted = true;\r\n\t checkLevel();\r\n\t } else {\r\n\t this.music.volume = vl;\r\n\t checkLevel();\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t isMuted() {\r\n\t return this.music.muted;\r\n\t }\r\n\r\n\t play() {\r\n\t /*this.interval = setInterval(()=>{\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t },500);\r\n\t */\r\n\t if(this.music.seeking === true) return this;\r\n\t this.music.play();\r\n\t return this;\r\n\t }\r\n\r\n\t pause() {\r\n\t if(this.music.seeking === true) return;\r\n\t //clearInterval(this.interval);\r\n\t this.music.pause();\r\n\t return this;\r\n\t }\r\n\r\n\t previous() {\r\n\t this.emitter.emit(\"previous\");\r\n\t if(this.now === 0) return;\r\n\t this.now--;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t next() {\r\n\t this.emitter.emit(\"next\");\r\n\t if(this.now === this.options.list.length-1) return;\r\n\t this.now++;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t to(now) {\r\n\t this.now = now;\r\n\t this.toggle();\r\n\t this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t toggle(now = this.now) {\r\n\t this.emitter.emit(\"toggle\");\r\n\t let list = this.options.list[now], dom = this.__LIST__;\r\n\t this.music.pause();\r\n\t //if(this.music.ended)this.music.load();\r\n\t [dom.img.src, dom.name.innerHTML, dom.artist.innerHTML, this.music.src] = [list.image, list.name, list.artist, list.url];\r\n\t this.transLock = false;\r\n\t this.refreshLyric();\r\n\t if (!this.hasLyric(this.now))this.hideLyric();\r\n\t //this.__LIST__.lyricBody.style.transform = \"\";\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t //this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t isPaused(func) {\r\n\t if(func !== undefined) func();\r\n\t return this.music.paused;\r\n\t }\r\n\r\n\t hasLyric(id = 0,func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list[id].lyric != undefined);\r\n\t }\r\n\r\n\t showLyric() {\r\n\t this.emitter.emit(\"slideLyric\",true);\r\n\t if (this.hasLyric(this.now))this.__LIST__.lyric.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.list.classList.contains(\"invisible\")) this.hideList();\r\n\t return this;\r\n\t }\r\n\r\n\t hideLyric() {\r\n\t this.emitter.emit(\"slideLyric\",false);\r\n\t this.__LIST__.lyric.classList.add(\"invisible\");\r\n\t return this;\r\n\t }\r\n\r\n\t hasList(func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list.length > 1);\r\n\t }\r\n\r\n\t showList(func) {\r\n\t this.emitter.emit(\"slideList\",true);\r\n\t this.__LIST__.list.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.lyric.classList.contains(\"invisible\")) this.hideLyric();\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t hideList(func) {\r\n\t this.emitter.emit(\"slideList\",false);\r\n\t this.__LIST__.list.classList.add(\"invisible\");\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t refreshList(func) {\r\n\t this.emitter.emit(\"changeList\");\r\n\t //let __SELF__ = this;\r\n\t let list = this.options.list, lb = this.__LIST__.listBody;\r\n\t lb.innerHTML = ``;\r\n\t for (let i = 0; i <= list.length - 1; i++) {\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + list[i].name + '' + list[i].artist + '';\r\n\t div = lb.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(i);\r\n\t });\r\n\t }\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t add(u,func) {\r\n\t //let __SELF__ = this;\r\n\t let ln = this.options.list.push(u);\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + u.name + '' + u.artist + '';\r\n\t div = this.__LIST__.listBody.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(ln - 1);\r\n\t });\r\n\t if(ln===1) this.toggle(); //刷新元素.\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t lyric(content = undefined) {\r\n\t if (content === undefined) {\r\n\t if (this.hasLyric(this.now)) return this.options.list[this.now].lyric;\r\n\t } else {\r\n\t this.options.list[this.now].lyric = content;\r\n\t this.refreshLyric();\r\n\t }\r\n\t return this;\r\n\t }\r\n\r\n\t refreshLyric(isTrans) {\r\n\t //REQUIRE LYRIC...\r\n\t this.__LIST__.lyricBody.innerHTML = ``;\r\n\t if (!this.hasLyric(this.now)) return;\r\n\t let lr = ((!this.transLock)&&isTrans?this.options.list[this.now].transLyric:this.options.list[this.now].lyric);\r\n\t //START LRC BASEING...\r\n\t lr = lr.split(\"\\n\");\r\n\t let lrcs = [];\r\n\t for (/* let content of lr */ let i = 0,content=lr[i];i= 0; i--) {\r\n\t if (lrcs[i].length > 2) {\r\n\t for (let count = lrcs[i].length - 1; count >= 0; count--) {\r\n\t if (count !== lrcs[i].length - 1 && lrcs[i][lrcs[i].length - 1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][count], content: lrcs[i][lrcs[i].length - 1]});\r\n\t }\r\n\t }\r\n\r\n\t } else if(lrcs[i][1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][0], content: lrcs[i][1]});\r\n\t }\r\n\t }\r\n\r\n\t lyric.sort((a, b)=> {\r\n\t return a.time - b.time;\r\n\t });\r\n\t lyric[\"now\"] = 0;\r\n\t this.__LYRIC__ = lyric;\r\n\t for (let i = 0; i <= lyric.length - 1; i++) {\r\n\t let div = document.createElement(\"lrc\");\r\n\t div.innerHTML = lyric[i].content;\r\n\t this.__LIST__.lyricBody.appendChild(div);\r\n\t }\r\n\t this.emitter.emit(\"changeLyric\");\r\n\r\n\t }\r\n\r\n\t updateTime(time = undefined,func) {\r\n\t if (time !== undefined)this.music.currentTime = time;\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t //if(this.isPaused()) this.play();\r\n\t if(func !== undefined) func(this.music.currentTime);\r\n\t //return this.music.currentTime;\r\n\t }\r\n\r\n\t slideLyric(time){\r\n\t //如果没开歌词,就不干事了\r\n\t if(this.__LIST__.lyric.classList.contains(\"invisible\")) return;\r\n\t //声明变量\r\n\t let lyricToTop,\r\n\t \thalfBody,\r\n\t \ttranslateY,\r\n\t \tlyricBody=this.__LIST__.lyricBody,\r\n\t \tlrc = this.__LIST__.lyricBody.getElementsByTagName(\"lrc\");\r\n\t //遍历Lyric,寻找当前时间的歌词\r\n\t for (let i = this.__LYRIC__.length - 1, lyric = this.__LYRIC__[i]; i >= 0; lyric = this.__LYRIC__[i-1],i--) {\r\n\t \tif(lyric.time>time)\r\n\t \t\tif(this.__LYRIC__[i-1])\r\n\t \t\tif(this.__LYRIC__[i-1].time>time) continue;\r\n\t \tif(lyric.time1)\r\n\t\t\t for (let n = list.length - 1; n >= 0; n--)\r\n\t\t\t \tif(list[n]!==lrc[i-1])\r\n\t\t\t \t\tlist[n].classList.remove(\"now\");\r\n\t }\r\n\t }\r\n\t translate(){\r\n\t \tif(!this.options.list[this.now].transLyric||!this.hasLyric(this.now)) return false;\r\n\t \tthis.refreshLyric(true);\r\n\t \tthis.transLock = true;\r\n\t }\r\n\t get length(){\r\n\t return this.options.list.length;\r\n\t }\r\n\t set length(length){\r\n\t throw new SyntaxError(\"Read-only Property.\");\r\n\t }\r\n}\r\n\r\n//Object.assign 解决方案\r\nif (typeof Object.assign != 'function') {\r\n\t Object.assign = function(target) {\r\n\t 'use strict';\r\n\t if (target == null) {\r\n\t throw new TypeError('Cannot convert undefined or null to object');\r\n\t }\r\n\r\n\t target = Object(target);\r\n\t for (var index = 1; index < arguments.length; index++) {\r\n\t var source = arguments[index];\r\n\t if (source != null) {\r\n\t for (var key in source) {\r\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n\t target[key] = source[key];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return target;\r\n\t };\r\n}\r\n\r\nconst cEmitter = class cEmitter{\r\n\t constructor(typeList){\r\n\t if(typeList){\r\n\t this.events = typeList;\r\n\t }else{\r\n\t this.events = [];\r\n\t }\r\n\t }\r\n\t on(eventName,func){\r\n\t //func的参数这样写:function([参数A,参数B]){}或者箭头函数([参数A,参数B])=>{}\r\n\t if(this.events[eventName]&&this.events[eventName].push !== undefined&&typeof func === \"function\"){\r\n\t this.events[eventName].push(func);\r\n\t }else if(this.events[eventName]===undefined||this.events[eventName].push===undefined){\r\n\t this.events[eventName] = [];\r\n\t }else{\r\n\t throw new TypeError(\"Uncaught Unexcepted TypeError.\")\r\n\t }\r\n\t return this;\r\n\t }\r\n\t emit(eventName,...args){\r\n\t for(let i = 0;i0;i--){\r\n\t if(styleList[i].indexOf(\"-webkit-\")!==-1){\r\n\t this.browser = \"webkit\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-moz-\")!==-1){\r\n\t this.browser = \"moz\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-o-\")!==-1){\r\n\t this.browser = \"o\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-ms-\")!==-1){\r\n\t this.browser = \"ms\";\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t replace(oldElement,newElement){\r\n\t //newElement 不存在于oldElement 的父元素中,首先载入.\r\n\t newElement = newElement.cloneNode(true);\r\n\t oldElement.parentNode.appendChild(newElement);\r\n\t oldElement.parentNode.removeChild(oldElement);\r\n\t //顺便如果有值为oldElement的变量,请重新赋值.\r\n\t }\r\n\t replaceInner(element,innerContent){\r\n\t //进行一次简单的封装\r\n\t element.innerHTML = innerContent;\r\n\t }\r\n\t getByClass(className,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByClassName(className)[0]:this.root.getElementsByClassName(className)[0];\r\n\t }\r\n\t getByTagName(tagName,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByTagName(tagName)[0]:this.root.getElementsByTagName(tagName)[0];\r\n\t }\r\n\t rand(start,end){\r\n\t if(start===undefined||end===undefined) return Math.random();\r\n\t if(start>end) throw new RangeError(\"the EndNumber must be bigger than the StartNumber\");\r\n\t return (end-start)*Math.random()+start;\r\n\t }\r\n\t style(dom,property,content){\r\n\t dom.style[this.browser+property.slice(0,1).toUpperCase()+property.slice(1)] = content;\r\n\t dom.style[property] = content;\r\n\t }\r\n}\r\nif(window)window.cPlayer = cPlayer;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cplayer.js"],"names":[],"mappings":"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","file":"cplayer.js","sourcesContent":["/*\r\n \tcPlayer\r\n Author\tCorps\r\n */\r\nconst cPlayer = class cPlayer {\r\n\t constructor(options) {\r\n\t \tthis.transLock = false;\r\n\t const EVENTS = {\r\n\t \"play\" :[], //When Music be played, Emit.\r\n\t \"pause\" :[], //When Music be paused, Emit.\r\n\t \"volumechange\" :[],\r\n\t \"timeupdate\" :[],\r\n\t \"canplaythrough\" :[],\r\n\t \"ended\" :[],\r\n\t //All the above are binded on AUDIO Elements,\r\n\t //The following items are Function's callback function.\r\n\t \"toggle\" :[],\r\n\t \"previous\" :[],\r\n\t \"next\" :[],\r\n\t \"changeList\" :[],\r\n\t \"changeLyric\" :[],\r\n\t \"slideList\" :[],\r\n\t \"slideLyric\" :[],\r\n\t \"clickLyricPower\" :[],\r\n\t \"clickListPower\" :[],\r\n\t \"clickVolumePower\" :[],\r\n\t };\r\n\t this.emitter = new cEmitter(EVENTS);\r\n\t this.on = (eventName,func)=>this.emitter.on(eventName,func);\r\n\t /*\r\n\t * 參數处理,合并默认参数与定义參數\r\n\t */\r\n\t const DEFAULTS = {\r\n\t \"element\": document.getElementById(\"cplayer\"),\r\n\t \"list\" : []\r\n\t };\r\n\t if(Object.assign !== undefined){\r\n\t this.options = Object.assign({}, DEFAULTS, options);\r\n\t }\r\n\r\n\t //SVG建立\r\n\t this.SVG = {\r\n\t \"playArrow\" :'M16 10v28l22-14z',\r\n\t \"pause\" :'M12 38h8V10h-8v28zm16-28v28h8V10h-8z',\r\n\t \"playlistPlay\" :'M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z',\r\n\t \"note\" :'M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z',\r\n\t \"volumeUp\" :'M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z',\r\n\t \"volumeMute\" :'M14 18v12h8l10 10V8L22 18h-8z',\r\n\t \"volumeOff\" :'M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z',\r\n\t \"volumeDown\" :'M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z',\r\n\t };\r\n\t (()=>{\r\n\t for(let i = 0,keys = Object.keys(this.SVG),length = keys.length;i' :\r\n\t '';\r\n\t this.SVG[keys[i]] = svg;\r\n\t }\r\n\t })();\r\n\r\n\t this.CBASE = new cBase;\r\n\t this.now = 0;\r\n\t this.dragging = {contain: false, target: undefined};\r\n\t //现在开始填DOM\r\n\t (()=>{\r\n\t let cPlayer = document.createElement(\"c-player\");\r\n\t let lyric = document.createElement(\"div\");\r\n\t lyric.classList.add(\"lyric\");\r\n\t lyric.classList.add(\"invisible\");\r\n\t let lyricBody = document.createElement(\"lyric-body\");\r\n\t lyric.appendChild(lyricBody);\r\n\t let controls = document.createElement(\"div\");\r\n\t controls.classList.add(\"controls\");\r\n\t let cLeft = document.createElement(\"div\");\r\n\t cLeft.classList.add(\"c-left\");\r\n\t let musicDescription = document.createElement(\"div\");\r\n\t musicDescription.classList.add(\"music-description\");\r\n\t let image = document.createElement(\"div\");\r\n\t image.classList.add(\"image\");\r\n\t let metaBak = document.createElement(\"img\");\r\n\t metaBak.classList.add(\"meta-bak\");\r\n\t image.appendChild(metaBak);\r\n\t let musicMeta = document.createElement(\"div\");\r\n\t musicMeta.classList.add(\"music-meta\");\r\n\t let div = document.createElement(\"div\");\r\n\t let musicName = document.createElement(\"span\");\r\n\t musicName.classList.add(\"music-name\");\r\n\t let musicArtist = document.createElement(\"span\");\r\n\t musicArtist.classList.add(\"music-artist\");\r\n\t div.appendChild(musicName);\r\n\t div.appendChild(musicArtist);\r\n\t musicMeta.appendChild(div);\r\n\t musicDescription.appendChild(image);\r\n\t musicDescription.appendChild(musicMeta);\r\n\t let playIcon = document.createElement(\"a\");\r\n\t playIcon.classList.add(\"play-icon\");\r\n\t this.CBASE.replaceInner(playIcon,this.SVG.playArrow);\r\n\t cLeft.appendChild(musicDescription);\r\n\t cLeft.appendChild(playIcon);\r\n\t let cCenter = document.createElement(\"div\");\r\n\t cCenter.classList.add(\"c-center\");\r\n\t let time = document.createElement(\"div\");\r\n\t time.classList.add(\"time\");\r\n\t let timeBody = document.createElement(\"div\");\r\n\t timeBody.classList.add(\"time-body\");\r\n\t let timeLine = document.createElement(\"div\");\r\n\t timeLine.classList.add(\"time-line\");\r\n\t\t let timePoint = document.createElement(\"div\");\r\n\t\t timePoint.classList.add(\"time-point\");\r\n\t \t\ttimeLine.appendChild(timePoint);\r\n\t timeBody.appendChild(timeLine);\r\n\t time.appendChild(timeBody);\r\n\t cCenter.appendChild(time);\r\n\t let cRight = document.createElement(\"div\");\r\n\t cRight.classList.add(\"c-right\");\r\n\t let volume = document.createElement(\"div\");\r\n\t volume.classList.add(\"volume\");\r\n\t let volumeButton = document.createElement(\"div\");\r\n\t volumeButton.classList.add(\"volume-button\");\r\n\t let volumePower = document.createElement(\"a\");\r\n\t volumePower.classList.add(\"volume-power\");\r\n\t this.CBASE.replaceInner(volumePower,this.SVG.volumeOff);\r\n\t volumeButton.appendChild(volumePower);\r\n\t let volumeBody = document.createElement(\"div\");\r\n\t volumeBody.classList.add(\"volume-body\");\r\n\t let volumeLine = document.createElement(\"div\");\r\n\t volumeLine.classList.add(\"volume-line\");\r\n\t\t let volumePoint = document.createElement(\"div\");\r\n\t\t volumePoint.classList.add(\"volume-point\");\r\n\t \t\tvolumeLine.appendChild(volumePoint);\r\n\t volumeBody.appendChild(volumeLine);\r\n\t volume.appendChild(volumeButton);\r\n\t volume.appendChild(volumeBody);\r\n\t let listButton = document.createElement(\"div\");\r\n\t listButton.classList.add(\"list-button\");\r\n\t let listPower = document.createElement(\"a\");\r\n\t listPower.classList.add(\"list-power\");\r\n\t this.CBASE.replaceInner(listPower,this.SVG.playlistPlay);\r\n\t listButton.appendChild(listPower);\r\n\t let lyricButton = document.createElement(\"div\");\r\n\t lyricButton.classList.add(\"lyric-button\");\r\n\t let lyricPower = document.createElement(\"a\");\r\n\t lyricPower.classList.add(\"lyric-power\");\r\n\t this.CBASE.replaceInner(lyricPower,this.SVG.note);\r\n\t lyricButton.appendChild(lyricPower);\r\n\t cRight.appendChild(volume);\r\n\t cRight.appendChild(listButton);\r\n\t cRight.appendChild(lyricButton);\r\n\t controls.appendChild(cLeft);\r\n\t controls.appendChild(cCenter);\r\n\t controls.appendChild(cRight);\r\n\t let list = document.createElement(\"div\");\r\n\t list.classList.add(\"list\");\r\n\t list.classList.add(\"invisible\");\r\n\t let listBody = document.createElement(\"list-body\");\r\n\t list.appendChild(listBody);\r\n\t cPlayer.appendChild(lyric);\r\n\t cPlayer.appendChild(controls);\r\n\t cPlayer.appendChild(list);\r\n\t this.options.element.appendChild(cPlayer);\r\n\t })();\r\n\t this.CBASE.root = this.options.element.getElementsByTagName(\"c-player\");\r\n\t this.CBASE.root = this.CBASE.root[this.CBASE.root.length-1];\r\n\t //然后为DOMList填充一下吧\r\n\t this.__LIST__ = {\r\n\t \"lyric\" : this.CBASE.getByClass(\"lyric\"),\r\n\t \"lyricBody\" : this.CBASE.getByTagName(\"lyric-body\"),\r\n\t \"toggle\" : this.CBASE.getByClass(\"play-icon\"),\r\n\t \"img\" : this.CBASE.getByClass(\"meta-bak\"),\r\n\t \"name\" : this.CBASE.getByClass(\"music-name\"),\r\n\t \"artist\" : this.CBASE.getByClass(\"music-artist\"),\r\n\t \"time\" : this.CBASE.getByClass(\"time\"),\r\n\t \"timeBody\" : this.CBASE.getByClass(\"time-body\"),\r\n\t \"timeLine\" : this.CBASE.getByClass(\"time-line\"),\r\n\t \"timePoint\" : this.CBASE.getByClass(\"time-point\"),\r\n\t \"lyricPower\" : this.CBASE.getByClass(\"lyric-power\"),\r\n\t \"volumePower\": this.CBASE.getByClass(\"volume-power\"),\r\n\t \"volumeBody\" : this.CBASE.getByClass(\"volume-body\"),\r\n\t \"volumeLine\" : this.CBASE.getByClass(\"volume-line\"),\r\n\t \"volumePoint\": this.CBASE.getByClass(\"volume-point\"),\r\n\t \"listPower\" : this.CBASE.getByClass(\"list-power\"),\r\n\t \"list\" : this.CBASE.getByClass(\"list\"),\r\n\t \"listBody\" : this.CBASE.getByTagName(\"list-body\")\r\n\t };\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\r\n\t let that=this;function dragPercentage(options) {\r\n\t\t \t/*\r\n\t\t \t\tWhile anything...\r\n\t\t \t\trightTarget(if.it.possible)[\r\n\t\t\t\t\t\t0 -> sth.point\r\n\t\t\t\t\t\t1 -> sth.line\r\n\t\t\t\t\t\t2 -> sth.point & sth.line & sth.body\r\n\t\t \t\t]\r\n\t\t \t*/\r\n\t\t \tlet rightTarget = [];\r\n\t\t \t\trightTarget.push(options.target === that.__LIST__.timePoint \r\n\t\t \t|| options.target === that.__LIST__.volumePoint); //Check if the focus of mouse is the `point circle`\r\n\t\t \t\trightTarget.push(options.target === that.__LIST__.timeLine\r\n\t\t \t|| options.target === that.__LIST__.volumeLine);\r\n\t\t \t\trightTarget.push((options.target === that.__LIST__.timePoint \r\n\t\t \t|| options.target === that.__LIST__.volumePoint\r\n\t\t \t|| options.target === that.__LIST__.timeBody\r\n\t\t \t|| options.target === that.__LIST__.volumeBody\r\n\t\t \t|| options.target === that.__LIST__.timeLine\r\n\t\t \t|| options.target === that.__LIST__.volumeLine));\r\n\t\t \tif (!rightTarget[2]) return;\r\n\t\t that.dragging.contain = true;\r\n\t\t that.dragging.target = options.target;\r\n\t\t\t\tif (rightTarget[0])window.addEventListener(\"mousemove\",function mover(options){\r\n\t\t\t\t\tif (that.dragging.contain === false) return;\r\n\t\t if (!rightTarget[0]) return;\r\n\t\t parent = that.dragging.target.parentNode.parentNode;\r\n\t\t if (parent.classList && parent.classList.contains(\"volume-body\")) {\r\n\t\t that.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t\t } else if (parent.classList && parent.classList.contains(\"time-body\")) {\r\n\t\t that.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t\t }\r\n\t\t //实时修正VOLUME\r\n\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t that.music.volume = vol;\r\n\t\t }\r\n\t\t window.addEventListener(\"mouseup\",function upper(options){\r\n\t\t \tif (that.dragging.contain === false) return;\r\n\t\t\t /*\r\n\t\t\t \tWhile anything...\r\n\t\t\t \tsth.body -> self\r\n\t\t\t \tsth.line -> parent\r\n\t\t\t \tsth.point-> parent.parent\r\n\t\t\t */\r\n\t\t\t if(false){}\r\n\t\t\t \telse if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode}\r\n\t\t\t \telse if(rightTarget[1]){parent = that.dragging.target.parentNode}\r\n\t\t\t \telse if(rightTarget[2]){parent = that.dragging.target}\r\n\t\t\t \telse throw new Error(JSON.stringify([that.dragging.target, rightTarget]));\r\n\r\n\t\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t\t that.music.volume = vol;\r\n\t\t\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t\t\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t time = time > 1 ? 1 : time;\r\n\t\t\t time = time < 0 ? 0 : time;\r\n\t\t\t that.updateTime(time * that.music.duration);\r\n\t\t\t }\r\n\t\t\t that.dragging.contain = false;\r\n\t\t\t that.dragging.target = undefined;\r\n\t\t\t window.removeEventListener(\"mouseup\",upper);\r\n\t\t\t window.removeEventListener(\"mousemove\",mover);\r\n\t\t });\r\n\t\t\t\t});\r\n\t\t\t\tif (!rightTarget[0])window.addEventListener(\"mouseup\",function upper(options){\r\n\t\t \tif (that.dragging.contain === false) return;\r\n\t\t\t if(false){}\r\n\t\t\t \telse if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode}\r\n\t\t\t \telse if(rightTarget[1]){parent = that.dragging.target.parentNode}\r\n\t\t\t \telse if(rightTarget[2]){parent = that.dragging.target}\r\n\t\t\t \telse throw new Error(JSON.stringify([that.dragging.target, rightTarget]));\r\n\r\n\t\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t\t that.music.volume = vol;\r\n\t\t\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t\t\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t time = time > 1 ? 1 : time;\r\n\t\t\t time = time < 0 ? 0 : time;\r\n\t\t\t that.updateTime(time * that.music.duration);\r\n\t\t\t }\r\n\t\t\t that.dragging.contain = false;\r\n\t\t\t that.dragging.target = undefined;\r\n\t\t\t window.removeEventListener(\"mouseup\",upper);\r\n\t\t });\r\n\t\t }\r\n\r\n\t this.music = document.createElement(\"audio\");\r\n\t this.music.autoplay = !!this.options.autoplay;\r\n\t //绑定事件开始:\r\n\r\n\t this.emitter.on(\"toggle\",()=>{\r\n\t if (this.isPaused()) {\r\n\t this.play();\r\n\t } else {\r\n\t this.pause();\r\n\t }\r\n\t }).on(\"clickLyricPower\",()=>{\r\n\t if (this.hasLyric(this.now) && this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.showLyric();\r\n\t } else if (this.hasLyric(this.now) && !this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.hideLyric();\r\n\t }\r\n\t }).on(\"clickListPower\",()=>{\r\n\t if (this.hasList() && this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.showList();\r\n\t } else if (this.hasLyric() && !this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.hideList();\r\n\t }\r\n\t }).on(\"clickVolumePower\",()=>{\r\n\t if (this.isMuted()) {\r\n\t this.music.muted = false;\r\n\t } else {\r\n\t this.volume(0);\r\n\t }\r\n\t }).on(\"timeupdate\",()=>{\r\n\t this.updateTime();\r\n\t if (this.hasLyric(this.now)) {\r\n\t this.slideLyric(this.music.currentTime);\r\n\t }\r\n\t }).on(\"volumechange\",()=>{\r\n\t this.volume(); //做更新界面用.\r\n\t }).on(\"pause\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.playArrow);\r\n\t //再赋值,更新内容.\r\n\t //this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"play\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.pause);\r\n\t //再赋值,更新内容.\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"ended\",()=>{\r\n\t //this.__LIST__.lyricBody.style.transform = \"\"; 为了兼容性封装一遍\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t if (this.options.list[this.now].loop === true) {\r\n\t this.updateTime(0);\r\n\t this.play();\r\n\t }else if (this.hasList()&&this.now !== this.options.list.length-1) {\r\n\t this.next();\r\n\t }\r\n\t });\r\n\r\n\t //结束\r\n\r\n\r\n\t if(this.options.list[0]) this.toggle();\r\n\t this.__LIST__.toggle.addEventListener(\"click\", ()=>this.emitter.emit(\"toggle\"));\r\n\t this.__LIST__.lyricPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickLyricPower\"));\r\n\t this.__LIST__.listPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickListPower\"));\r\n\t this.__LIST__.volumePower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickVolumePower\"));\r\n\t this.music.addEventListener(\"volumechange\", (ev)=>this.emitter.emit(\"volumechange\",ev));\r\n\t this.music.addEventListener(\"timeupdate\", (ev)=>this.emitter.emit(\"timeupdate\",ev));\r\n\t this.music.addEventListener(\"canplaythrough\", ()=>this.emitter.emit(\"canplaythrough\"));\r\n\t this.music.addEventListener(\"pause\", ()=>this.emitter.emit(\"pause\"));\r\n\t this.music.addEventListener(\"play\", ()=>this.emitter.emit(\"play\"));\r\n\t this.music.addEventListener(\"ended\", ()=>this.emitter.emit(\"ended\"));\r\n\t this.options.element.addEventListener(\"mousedown\", (a)=>dragPercentage(a));\r\n\r\n\t this.volume();\r\n\t this.refreshList();\r\n\t };\r\n\r\n\t volume(vl = undefined) {\r\n\t let checkLevel = ()=>{\r\n\t if(this.music.volume===0||this.isMuted()){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeOff);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0&&this.music.volume<=0.5){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeDown);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0.5&&this.music.volume<=1){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeUp);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else {\r\n\t console.log(\"Unexcepted Volume: \"+this.music.volume);\r\n\t }\r\n\t }\r\n\t if (vl === undefined) {\r\n\t this.__LIST__.volumeLine.style.width = (this.music.volume * 100) + \"%\";\r\n\t checkLevel();\r\n\t return this.isMuted() ? 0 : this.music.volume;\r\n\t } else {\r\n\t if (vl === 0) {\r\n\t this.music.muted = true;\r\n\t checkLevel();\r\n\t } else {\r\n\t this.music.volume = vl;\r\n\t checkLevel();\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t isMuted() {\r\n\t return this.music.muted;\r\n\t }\r\n\r\n\t play() {\r\n\t if(this.music.seeking === true) return this;\r\n\t this.music.play();\r\n\t return this;\r\n\t }\r\n\r\n\t pause() {\r\n\t if(this.music.seeking === true) return;\r\n\t this.music.pause();\r\n\t return this;\r\n\t }\r\n\r\n\t previous() {\r\n\t this.emitter.emit(\"previous\");\r\n\t if(this.now === 0) return;\r\n\t this.now--;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t next() {\r\n\t this.emitter.emit(\"next\");\r\n\t if(this.now === this.options.list.length-1) return;\r\n\t this.now++;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t to(now) {\r\n\t this.now = now;\r\n\t this.toggle();\r\n\t this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t toggle(now = this.now) {\r\n\t this.emitter.emit(\"toggle\");\r\n\t let list = this.options.list[now], dom = this.__LIST__;\r\n\t this.music.pause();\r\n\t [dom.img.src, dom.name.innerHTML, dom.artist.innerHTML, this.music.src] = [list.image, list.name, list.artist, list.url];\r\n\t this.transLock = false;\r\n\t this.refreshLyric();\r\n\t if (!this.hasLyric(this.now))this.hideLyric();\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t return this;\r\n\t }\r\n\r\n\t isPaused(func) {\r\n\t if(func !== undefined) func();\r\n\t return this.music.paused;\r\n\t }\r\n\r\n\t hasLyric(id = 0,func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list[id].lyric != undefined);\r\n\t }\r\n\r\n\t showLyric() {\r\n\t this.emitter.emit(\"slideLyric\",true);\r\n\t if (this.hasLyric(this.now))this.__LIST__.lyric.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.list.classList.contains(\"invisible\")) this.hideList();\r\n\t return this;\r\n\t }\r\n\r\n\t hideLyric() {\r\n\t this.emitter.emit(\"slideLyric\",false);\r\n\t this.__LIST__.lyric.classList.add(\"invisible\");\r\n\t return this;\r\n\t }\r\n\r\n\t hasList(func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list.length > 1);\r\n\t }\r\n\r\n\t showList(func) {\r\n\t this.emitter.emit(\"slideList\",true);\r\n\t this.__LIST__.list.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.lyric.classList.contains(\"invisible\")) this.hideLyric();\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t hideList(func) {\r\n\t this.emitter.emit(\"slideList\",false);\r\n\t this.__LIST__.list.classList.add(\"invisible\");\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t refreshList(func) {\r\n\t this.emitter.emit(\"changeList\");\r\n\t let list = this.options.list, lb = this.__LIST__.listBody;\r\n\t lb.innerHTML = ``;\r\n\t for (let i = 0; i <= list.length - 1; i++) {\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + list[i].name + '' + list[i].artist + '';\r\n\t div = lb.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(i);\r\n\t });\r\n\t }\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t add(u,func) {\r\n\t let ln = this.options.list.push(u);\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + u.name + '' + u.artist + '';\r\n\t div = this.__LIST__.listBody.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(ln - 1);\r\n\t });\r\n\t if(ln===1) this.toggle(); //刷新元素.\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t lyric(content = undefined) {\r\n\t if (content === undefined) {\r\n\t if (this.hasLyric(this.now)) return this.options.list[this.now].lyric;\r\n\t } else {\r\n\t this.options.list[this.now].lyric = content;\r\n\t this.refreshLyric();\r\n\t }\r\n\t return this;\r\n\t }\r\n\r\n\t refreshLyric(isTrans) {\r\n\t //REQUIRE LYRIC...\r\n\t this.__LIST__.lyricBody.innerHTML = ``;\r\n\t if (!this.hasLyric(this.now)) return;\r\n\t let lr = ((!this.transLock)&&isTrans?this.options.list[this.now].transLyric:this.options.list[this.now].lyric);\r\n\t //START LRC BASEING...\r\n\t lr = lr.split(\"\\n\");\r\n\t let lrcs = [];\r\n\t for (let i = 0,content=lr[i];i= 0; i--) {\r\n\t if (lrcs[i].length > 2) {\r\n\t for (let count = lrcs[i].length - 1; count >= 0; count--) {\r\n\t if (count !== lrcs[i].length - 1 && lrcs[i][lrcs[i].length - 1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][count], content: lrcs[i][lrcs[i].length - 1]});\r\n\t }\r\n\t }\r\n\r\n\t } else if(lrcs[i][1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][0], content: lrcs[i][1]});\r\n\t }\r\n\t }\r\n\r\n\t lyric.sort((a, b)=> {\r\n\t return a.time - b.time;\r\n\t });\r\n\t lyric[\"now\"] = 0;\r\n\t this.__LYRIC__ = lyric;\r\n\t for (let i = 0; i <= lyric.length - 1; i++) {\r\n\t let div = document.createElement(\"lrc\");\r\n\t div.innerHTML = lyric[i].content;\r\n\t this.__LIST__.lyricBody.appendChild(div);\r\n\t }\r\n\t this.emitter.emit(\"changeLyric\");\r\n\r\n\t }\r\n\r\n\t updateTime(time = undefined,func) {\r\n\t if (time !== undefined)this.music.currentTime = time;\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t //if(this.isPaused()) this.play();\r\n\t if(func !== undefined) func(this.music.currentTime);\r\n\t //return this.music.currentTime;\r\n\t }\r\n\r\n\t slideLyric(time){\r\n\t if(this.__LIST__.lyric.classList.contains(\"invisible\")) return;\r\n\r\n\t let lyricToTop,\r\n\t \thalfBody,\r\n\t \ttranslateY,\r\n\t \tlyricBody=this.__LIST__.lyricBody,\r\n\t \tlrc = this.__LIST__.lyricBody.getElementsByTagName(\"lrc\");\r\n\t //遍历Lyric,寻找当前时间的歌词\r\n\t for (let i = this.__LYRIC__.length - 1, lyric = this.__LYRIC__[i]; i >= 0; lyric = this.__LYRIC__[i-1],i--) {\r\n\t \tif(lyric.time>time)\r\n\t \t\tif(this.__LYRIC__[i-1])\r\n\t \t\tif(this.__LYRIC__[i-1].time>time) continue;\r\n\t \tif(lyric.time1)\r\n\t\t\t for (let n = list.length - 1; n >= 0; n--)\r\n\t\t\t \tif(list[n]!==lrc[i-1])\r\n\t\t\t \t\tlist[n].classList.remove(\"now\");\r\n\t }\r\n\t }\r\n\t translate(){\r\n\t \tif(!this.options.list[this.now].transLyric||!this.hasLyric(this.now)) return false;\r\n\t \tthis.refreshLyric(true);\r\n\t \tthis.transLock = true;\r\n\t }\r\n\t get length(){\r\n\t return this.options.list.length;\r\n\t }\r\n\t set length(length){\r\n\t throw new SyntaxError(\"Read-only Property.\");\r\n\t }\r\n}\r\n\r\n//Object.assign 解决方案\r\nif (typeof Object.assign != 'function') {\r\n\t Object.assign = function(target) {\r\n\t 'use strict';\r\n\t if (target == null) {\r\n\t throw new TypeError('Cannot convert undefined or null to object');\r\n\t }\r\n\r\n\t target = Object(target);\r\n\t for (var index = 1; index < arguments.length; index++) {\r\n\t var source = arguments[index];\r\n\t if (source != null) {\r\n\t for (var key in source) {\r\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n\t target[key] = source[key];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return target;\r\n\t };\r\n}\r\n\r\nconst cEmitter = class cEmitter{\r\n\t constructor(typeList){\r\n\t if(typeList){\r\n\t this.events = typeList;\r\n\t }else{\r\n\t this.events = [];\r\n\t }\r\n\t }\r\n\t on(eventName,func){\r\n\t if(this.events[eventName]&&this.events[eventName].push !== undefined&&typeof func === \"function\"){\r\n\t this.events[eventName].push(func);\r\n\t }else if(this.events[eventName]===undefined||this.events[eventName].push===undefined){\r\n\t this.events[eventName] = [];\r\n\t }else{\r\n\t throw new TypeError(\"Uncaught Unexcepted TypeError.\")\r\n\t }\r\n\t return this;\r\n\t }\r\n\t emit(eventName,...args){\r\n\t for(let i = 0;i0;i--){\r\n\t if(styleList[i].indexOf(\"-webkit-\")!==-1){\r\n\t this.browser = \"webkit\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-moz-\")!==-1){\r\n\t this.browser = \"moz\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-o-\")!==-1){\r\n\t this.browser = \"o\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-ms-\")!==-1){\r\n\t this.browser = \"ms\";\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t replace(oldElement,newElement){\r\n\t //newElement 不存在于oldElement 的父元素中,首先载入.\r\n\t newElement = newElement.cloneNode(true);\r\n\t oldElement.parentNode.appendChild(newElement);\r\n\t oldElement.parentNode.removeChild(oldElement);\r\n\t //顺便如果有值为oldElement的变量,请重新赋值.\r\n\t }\r\n\t replaceInner(element,innerContent){\r\n\t //进行一次简单的封装\r\n\t element.innerHTML = innerContent;\r\n\t }\r\n\t getByClass(className,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByClassName(className)[0]:this.root.getElementsByClassName(className)[0];\r\n\t }\r\n\t getByTagName(tagName,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByTagName(tagName)[0]:this.root.getElementsByTagName(tagName)[0];\r\n\t }\r\n\t rand(start,end){\r\n\t if(start===undefined||end===undefined) return Math.random();\r\n\t if(start>end) throw new RangeError(\"the EndNumber must be bigger than the StartNumber\");\r\n\t return (end-start)*Math.random()+start;\r\n\t }\r\n\t style(dom,property,content){\r\n\t dom.style[this.browser+property.slice(0,1).toUpperCase()+property.slice(1)] = content;\r\n\t dom.style[property] = content;\r\n\t }\r\n}\r\nif(window)window.cPlayer = cPlayer;"]} \ No newline at end of file diff --git a/demo/cplayer.min.css b/demo/cplayer.min.css index 4ab43b8..e82239c 100644 --- a/demo/cplayer.min.css +++ b/demo/cplayer.min.css @@ -1 +1 @@ -@-webkit-keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}@keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}c-player{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player svg{width:100%;height:100%;fill:#333;display:block}c-player .play-icon svg{fill:white;width:80%;height:80%}c-player .invisible{height:0 !important;overflow:hidden !important;max-height:0 !important;min-height:0 !important}c-player *{font-family:"Ubuntu Mono","微软雅黑","Microsoft JHenghei",sans-serif;text-decoration:none;font-size:initial;line-height:initial}c-player .lyric{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:20em;height:45vh;width:100%;background:#eee;overflow:hidden}c-player .lyric lyric-body{will-change:transform;display:block;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;text-align:center;-webkit-transform:translateY(6em);-ms-transform:translateY(6em);transform:translateY(6em);-webkit-transition:all 0.25s;transition:all 0.25s}c-player .lyric lyric-body lrc{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:block;will-change:background;line-height:3em;min-height:3em;font-size:large;font-family:"LiHei Pro","Microsoft Yahei",sans-serif;width:100%;-webkit-transition:0.25s background ease;transition:0.25s background ease}c-player .lyric lyric-body lrc.now{background:#ddd}c-player .controls{background:white;height:4em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description .image,c-player .controls .c-left .music-description .image img{height:4em;width:4em}c-player .controls .c-left .music-description .image:hover+.music-meta,c-player .controls .c-left .music-description .image img:hover+.music-meta{max-width:9999px}c-player .controls .c-left .music-description .music-meta{margin:0 0.5em;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:0;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;-webkit-transition:1.5s all 0.5s ease-in;transition:1.5s all 0.5s ease-in}c-player .controls .c-left .music-description .music-meta div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player .controls .c-left .music-description .music-meta .music-name{font-size:1.5em;white-space:nowrap}c-player .controls .c-left .music-description .music-meta .music-artist{font-size:0.7em;color:grey;white-space:nowrap}c-player .controls .c-left .play-icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto 0.5em;width:3.2em;height:3.2em;-webkit-border-radius:100%;border-radius:100%;background-color:#f66;color:white;cursor:pointer}c-player .controls .c-center{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0.5em}@media screen and (max-width: 800px){c-player .controls .c-center{display:none}}c-player .controls .c-center .time{width:100%;cursor:pointer}c-player .controls .c-center .time .time-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-center .time .time-body .time-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-center .time .time-body .time-line .time-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 800px){c-player .controls .c-right{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}}c-player .controls .c-right>*{width:2em;height:2em;margin:0 0.5em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume .volume-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume .volume-body .volume-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-right .volume .volume-body .volume-line .volume-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right .volume .volume-body{visibility:hidden;width:0;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:12em}@media screen and (max-width: 800px){c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:100% !important}}c-player .controls .c-right .volume:hover .volume-body,c-player .controls .c-right .volume:active .volume-body{visibility:visible;width:100%}c-player .controls .c-right .volume .volume-button{width:2em;height:2em}c-player .controls .c-right .volume .volume-button .volume-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .volume .volume-button .volume-power:hover,c-player .controls .c-right .volume .volume-button .volume-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .volume .volume-button .volume-power .material-icons{margin:auto}c-player .controls .c-right .list-button .list-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .list-button .list-power:hover,c-player .controls .c-right .list-button .list-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .list-button .list-power .material-icons{margin:auto}c-player .controls .c-right .lyric-button .lyric-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .lyric-button .lyric-power:hover,c-player .controls .c-right .lyric-button .lyric-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .lyric-button .lyric-power .material-icons{margin:auto}c-player .list{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;max-height:75vh;background:white;overflow:auto}c-player .list list-body{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow:hidden}c-player .list list-body>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;cursor:pointer;-webkit-transition:0.2s background 0s ease;transition:0.2s background 0s ease}c-player .list list-body>*:nth-child(2n-1){background:rgba(117,117,117,0.23)}c-player .list list-body>*:hover,c-player .list list-body>*:active{background:rgba(117,117,117,0.5)}c-player .list list-body>*:hover::before,c-player .list list-body>*:active::before{width:0.2em}c-player .list list-body>*::before{background:#f66;-webkit-transition:0.2s width 0s ease;transition:0.2s width 0s ease;float:left;height:2.5em;width:0em;display:block;content:""}@media screen and (max-width: 800px){c-player .list list-body>*::before{height:3em}c-player .list list-body>*::before:hover::before,c-player .list list-body>*::before:active::before{width:0.4em}}c-player .list list-body .music-name,c-player .list list-body .music-artist{padding:0 0.5em}c-player .list list-body .music-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1} +@-webkit-keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}@keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}c-player{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player svg{width:100%;height:100%;fill:#333;display:block}c-player .play-icon svg{fill:white;width:80%;height:80%}c-player .invisible{height:0 !important;overflow:hidden !important;max-height:0 !important;min-height:0 !important}c-player *{font-family:"Ubuntu Mono","微软雅黑","Microsoft JHenghei",sans-serif;text-decoration:none;font-size:initial;line-height:initial}c-player .lyric{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:20em;height:45vh;width:100%;background:#eee;overflow:hidden}c-player .lyric lyric-body{will-change:transform;display:block;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;text-align:center;-webkit-transform:translateY(6em);-ms-transform:translateY(6em);transform:translateY(6em);-webkit-transition:all 0.25s;transition:all 0.25s}c-player .lyric lyric-body lrc{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:block;will-change:background;line-height:3em;min-height:3em;font-size:large;font-family:"LiHei Pro","Microsoft Yahei",sans-serif;width:100%;-webkit-transition:0.25s background ease;transition:0.25s background ease}c-player .lyric lyric-body lrc.now{background:#ddd}c-player .controls{background:white;height:4em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description .image,c-player .controls .c-left .music-description .image img{height:4em;width:4em}c-player .controls .c-left .music-description .image:hover+.music-meta,c-player .controls .c-left .music-description .image img:hover+.music-meta{max-width:9999px}c-player .controls .c-left .music-description .music-meta{margin:0 0.5em;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:0;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;-webkit-transition:1.5s all 0.5s ease-in;transition:1.5s all 0.5s ease-in}c-player .controls .c-left .music-description .music-meta div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player .controls .c-left .music-description .music-meta .music-name{font-size:1.5em;white-space:nowrap}c-player .controls .c-left .music-description .music-meta .music-artist{font-size:0.7em;color:grey;white-space:nowrap}c-player .controls .c-left .play-icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto 0.5em;width:3.2em;height:3.2em;-webkit-border-radius:100%;border-radius:100%;background-color:#f66;color:white;cursor:pointer}c-player .controls .c-center{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0.5em}@media screen and (max-width: 800px){c-player .controls .c-center{display:none}}c-player .controls .c-center .time{width:100%;cursor:pointer}c-player .controls .c-center .time .time-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-center .time .time-body .time-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-center .time .time-body .time-line .time-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 800px){c-player .controls .c-right{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}}c-player .controls .c-right>*{width:2em;height:2em;margin:0 0.5em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;cursor:pointer;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume .volume-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume .volume-body .volume-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-right .volume .volume-body .volume-line .volume-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right .volume .volume-body{visibility:hidden;width:0;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:12em}@media screen and (max-width: 800px){c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:100% !important}}c-player .controls .c-right .volume:hover .volume-body,c-player .controls .c-right .volume:active .volume-body{visibility:visible;width:100%}c-player .controls .c-right .volume .volume-button{width:2em;height:2em}c-player .controls .c-right .volume .volume-button .volume-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .volume .volume-button .volume-power:hover,c-player .controls .c-right .volume .volume-button .volume-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .volume .volume-button .volume-power .material-icons{margin:auto}c-player .controls .c-right .list-button .list-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .list-button .list-power:hover,c-player .controls .c-right .list-button .list-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .list-button .list-power .material-icons{margin:auto}c-player .controls .c-right .lyric-button .lyric-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .lyric-button .lyric-power:hover,c-player .controls .c-right .lyric-button .lyric-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .lyric-button .lyric-power .material-icons{margin:auto}c-player .list{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;max-height:75vh;background:white;overflow:auto}c-player .list list-body{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow:hidden}c-player .list list-body>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;cursor:pointer;-webkit-transition:0.2s background 0s ease;transition:0.2s background 0s ease}c-player .list list-body>*:nth-child(2n-1){background:rgba(117,117,117,0.23)}c-player .list list-body>*:hover,c-player .list list-body>*:active{background:rgba(117,117,117,0.5)}c-player .list list-body>*:hover::before,c-player .list list-body>*:active::before{width:0.2em}c-player .list list-body>*::before{background:#f66;-webkit-transition:0.2s width 0s ease;transition:0.2s width 0s ease;float:left;height:2.5em;width:0em;display:block;content:""}@media screen and (max-width: 800px){c-player .list list-body>*::before{height:3em}c-player .list list-body>*::before:hover::before,c-player .list list-body>*::before:active::before{width:0.4em}}c-player .list list-body .music-name,c-player .list list-body .music-artist{padding:0 0.5em}c-player .list list-body .music-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1} diff --git a/demo/cplayer.min.js b/demo/cplayer.min.js index 7f539d0..86d16b4 100644 --- a/demo/cplayer.min.js +++ b/demo/cplayer.min.js @@ -1 +1 @@ -"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 i=0;i':'',i.SVG[t[e]]=n}}(),this.CBASE=new cBase,this.now=0,this.dragging={contain:!1,target:void 0},function(){var e=document.createElement("c-player"),t=document.createElement("div");t.classList.add("lyric"),t.classList.add("invisible");var s=document.createElement("lyric-body");t.appendChild(s);var n=document.createElement("div");n.classList.add("controls");var a=document.createElement("div");a.classList.add("c-left");var r=document.createElement("div");r.classList.add("music-description");var o=document.createElement("div");o.classList.add("image");var l=document.createElement("img");l.classList.add("meta-bak"),o.appendChild(l);var c=document.createElement("div");c.classList.add("music-meta");var d=document.createElement("div"),h=document.createElement("span");h.classList.add("music-name");var u=document.createElement("span");u.classList.add("music-artist"),d.appendChild(h),d.appendChild(u),c.appendChild(d),r.appendChild(o),r.appendChild(c);var m=document.createElement("a");m.classList.add("play-icon"),i.CBASE.replaceInner(m,i.SVG.playArrow),a.appendChild(r),a.appendChild(m);var v=document.createElement("div");v.classList.add("c-center");var _=document.createElement("div");_.classList.add("time");var p=document.createElement("div");p.classList.add("time-body");var g=document.createElement("div");g.classList.add("time-line");var y=document.createElement("div");y.classList.add("time-point"),g.appendChild(y),p.appendChild(g),_.appendChild(p),v.appendChild(_);var L=document.createElement("div");L.classList.add("c-right");var f=document.createElement("div");f.classList.add("volume");var w=document.createElement("div");w.classList.add("volume-button");var C=document.createElement("a");C.classList.add("volume-power"),i.CBASE.replaceInner(C,i.SVG.volumeOff),w.appendChild(C);var E=document.createElement("div");E.classList.add("volume-body");var S=document.createElement("div");S.classList.add("volume-line");var B=document.createElement("div");B.classList.add("volume-point"),S.appendChild(B),E.appendChild(S),f.appendChild(w),f.appendChild(E);var T=document.createElement("div");T.classList.add("list-button");var I=document.createElement("a");I.classList.add("list-power"),i.CBASE.replaceInner(I,i.SVG.playlistPlay),T.appendChild(I);var k=document.createElement("div");k.classList.add("lyric-button");var b=document.createElement("a");b.classList.add("lyric-power"),i.CBASE.replaceInner(b,i.SVG.note),k.appendChild(b),L.appendChild(f),L.appendChild(T),L.appendChild(k),n.appendChild(a),n.appendChild(v),n.appendChild(L);var A=document.createElement("div");A.classList.add("list"),A.classList.add("invisible");var P=document.createElement("list-body");A.appendChild(P),e.appendChild(t),e.appendChild(n),e.appendChild(A),i.options.element.appendChild(e)}(),this.CBASE.root=this.options.element.getElementsByTagName("c-player"),this.CBASE.root=this.CBASE.root[this.CBASE.root.length-1],this.__LIST__={lyric:this.CBASE.getByClass("lyric"),lyricBody:this.CBASE.getByTagName("lyric-body"),toggle:this.CBASE.getByClass("play-icon"),img:this.CBASE.getByClass("meta-bak"),name:this.CBASE.getByClass("music-name"),artist:this.CBASE.getByClass("music-artist"),time:this.CBASE.getByClass("time"),timeLine:this.CBASE.getByClass("time-line"),timePoint:this.CBASE.getByClass("time-point"),lyricPower:this.CBASE.getByClass("lyric-power"),volumePower:this.CBASE.getByClass("volume-power"),volumeLine:this.CBASE.getByClass("volume-line"),volumePoint:this.CBASE.getByClass("volume-point"),listPower:this.CBASE.getByClass("list-power"),list:this.CBASE.getByClass("list"),listBody:this.CBASE.getByTagName("list-body")},this.__LIST__.toggleIcon=this.CBASE.getByTagName("svg",this.__LIST__.toggle),this.__LIST__.volumeIcon=this.CBASE.getByTagName("svg",this.__LIST__.volumePower),this.music=document.createElement("audio"),this.music.autoplay=!!this.options.autoplay,this.emitter.on("toggle",function(){i.isPaused()?i.play():i.pause()}).on("clickLyricPower",function(){i.hasLyric(i.now)&&i.__LIST__.lyric.classList.contains("invisible")?i.showLyric():i.hasLyric(i.now)&&!i.__LIST__.lyric.classList.contains("invisible")&&i.hideLyric()}).on("clickListPower",function(){i.hasList()&&i.__LIST__.list.classList.contains("invisible")?i.showList():i.hasLyric()&&!i.__LIST__.list.classList.contains("invisible")&&i.hideList()}).on("clickVolumePower",function(){i.isMuted()?i.music.muted=!1:i.volume(0)}).on("timeupdate",function(){i.updateTime(),i.hasLyric(i.now)&&i.slideLyric(i.music.currentTime)}).on("volumechange",function(){i.volume()}).on("pause",function(){i.CBASE.replaceInner(i.__LIST__.toggle,i.SVG.playArrow)}).on("play",function(){i.CBASE.replaceInner(i.__LIST__.toggle,i.SVG.pause),i.__LIST__.toggleIcon=i.CBASE.getByTagName("svg",i.__LIST__.toggle)}).on("ended",function(){i.CBASE.style(i.__LIST__.lyricBody,"transform",""),i.options.list[i.now].loop===!0?(i.updateTime(0),i.play()):i.hasList()&&i.now!==i.options.list.length-1&&i.next()}),this.options.list[0]&&this.toggle(),this.__LIST__.toggle.addEventListener("click",function(){return i.emitter.emit("toggle")}),this.__LIST__.lyricPower.addEventListener("click",function(){return i.emitter.emit("clickLyricPower")}),this.__LIST__.listPower.addEventListener("click",function(){return i.emitter.emit("clickListPower")}),this.__LIST__.volumePower.addEventListener("click",function(){return i.emitter.emit("clickVolumePower")}),this.music.addEventListener("volumechange",function(e){return i.emitter.emit("volumechange",e)}),this.music.addEventListener("timeupdate",function(e){return i.emitter.emit("timeupdate",e)}),this.music.addEventListener("canplaythrough",function(){return i.emitter.emit("canplaythrough")}),this.music.addEventListener("pause",function(){return i.emitter.emit("pause")}),this.music.addEventListener("play",function(){return i.emitter.emit("play")}),this.music.addEventListener("ended",function(){return i.emitter.emit("ended")}),this.options.element.addEventListener("mousedown",function(e){return i.dragPercentage(e)}),this.options.element.addEventListener("mousemove",function(e){return i.dragPercentage(e)}),this.options.element.addEventListener("mouseup",function(e){return i.dragPercentage(e)}),(this.music.onplay=void 0)&&Object.defineProperty(music,"paused",{set:function(e){(e=!0)?this.emitter.emit("pause"):this.emitter.emit("play")}}),this.volume(),this.refreshList()}return _createClass(e,[{key:"dragPercentage",value:function(e){var t=void 0;switch(e.type){case"mousedown":if(e.target===this.__LIST__.timePoint&&e.target===this.__LIST__.volumePoint)return;this.dragging.contain=!0,this.dragging.target=e.target;break;case"mousemove":if(this.dragging.contain===!1)return;if(t=this.dragging.target.parentNode.parentNode,t.classList.contains("volume-body")?this.__LIST__.volumeLine.style.width=(e.clientX-t.offsetLeft)/t.offsetWidth*100+"%":t.classList.contains("time-body")&&(this.__LIST__.timeLine.style.width=(e.clientX-t.offsetLeft)/t.offsetWidth*100+"%"),t.classList.contains("volume-body")){var i=(e.clientX-t.offsetLeft)/t.offsetWidth;i=i>1?1:i,i=i<0?0:i,this.music.volume=i}break;case"mouseup":if(this.dragging.contain===!1)return;if(t=this.dragging.target.parentNode.parentNode,t.classList.contains("volume-body")){var s=(e.clientX-t.offsetLeft)/t.offsetWidth;s=s>1?1:s,s=s<0?0:s,this.music.volume=s}else if(t.classList.contains("time-body")){var n=(e.clientX-t.offsetLeft)/t.offsetWidth;n=n>1?1:n,n=n<0?0:n,this.updateTime(n*this.music.duration)}this.dragging.contain=!1,this.dragging.target=void 0}}},{key:"volume",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,i=function(){0===e.music.volume||e.isMuted()?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeOff),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>0&&e.music.volume<=.5?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeDown),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>.5&&e.music.volume<=1?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeUp),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):console.log("Unexcepted Volume: "+e.music.volume)};return void 0===t?(this.__LIST__.volumeLine.style.width=100*this.music.volume+"%",i(),this.isMuted()?0:this.music.volume):void(0===t?(this.music.muted=!0,i()):(this.music.volume=t,i()))}},{key:"isMuted",value:function(){return this.music.muted}},{key:"play",value:function(){return this.music.seeking===!0?this:(this.music.play(),this)}},{key:"pause",value:function(){if(this.music.seeking!==!0)return this.music.pause(),this}},{key:"previous",value:function(){if(this.emitter.emit("previous"),0!==this.now)return this.now--,this.toggle().play(),this}},{key:"next",value:function(){if(this.emitter.emit("next"),this.now!==this.options.list.length-1)return this.now++,this.toggle().play(),this}},{key:"to",value:function(e){return this.now=e,this.toggle(),this.play(),this}},{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.now;this.emitter.emit("toggle");var t=this.options.list[e],i=this.__LIST__;this.music.pause();var s=[t.image,t.name,t.artist,t.url];return i.img.src=s[0],i.name.innerHTML=s[1],i.artist.innerHTML=s[2],this.music.src=s[3],this.transLock=!1,this.refreshLyric(),this.hasLyric(this.now)||this.hideLyric(),this.CBASE.style(this.__LIST__.lyricBody,"transform",""),this}},{key:"isPaused",value:function(e){return void 0!==e&&e(),this.music.paused}},{key:"hasLyric",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1];return void 0!==t&&t(),void 0!=this.options.list[e].lyric}},{key:"showLyric",value:function(){return this.emitter.emit("slideLyric",!0),this.hasLyric(this.now)&&this.__LIST__.lyric.classList.remove("invisible"),this.__LIST__.list.classList.contains("invisible")||this.hideList(),this}},{key:"hideLyric",value:function(){return this.emitter.emit("slideLyric",!1),this.__LIST__.lyric.classList.add("invisible"),this}},{key:"hasList",value:function(e){return void 0!==e&&e(),this.options.list.length>1}},{key:"showList",value:function(e){return this.emitter.emit("slideList",!0),this.__LIST__.list.classList.remove("invisible"),this.__LIST__.lyric.classList.contains("invisible")||this.hideLyric(),void 0!==e&&e(),this}},{key:"hideList",value:function(e){return this.emitter.emit("slideList",!1),this.__LIST__.list.classList.add("invisible"),void 0!==e&&e(),this}},{key:"refreshList",value:function(e){var t=this;this.emitter.emit("changeList");var i=this.options.list,s=this.__LIST__.listBody;s.innerHTML="";for(var n=function(e){var n=document.createElement("div");n.innerHTML=''+i[e].name+''+i[e].artist+"",n=s.appendChild(n),n.addEventListener("click",function(){t.to(e)})},a=0;a<=i.length-1;a++)n(a);void 0!==e&&e()}},{key:"add",value:function(e,t){var i=this,s=this.options.list.push(e),n=document.createElement("div");n.innerHTML=''+e.name+''+e.artist+"",n=this.__LIST__.listBody.appendChild(n),n.addEventListener("click",function(){i.to(s-1)}),1===s&&this.toggle(),void 0!==t&&t()}},{key:"lyric",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e){if(this.hasLyric(this.now))return this.options.list[this.now].lyric}else this.options.list[this.now].lyric=e,this.refreshLyric();return this}},{key:"refreshLyric",value:function(e){if(this.__LIST__.lyricBody.innerHTML="",this.hasLyric(this.now)){var t=!this.transLock&&e?this.options.list[this.now].transLyric:this.options.list[this.now].lyric;t=t.split("\n");for(var i=[],s=0,n=t[s];s=0;c--)if(i[c].length>2)for(var d=i[c].length-1;d>=0;d--)d!==i[c].length-1&&void 0!==i[c][i[c].length-1]&&l.push({time:i[c][d],content:i[c][i[c].length-1]});else void 0!==i[c][1]&&l.push({time:i[c][0],content:i[c][1]});l.sort(function(e,t){return e.time-t.time}),l.now=0,this.__LYRIC__=l;for(var h=0;h<=l.length-1;h++){var u=document.createElement("lrc");u.innerHTML=l[h].content,this.__LIST__.lyricBody.appendChild(u)}this.emitter.emit("changeLyric")}}},{key:"updateTime",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments[1];void 0!==e&&(this.music.currentTime=e),this.dragging.contain===!1&&(this.__LIST__.timeLine.style.width=this.music.currentTime/this.music.duration*100+"%"),void 0!==t&&t(this.music.currentTime)}},{key:"slideLyric",value:function(e){if(!this.__LIST__.lyric.classList.contains("invisible"))for(var t=void 0,i=void 0,s=void 0,n=this.__LIST__.lyricBody,a=this.__LIST__.lyricBody.getElementsByTagName("lrc"),r=this.__LYRIC__.length-1,o=this.__LYRIC__[r];r>=0;o=this.__LYRIC__[r-1],r--)if(!(o.time>e&&this.__LYRIC__[r-1]&&this.__LYRIC__[r-1].time>e)){if(o.time1)for(var c=l.length-1;c>=0;c--)l[c]!==a[r-1]&&l[c].classList.remove("now")}}},{key:"translate",value:function(){return!(!this.options.list[this.now].transLyric||!this.hasLyric(this.now))&&(this.refreshLyric(!0),void(this.transLock=!0))}},{key:"length",get:function(){return this.options.list.length},set:function(e){throw new SyntaxError("Read-only Property.")}}]),e}();"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t1?t-1:0),s=1;s0&&void 0!==arguments[0]?arguments[0]:document.documentElement;_classCallCheck(this,e),this.root=t;for(var i=document.documentElement.style,s=i.length;s>0;s--){if(i[s].indexOf("-webkit-")!==-1){this.browser="webkit";break}if(i[s].indexOf("-moz-")!==-1){this.browser="moz";break}if(i[s].indexOf("-o-")!==-1){this.browser="o";break}if(i[s].indexOf("-ms-")!==-1){this.browser="ms";break}}}return _createClass(e,[{key:"replace",value:function(e,t){t=t.cloneNode(!0),e.parentNode.appendChild(t),e.parentNode.removeChild(e)}},{key:"replaceInner",value:function(e,t){e.innerHTML=t}},{key:"getByClass",value:function(e,t){return void 0!=t?t.getElementsByClassName(e)[0]:this.root.getElementsByClassName(e)[0]}},{key:"getByTagName",value:function(e,t){return void 0!=t?t.getElementsByTagName(e)[0]:this.root.getElementsByTagName(e)[0]}},{key:"rand",value:function(e,t){if(void 0===e||void 0===t)return Math.random();if(e>t)throw new RangeError("the EndNumber must be bigger than the StartNumber");return(t-e)*Math.random()+e}},{key:"style",value:function(e,t,i){e.style[this.browser+t.slice(0,1).toUpperCase()+t.slice(1)]=i,e.style[t]=i}}]),e}();window&&(window.cPlayer=cPlayer); \ No newline at end of file +"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 i=0;i1?1:s,s=s<0?0:s,r.music.volume=s}window.addEventListener("mouseup",function n(e){if(r.dragging.contain!==!1){if(t[0])parent=r.dragging.target.parentNode.parentNode;else if(t[1])parent=r.dragging.target.parentNode;else{if(!t[2])throw new Error(JSON.stringify([r.dragging.target,t]));parent=r.dragging.target}if(parent.classList.contains("volume-body")){var s=(e.clientX-parent.offsetLeft)/parent.offsetWidth;s=s>1?1:s,s=s<0?0:s,r.music.volume=s}else if(parent.classList.contains("time-body")){var a=(e.clientX-parent.offsetLeft)/parent.offsetWidth;a=a>1?1:a,a=a<0?0:a,r.updateTime(a*r.music.duration)}r.dragging.contain=!1,r.dragging.target=void 0,window.removeEventListener("mouseup",n),window.removeEventListener("mousemove",i)}})}}),t[0]||window.addEventListener("mouseup",function s(e){if(r.dragging.contain!==!1){if(t[0])parent=r.dragging.target.parentNode.parentNode;else if(t[1])parent=r.dragging.target.parentNode;else{if(!t[2])throw new Error(JSON.stringify([r.dragging.target,t]));parent=r.dragging.target}if(parent.classList.contains("volume-body")){var i=(e.clientX-parent.offsetLeft)/parent.offsetWidth;i=i>1?1:i,i=i<0?0:i,r.music.volume=i}else if(parent.classList.contains("time-body")){var n=(e.clientX-parent.offsetLeft)/parent.offsetWidth;n=n>1?1:n,n=n<0?0:n,r.updateTime(n*r.music.duration)}r.dragging.contain=!1,r.dragging.target=void 0,window.removeEventListener("mouseup",s)}}))}var s=this;_classCallCheck(this,e),this.transLock=!1;var n={play:[],pause:[],volumechange:[],timeupdate:[],canplaythrough:[],ended:[],toggle:[],previous:[],next:[],changeList:[],changeLyric:[],slideList:[],slideLyric:[],clickLyricPower:[],clickListPower:[],clickVolumePower:[]};this.emitter=new cEmitter(n),this.on=function(e,t){return s.emitter.on(e,t)};var a={element:document.getElementById("cplayer"),list:[]};void 0!==Object.assign&&(this.options=Object.assign({},a,t)),this.SVG={playArrow:"M16 10v28l22-14z",pause:"M12 38h8V10h-8v28zm16-28v28h8V10h-8z",playlistPlay:"M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z",note:"M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z",volumeUp:"M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z",volumeMute:"M14 18v12h8l10 10V8L22 18h-8z",volumeOff:"M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z",volumeDown:"M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z"},function(){for(var e=0,t=Object.keys(s.SVG),i=t.length;e':'',s.SVG[t[e]]=n}}(),this.CBASE=new cBase,this.now=0,this.dragging={contain:!1,target:void 0},function(){var e=document.createElement("c-player"),t=document.createElement("div");t.classList.add("lyric"),t.classList.add("invisible");var i=document.createElement("lyric-body");t.appendChild(i);var n=document.createElement("div");n.classList.add("controls");var a=document.createElement("div");a.classList.add("c-left");var r=document.createElement("div");r.classList.add("music-description");var o=document.createElement("div");o.classList.add("image");var l=document.createElement("img");l.classList.add("meta-bak"),o.appendChild(l);var c=document.createElement("div");c.classList.add("music-meta");var d=document.createElement("div"),u=document.createElement("span");u.classList.add("music-name");var h=document.createElement("span");h.classList.add("music-artist"),d.appendChild(u),d.appendChild(h),c.appendChild(d),r.appendChild(o),r.appendChild(c);var m=document.createElement("a");m.classList.add("play-icon"),s.CBASE.replaceInner(m,s.SVG.playArrow),a.appendChild(r),a.appendChild(m);var v=document.createElement("div");v.classList.add("c-center");var _=document.createElement("div");_.classList.add("time");var p=document.createElement("div");p.classList.add("time-body");var g=document.createElement("div");g.classList.add("time-line");var L=document.createElement("div");L.classList.add("time-point"),g.appendChild(L),p.appendChild(g),_.appendChild(p),v.appendChild(_);var y=document.createElement("div");y.classList.add("c-right");var f=document.createElement("div");f.classList.add("volume");var w=document.createElement("div");w.classList.add("volume-button");var C=document.createElement("a");C.classList.add("volume-power"),s.CBASE.replaceInner(C,s.SVG.volumeOff),w.appendChild(C);var S=document.createElement("div");S.classList.add("volume-body");var E=document.createElement("div");E.classList.add("volume-line");var B=document.createElement("div");B.classList.add("volume-point"),E.appendChild(B),S.appendChild(E),f.appendChild(w),f.appendChild(S);var T=document.createElement("div");T.classList.add("list-button");var I=document.createElement("a");I.classList.add("list-power"),s.CBASE.replaceInner(I,s.SVG.playlistPlay),T.appendChild(I);var b=document.createElement("div");b.classList.add("lyric-button");var k=document.createElement("a");k.classList.add("lyric-power"),s.CBASE.replaceInner(k,s.SVG.note),b.appendChild(k),y.appendChild(f),y.appendChild(T),y.appendChild(b),n.appendChild(a),n.appendChild(v),n.appendChild(y);var A=document.createElement("div");A.classList.add("list"),A.classList.add("invisible");var P=document.createElement("list-body");A.appendChild(P),e.appendChild(t),e.appendChild(n),e.appendChild(A),s.options.element.appendChild(e)}(),this.CBASE.root=this.options.element.getElementsByTagName("c-player"),this.CBASE.root=this.CBASE.root[this.CBASE.root.length-1],this.__LIST__={lyric:this.CBASE.getByClass("lyric"),lyricBody:this.CBASE.getByTagName("lyric-body"),toggle:this.CBASE.getByClass("play-icon"),img:this.CBASE.getByClass("meta-bak"),name:this.CBASE.getByClass("music-name"),artist:this.CBASE.getByClass("music-artist"),time:this.CBASE.getByClass("time"),timeBody:this.CBASE.getByClass("time-body"),timeLine:this.CBASE.getByClass("time-line"),timePoint:this.CBASE.getByClass("time-point"),lyricPower:this.CBASE.getByClass("lyric-power"),volumePower:this.CBASE.getByClass("volume-power"),volumeBody:this.CBASE.getByClass("volume-body"),volumeLine:this.CBASE.getByClass("volume-line"),volumePoint:this.CBASE.getByClass("volume-point"),listPower:this.CBASE.getByClass("list-power"),list:this.CBASE.getByClass("list"),listBody:this.CBASE.getByTagName("list-body")},this.__LIST__.toggleIcon=this.CBASE.getByTagName("svg",this.__LIST__.toggle),this.__LIST__.volumeIcon=this.CBASE.getByTagName("svg",this.__LIST__.volumePower);var r=this;this.music=document.createElement("audio"),this.music.autoplay=!!this.options.autoplay,this.emitter.on("toggle",function(){s.isPaused()?s.play():s.pause()}).on("clickLyricPower",function(){s.hasLyric(s.now)&&s.__LIST__.lyric.classList.contains("invisible")?s.showLyric():s.hasLyric(s.now)&&!s.__LIST__.lyric.classList.contains("invisible")&&s.hideLyric()}).on("clickListPower",function(){s.hasList()&&s.__LIST__.list.classList.contains("invisible")?s.showList():s.hasLyric()&&!s.__LIST__.list.classList.contains("invisible")&&s.hideList()}).on("clickVolumePower",function(){s.isMuted()?s.music.muted=!1:s.volume(0)}).on("timeupdate",function(){s.updateTime(),s.hasLyric(s.now)&&s.slideLyric(s.music.currentTime)}).on("volumechange",function(){s.volume()}).on("pause",function(){s.CBASE.replaceInner(s.__LIST__.toggle,s.SVG.playArrow)}).on("play",function(){s.CBASE.replaceInner(s.__LIST__.toggle,s.SVG.pause),s.__LIST__.toggleIcon=s.CBASE.getByTagName("svg",s.__LIST__.toggle)}).on("ended",function(){s.CBASE.style(s.__LIST__.lyricBody,"transform",""),s.options.list[s.now].loop===!0?(s.updateTime(0),s.play()):s.hasList()&&s.now!==s.options.list.length-1&&s.next()}),this.options.list[0]&&this.toggle(),this.__LIST__.toggle.addEventListener("click",function(){return s.emitter.emit("toggle")}),this.__LIST__.lyricPower.addEventListener("click",function(){return s.emitter.emit("clickLyricPower")}),this.__LIST__.listPower.addEventListener("click",function(){return s.emitter.emit("clickListPower")}),this.__LIST__.volumePower.addEventListener("click",function(){return s.emitter.emit("clickVolumePower")}),this.music.addEventListener("volumechange",function(e){return s.emitter.emit("volumechange",e)}),this.music.addEventListener("timeupdate",function(e){return s.emitter.emit("timeupdate",e)}),this.music.addEventListener("canplaythrough",function(){return s.emitter.emit("canplaythrough")}),this.music.addEventListener("pause",function(){return s.emitter.emit("pause")}),this.music.addEventListener("play",function(){return s.emitter.emit("play")}),this.music.addEventListener("ended",function(){return s.emitter.emit("ended")}),this.options.element.addEventListener("mousedown",function(e){return i(e)}),this.volume(),this.refreshList()}return _createClass(e,[{key:"volume",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0],i=function(){0===e.music.volume||e.isMuted()?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeOff),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>0&&e.music.volume<=.5?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeDown),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>.5&&e.music.volume<=1?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeUp),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):console.log("Unexcepted Volume: "+e.music.volume)};return void 0===t?(this.__LIST__.volumeLine.style.width=100*this.music.volume+"%",i(),this.isMuted()?0:this.music.volume):void(0===t?(this.music.muted=!0,i()):(this.music.volume=t,i()))}},{key:"isMuted",value:function(){return this.music.muted}},{key:"play",value:function(){return this.music.seeking===!0?this:(this.music.play(),this)}},{key:"pause",value:function(){if(this.music.seeking!==!0)return this.music.pause(),this}},{key:"previous",value:function(){if(this.emitter.emit("previous"),0!==this.now)return this.now--,this.toggle().play(),this}},{key:"next",value:function(){if(this.emitter.emit("next"),this.now!==this.options.list.length-1)return this.now++,this.toggle().play(),this}},{key:"to",value:function(e){return this.now=e,this.toggle(),this.play(),this}},{key:"toggle",value:function(){var e=arguments.length<=0||void 0===arguments[0]?this.now:arguments[0];this.emitter.emit("toggle");var t=this.options.list[e],i=this.__LIST__;this.music.pause();var s=[t.image,t.name,t.artist,t.url];return i.img.src=s[0],i.name.innerHTML=s[1],i.artist.innerHTML=s[2],this.music.src=s[3],this.transLock=!1,this.refreshLyric(),this.hasLyric(this.now)||this.hideLyric(),this.CBASE.style(this.__LIST__.lyricBody,"transform",""),this}},{key:"isPaused",value:function(e){return void 0!==e&&e(),this.music.paused}},{key:"hasLyric",value:function(){var e=arguments.length<=0||void 0===arguments[0]?0:arguments[0],t=arguments[1];return void 0!==t&&t(),void 0!=this.options.list[e].lyric}},{key:"showLyric",value:function(){return this.emitter.emit("slideLyric",!0),this.hasLyric(this.now)&&this.__LIST__.lyric.classList.remove("invisible"),this.__LIST__.list.classList.contains("invisible")||this.hideList(),this}},{key:"hideLyric",value:function(){return this.emitter.emit("slideLyric",!1),this.__LIST__.lyric.classList.add("invisible"),this}},{key:"hasList",value:function(e){return void 0!==e&&e(),this.options.list.length>1}},{key:"showList",value:function(e){return this.emitter.emit("slideList",!0),this.__LIST__.list.classList.remove("invisible"),this.__LIST__.lyric.classList.contains("invisible")||this.hideLyric(),void 0!==e&&e(),this}},{key:"hideList",value:function(e){return this.emitter.emit("slideList",!1),this.__LIST__.list.classList.add("invisible"),void 0!==e&&e(),this}},{key:"refreshList",value:function(e){var t=this;this.emitter.emit("changeList");var i=this.options.list,s=this.__LIST__.listBody;s.innerHTML="";for(var n=function(e){var n=document.createElement("div");n.innerHTML=''+i[e].name+''+i[e].artist+"",n=s.appendChild(n),n.addEventListener("click",function(){t.to(e)})},a=0;a<=i.length-1;a++)n(a);void 0!==e&&e()}},{key:"add",value:function(e,t){var i=this,s=this.options.list.push(e),n=document.createElement("div");n.innerHTML=''+e.name+''+e.artist+"",n=this.__LIST__.listBody.appendChild(n),n.addEventListener("click",function(){i.to(s-1)}),1===s&&this.toggle(),void 0!==t&&t()}},{key:"lyric",value:function(){var e=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0];if(void 0===e){if(this.hasLyric(this.now))return this.options.list[this.now].lyric}else this.options.list[this.now].lyric=e,this.refreshLyric();return this}},{key:"refreshLyric",value:function(e){if(this.__LIST__.lyricBody.innerHTML="",this.hasLyric(this.now)){var t=!this.transLock&&e?this.options.list[this.now].transLyric:this.options.list[this.now].lyric;t=t.split("\n");for(var i=[],s=0,n=t[s];s=0;c--)if(i[c].length>2)for(var d=i[c].length-1;d>=0;d--)d!==i[c].length-1&&void 0!==i[c][i[c].length-1]&&l.push({time:i[c][d],content:i[c][i[c].length-1]});else void 0!==i[c][1]&&l.push({time:i[c][0],content:i[c][1]});l.sort(function(e,t){return e.time-t.time}),l.now=0,this.__LYRIC__=l;for(var u=0;u<=l.length-1;u++){var h=document.createElement("lrc");h.innerHTML=l[u].content,this.__LIST__.lyricBody.appendChild(h)}this.emitter.emit("changeLyric")}}},{key:"updateTime",value:function(){var e=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0],t=arguments[1];void 0!==e&&(this.music.currentTime=e),this.dragging.contain===!1&&(this.__LIST__.timeLine.style.width=this.music.currentTime/this.music.duration*100+"%"),void 0!==t&&t(this.music.currentTime)}},{key:"slideLyric",value:function(e){if(!this.__LIST__.lyric.classList.contains("invisible"))for(var t=void 0,i=void 0,s=void 0,n=this.__LIST__.lyricBody,a=this.__LIST__.lyricBody.getElementsByTagName("lrc"),r=this.__LYRIC__.length-1,o=this.__LYRIC__[r];r>=0;o=this.__LYRIC__[r-1],r--)if(!(o.time>e&&this.__LYRIC__[r-1]&&this.__LYRIC__[r-1].time>e)){if(o.time1)for(var c=l.length-1;c>=0;c--)l[c]!==a[r-1]&&l[c].classList.remove("now")}}},{key:"translate",value:function(){return!(!this.options.list[this.now].transLyric||!this.hasLyric(this.now))&&(this.refreshLyric(!0),void(this.transLock=!0))}},{key:"length",get:function(){return this.options.list.length},set:function(e){throw new SyntaxError("Read-only Property.")}}]),e}();"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t1?t-1:0),s=1;s0;s--){if(i[s].indexOf("-webkit-")!==-1){this.browser="webkit";break}if(i[s].indexOf("-moz-")!==-1){this.browser="moz";break}if(i[s].indexOf("-o-")!==-1){this.browser="o";break}if(i[s].indexOf("-ms-")!==-1){this.browser="ms";break}}}return _createClass(e,[{key:"replace",value:function(e,t){t=t.cloneNode(!0),e.parentNode.appendChild(t),e.parentNode.removeChild(e)}},{key:"replaceInner",value:function(e,t){e.innerHTML=t}},{key:"getByClass",value:function(e,t){return void 0!=t?t.getElementsByClassName(e)[0]:this.root.getElementsByClassName(e)[0]}},{key:"getByTagName",value:function(e,t){return void 0!=t?t.getElementsByTagName(e)[0]:this.root.getElementsByTagName(e)[0]}},{key:"rand",value:function(e,t){if(void 0===e||void 0===t)return Math.random();if(e>t)throw new RangeError("the EndNumber must be bigger than the StartNumber");return(t-e)*Math.random()+e}},{key:"style",value:function(e,t,i){e.style[this.browser+t.slice(0,1).toUpperCase()+t.slice(1)]=i,e.style[t]=i}}]),e}();window&&(window.cPlayer=cPlayer); \ No newline at end of file diff --git a/demo/index.html b/demo/index.html index 9c1f948..6509034 100644 --- a/demo/index.html +++ b/demo/index.html @@ -110,6 +110,7 @@

cPlayer DEMO

add163(cp,792449); add163(cp,427609923); add163(cp,34880507); + add163(cp,38574225); diff --git a/dist/cplayer.css b/dist/cplayer.css index 45ebd04..b3e096c 100644 --- a/dist/cplayer.css +++ b/dist/cplayer.css @@ -339,6 +339,7 @@ c-player .controls .c-right .volume { -webkit-box-align: center; -webkit-align-items: center; -ms-flex-align: center; + -ms-grid-row-align: center; align-items: center; cursor: pointer; -webkit-transition: width 0.2s; diff --git a/dist/cplayer.js b/dist/cplayer.js index 32b8359..b0d283e 100644 --- a/dist/cplayer.js +++ b/dist/cplayer.js @@ -187,10 +187,12 @@ var cPlayer = function () { "name": this.CBASE.getByClass("music-name"), "artist": this.CBASE.getByClass("music-artist"), "time": this.CBASE.getByClass("time"), + "timeBody": this.CBASE.getByClass("time-body"), "timeLine": this.CBASE.getByClass("time-line"), "timePoint": this.CBASE.getByClass("time-point"), "lyricPower": this.CBASE.getByClass("lyric-power"), "volumePower": this.CBASE.getByClass("volume-power"), + "volumeBody": this.CBASE.getByClass("volume-body"), "volumeLine": this.CBASE.getByClass("volume-line"), "volumePoint": this.CBASE.getByClass("volume-point"), "listPower": this.CBASE.getByClass("list-power"), @@ -200,6 +202,98 @@ var cPlayer = function () { this.__LIST__.toggleIcon = this.CBASE.getByTagName("svg", this.__LIST__.toggle); this.__LIST__.volumeIcon = this.CBASE.getByTagName("svg", this.__LIST__.volumePower); + var that = this;function dragPercentage(options) { + /* + While anything... + rightTarget(if.it.possible)[ + 0 -> sth.point + 1 -> sth.line + 2 -> sth.point & sth.line & sth.body + ] + */ + var rightTarget = []; + rightTarget.push(options.target === that.__LIST__.timePoint || options.target === that.__LIST__.volumePoint); //Check if the focus of mouse is the `point circle` + rightTarget.push(options.target === that.__LIST__.timeLine || options.target === that.__LIST__.volumeLine); + rightTarget.push(options.target === that.__LIST__.timePoint || options.target === that.__LIST__.volumePoint || options.target === that.__LIST__.timeBody || options.target === that.__LIST__.volumeBody || options.target === that.__LIST__.timeLine || options.target === that.__LIST__.volumeLine); + if (!rightTarget[2]) return; + that.dragging.contain = true; + that.dragging.target = options.target; + if (rightTarget[0]) window.addEventListener("mousemove", function mover(options) { + if (that.dragging.contain === false) return; + if (!rightTarget[0]) return; + parent = that.dragging.target.parentNode.parentNode; + if (parent.classList && parent.classList.contains("volume-body")) { + that.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } else if (parent.classList && parent.classList.contains("time-body")) { + that.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } + //实时修正VOLUME + if (parent.classList.contains("volume-body")) { + var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } + window.addEventListener("mouseup", function upper(options) { + if (that.dragging.contain === false) return; + /* + While anything... + sth.body -> self + sth.line -> parent + sth.point-> parent.parent + */ + if (false) {} else if (rightTarget[0]) { + parent = that.dragging.target.parentNode.parentNode; + } else if (rightTarget[1]) { + parent = that.dragging.target.parentNode; + } else if (rightTarget[2]) { + parent = that.dragging.target; + } else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + var _vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + _vol = _vol > 1 ? 1 : _vol; + _vol = _vol < 0 ? 0 : _vol; + that.music.volume = _vol; + } else if (parent.classList.contains("time-body")) { + var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup", upper); + window.removeEventListener("mousemove", mover); + }); + }); + if (!rightTarget[0]) window.addEventListener("mouseup", function upper(options) { + if (that.dragging.contain === false) return; + if (false) {} else if (rightTarget[0]) { + parent = that.dragging.target.parentNode.parentNode; + } else if (rightTarget[1]) { + parent = that.dragging.target.parentNode; + } else if (rightTarget[2]) { + parent = that.dragging.target; + } else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } else if (parent.classList.contains("time-body")) { + var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup", upper); + }); + } + this.music = document.createElement("audio"); this.music.autoplay = !!this.options.autoplay; //绑定事件开始: @@ -288,83 +382,20 @@ var cPlayer = function () { this.music.addEventListener("ended", function () { return _this.emitter.emit("ended"); }); - //以下内容不适合使用cEmitter,所以就不使用了. this.options.element.addEventListener("mousedown", function (a) { - return _this.dragPercentage(a); - }); - this.options.element.addEventListener("mousemove", function (a) { - return _this.dragPercentage(a); + return dragPercentage(a); }); - this.options.element.addEventListener("mouseup", function (a) { - return _this.dragPercentage(a); - }); - //以上内容不适合使用cEmitter,所以就不使用了. - - //以下内容是为了兼容UC - if (this.music.onplay = undefined) Object.defineProperty(music, "paused", { set: function set(check) { - if (check = true) { - this.emitter.emit("pause"); - } else { - this.emitter.emit("play"); - } - } }); - //以上内容是为了兼容UC this.volume(); this.refreshList(); } _createClass(cPlayer, [{ - key: "dragPercentage", - value: function dragPercentage(options) { - var parent = void 0; - switch (options.type) { - case "mousedown": - if (!(options.target !== this.__LIST__.timePoint || options.target !== this.__LIST__.volumePoint)) return; - this.dragging.contain = true; - this.dragging.target = options.target; - break; - case "mousemove": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - this.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } else if (parent.classList.contains("time-body")) { - this.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } - //实时修正VOLUME(某人强烈要求) - if (parent.classList.contains("volume-body")) { - var vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - vol = vol > 1 ? 1 : vol; - vol = vol < 0 ? 0 : vol; - this.music.volume = vol; - } - break; - case "mouseup": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - var _vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - _vol = _vol > 1 ? 1 : _vol; - _vol = _vol < 0 ? 0 : _vol; - this.music.volume = _vol; - } else if (parent.classList.contains("time-body")) { - var time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - time = time > 1 ? 1 : time; - time = time < 0 ? 0 : time; - this.updateTime(time * this.music.duration); - } - this.dragging.contain = false; - this.dragging.target = undefined; - break; - } - } - }, { key: "volume", value: function volume() { var _this2 = this; - var vl = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var vl = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; var checkLevel = function checkLevel() { if (_this2.music.volume === 0 || _this2.isMuted()) { @@ -402,10 +433,6 @@ var cPlayer = function () { }, { key: "play", value: function play() { - /*this.interval = setInterval(()=>{ - if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + "%"; - },500); - */ if (this.music.seeking === true) return this; this.music.play(); return this; @@ -414,7 +441,6 @@ var cPlayer = function () { key: "pause", value: function pause() { if (this.music.seeking === true) return; - //clearInterval(this.interval); this.music.pause(); return this; } @@ -447,13 +473,12 @@ var cPlayer = function () { }, { key: "toggle", value: function toggle() { - var now = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this.now; + var now = arguments.length <= 0 || arguments[0] === undefined ? this.now : arguments[0]; this.emitter.emit("toggle"); var list = this.options.list[now], dom = this.__LIST__; this.music.pause(); - //if(this.music.ended)this.music.load(); var _ref = [list.image, list.name, list.artist, list.url]; dom.img.src = _ref[0]; dom.name.innerHTML = _ref[1]; @@ -463,9 +488,7 @@ var cPlayer = function () { this.transLock = false; this.refreshLyric(); if (!this.hasLyric(this.now)) this.hideLyric(); - //this.__LIST__.lyricBody.style.transform = ""; this.CBASE.style(this.__LIST__.lyricBody, "transform", ""); - //this.play(); return this; } }, { @@ -477,7 +500,7 @@ var cPlayer = function () { }, { key: "hasLyric", value: function hasLyric() { - var id = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0; + var id = arguments.length <= 0 || arguments[0] === undefined ? 0 : arguments[0]; var func = arguments[1]; if (func !== undefined) func(); @@ -527,7 +550,6 @@ var cPlayer = function () { var _this3 = this; this.emitter.emit("changeList"); - //let __SELF__ = this; var list = this.options.list, lb = this.__LIST__.listBody; lb.innerHTML = ""; @@ -551,7 +573,6 @@ var cPlayer = function () { value: function add(u, func) { var _this4 = this; - //let __SELF__ = this; var ln = this.options.list.push(u); var div = document.createElement("div"); div.innerHTML = '' + u.name + '' + u.artist + ''; @@ -565,7 +586,7 @@ var cPlayer = function () { }, { key: "lyric", value: function lyric() { - var content = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var content = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; if (content === undefined) { if (this.hasLyric(this.now)) return this.options.list[this.now].lyric; @@ -585,7 +606,7 @@ var cPlayer = function () { //START LRC BASEING... lr = lr.split("\n"); var lrcs = []; - for ( /* let content of lr */var i = 0, content = lr[i]; i < lr.length; i++, content = lr[i]) { + for (var i = 0, content = lr[i]; i < lr.length; i++, content = lr[i]) { if (typeof content !== "string") break; var onelrc = content.split(/\[|\]\[|\]/gi); for (var _i = 0; _i < onelrc.length - 1; _i++) { @@ -641,7 +662,7 @@ var cPlayer = function () { }, { key: "updateTime", value: function updateTime() { - var time = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : undefined; + var time = arguments.length <= 0 || arguments[0] === undefined ? undefined : arguments[0]; var func = arguments[1]; if (time !== undefined) this.music.currentTime = time; @@ -653,9 +674,8 @@ var cPlayer = function () { }, { key: "slideLyric", value: function slideLyric(time) { - //如果没开歌词,就不干事了 if (this.__LIST__.lyric.classList.contains("invisible")) return; - //声明变量 + var lyricToTop = void 0, halfBody = void 0, translateY = void 0, @@ -735,7 +755,6 @@ var cEmitter = function () { _createClass(cEmitter, [{ key: "on", value: function on(eventName, func) { - //func的参数这样写:function([参数A,参数B]){}或者箭头函数([参数A,参数B])=>{} if (this.events[eventName] && this.events[eventName].push !== undefined && typeof func === "function") { this.events[eventName].push(func); } else if (this.events[eventName] === undefined || this.events[eventName].push === undefined) { @@ -756,7 +775,6 @@ var cEmitter = function () { this.events[eventName][i](args); } return this; - //也许会有emitter.emit(..).emit(..)的写法?一次执行俩事件,实在不知道哪里有用... } }]); @@ -764,7 +782,7 @@ var cEmitter = function () { }(); var cBase = function () { function cBase() { - var rootNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : document.documentElement; + var rootNode = arguments.length <= 0 || arguments[0] === undefined ? document.documentElement : arguments[0]; _classCallCheck(this, cBase); diff --git a/dist/cplayer.js.map b/dist/cplayer.js.map index 9dab775..0cc03c9 100644 --- a/dist/cplayer.js.map +++ b/dist/cplayer.js.map @@ -1 +1 @@ -{"version":3,"sources":["cplayer.js"],"names":["cPlayer","options","transLock","EVENTS","emitter","cEmitter","on","eventName","func","DEFAULTS","document","getElementById","Object","assign","undefined","SVG","i","keys","length","svg","createElementNS","setAttribute","CBASE","cBase","now","dragging","contain","target","createElement","lyric","classList","add","lyricBody","appendChild","controls","cLeft","musicDescription","image","metaBak","musicMeta","div","musicName","musicArtist","playIcon","replaceInner","playArrow","cCenter","time","timeBody","timeLine","timePoint","cRight","volume","volumeButton","volumePower","volumeOff","volumeBody","volumeLine","volumePoint","listButton","listPower","playlistPlay","lyricButton","lyricPower","note","list","listBody","element","root","getElementsByTagName","__LIST__","getByClass","getByTagName","toggleIcon","toggle","volumeIcon","music","autoplay","isPaused","play","pause","hasLyric","contains","showLyric","hideLyric","hasList","showList","hideList","isMuted","muted","updateTime","slideLyric","currentTime","style","loop","next","addEventListener","emit","ev","a","dragPercentage","onplay","defineProperty","set","check","refreshList","parent","type","parentNode","width","clientX","offsetLeft","offsetWidth","vol","duration","vl","checkLevel","volumeDown","volumeUp","console","log","seeking","dom","name","artist","url","img","src","innerHTML","refreshLyric","paused","id","remove","lb","to","u","ln","push","content","isTrans","lr","transLyric","split","lrcs","onelrc","match","splice","lyricsarray","parseInt","parseFloat","Error","count","sort","b","__LYRIC__","lyricToTop","halfBody","translateY","lrc","childNodes","offsetTop","clientHeight","getElementsByClassName","n","SyntaxError","TypeError","index","arguments","source","key","prototype","hasOwnProperty","call","typeList","events","args","rootNode","documentElement","styleList","indexOf","browser","oldElement","newElement","cloneNode","removeChild","innerContent","className","parentElement","tagName","start","end","Math","random","RangeError","property","slice","toUpperCase","window"],"mappings":";;;;;;AAAA;;;;AAIA,IAAMA;AACD,kBAAYC,OAAZ,EAAqB;AAAA;;AAAA;;AACpB,OAAKC,SAAL,GAAiB,KAAjB;AACG,MAAMC,SAAS;AACX,WAAqB,EADV,EACc;AACzB,YAAqB,EAFV,EAEc;AACzB,mBAAqB,EAHV;AAIX,iBAAqB,EAJV;AAKX,qBAAqB,EALV;AAMX,YAAqB,EANV;AAOX;AACA;AACA,aAAqB,EATV;AAUX,eAAqB,EAVV;AAWX,WAAqB,EAXV;AAYX,iBAAqB,EAZV;AAaX,kBAAqB,EAbV;AAcX,gBAAqB,EAdV;AAeX,iBAAqB,EAfV;AAgBX,sBAAqB,EAhBV;AAiBX,qBAAqB,EAjBV;AAkBX,uBAAqB;AAlBV,GAAf;AAoBA,OAAKC,OAAL,GAAe,IAAIC,QAAJ,CAAaF,MAAb,CAAf;AACA,OAAKG,EAAL,GAAU,UAACC,SAAD,EAAWC,IAAX;AAAA,UAAkB,MAAKJ,OAAL,CAAaE,EAAb,CAAgBC,SAAhB,EAA0BC,IAA1B,CAAlB;AAAA,GAAV;AACA;;;AAGA,MAAMC,WAAW;AACb,cAAWC,SAASC,cAAT,CAAwB,SAAxB,CADE;AAEb,WAAW;AAFE,GAAjB;AAIA,MAAGC,OAAOC,MAAP,KAAkBC,SAArB,EAA+B;AAC3B,QAAKb,OAAL,GAAeW,OAAOC,MAAP,CAAc,EAAd,EAAkBJ,QAAlB,EAA4BR,OAA5B,CAAf;AACH;;AAED;AACA,OAAKc,GAAL,GAAW;AACP,gBAAiB,kBADV;AAEP,YAAiB,sCAFV;AAGP,mBAAiB,uEAHV;AAIP,WAAiB,4GAJV;AAKP,eAAiB,0MALV;AAMP,iBAAiB,+BANV;AAOP,gBAAiB,qXAPV;AAQP,iBAAiB;AARV,GAAX;AAUA,GAAC,YAAI;AACD,QAAI,IAAIC,IAAI,CAAR,EAAUC,OAAOL,OAAOK,IAAP,CAAY,MAAKF,GAAjB,CAAjB,EAAuCG,SAASD,KAAKC,MAAzD,EAAgEF,IAAEE,MAAlE,EAAyEF,GAAzE,EAA6E;AACzE,QAAIG,MAAMT,SAASU,eAAT,CAAyB,4BAAzB,EAAsD,KAAtD,CAAV;AACI,QAAGH,KAAKD,CAAL,MAAU,cAAb,EAA4B;AACxBG,SAAIE,YAAJ,CAAiB,SAAjB,EAA2B,eAA3B;AACAF,SAAIE,YAAJ,CAAiB,mBAAjB,EAAqC,mBAArC;AACH,KAHD,MAGK;AACDF,SAAIE,YAAJ,CAAiB,SAAjB,EAA2B,WAA3B;AACH;AACDF,UAAMF,KAAKD,CAAL,MAAU,cAAV,GACL,+IAA+I,MAAKD,GAAL,CAASE,KAAKD,CAAL,CAAT,CAA/I,GAAmK,WAD9J,GAEL,qGAAqG,MAAKD,GAAL,CAASE,KAAKD,CAAL,CAAT,CAArG,GAAyH,WAF1H;AAGJ,UAAKD,GAAL,CAASE,KAAKD,CAAL,CAAT,IAAoBG,GAApB;AACH;AACJ,GAdD;;AAgBA,OAAKG,KAAL,GAAa,IAAIC,KAAJ,EAAb;AACA,OAAKC,GAAL,GAAW,CAAX;AACA,OAAKC,QAAL,GAAgB,EAACC,SAAS,KAAV,EAAiBC,QAAQb,SAAzB,EAAhB;AACA;AACA,GAAC,YAAI;AACD,OAAId,UAAUU,SAASkB,aAAT,CAAuB,UAAvB,CAAd;AACI,OAAIC,QAAQnB,SAASkB,aAAT,CAAuB,KAAvB,CAAZ;AACIC,SAAMC,SAAN,CAAgBC,GAAhB,CAAoB,OAApB;AACAF,SAAMC,SAAN,CAAgBC,GAAhB,CAAoB,WAApB;AACI,OAAIC,YAAYtB,SAASkB,aAAT,CAAuB,YAAvB,CAAhB;AACJC,SAAMI,WAAN,CAAkBD,SAAlB;AACJ,OAAIE,WAAWxB,SAASkB,aAAT,CAAuB,KAAvB,CAAf;AACIM,YAASJ,SAAT,CAAmBC,GAAnB,CAAuB,UAAvB;AACI,OAAII,QAAQzB,SAASkB,aAAT,CAAuB,KAAvB,CAAZ;AACIO,SAAML,SAAN,CAAgBC,GAAhB,CAAoB,QAApB;AACI,OAAIK,mBAAmB1B,SAASkB,aAAT,CAAuB,KAAvB,CAAvB;AACIQ,oBAAiBN,SAAjB,CAA2BC,GAA3B,CAA+B,mBAA/B;AACI,OAAIM,QAAQ3B,SAASkB,aAAT,CAAuB,KAAvB,CAAZ;AACIS,SAAMP,SAAN,CAAgBC,GAAhB,CAAoB,OAApB;AACI,OAAIO,UAAU5B,SAASkB,aAAT,CAAuB,KAAvB,CAAd;AACIU,WAAQR,SAAR,CAAkBC,GAAlB,CAAsB,UAAtB;AACRM,SAAMJ,WAAN,CAAkBK,OAAlB;AACJ,OAAIC,YAAY7B,SAASkB,aAAT,CAAuB,KAAvB,CAAhB;AACIW,aAAUT,SAAV,CAAoBC,GAApB,CAAwB,YAAxB;AACI,OAAIS,MAAM9B,SAASkB,aAAT,CAAuB,KAAvB,CAAV;AACI,OAAIa,YAAY/B,SAASkB,aAAT,CAAuB,MAAvB,CAAhB;AACIa,aAAUX,SAAV,CAAoBC,GAApB,CAAwB,YAAxB;AACJ,OAAIW,cAAchC,SAASkB,aAAT,CAAuB,MAAvB,CAAlB;AACIc,eAAYZ,SAAZ,CAAsBC,GAAtB,CAA0B,cAA1B;AACJS,OAAIP,WAAJ,CAAgBQ,SAAhB;AACAD,OAAIP,WAAJ,CAAgBS,WAAhB;AACRH,aAAUN,WAAV,CAAsBO,GAAtB;AACRJ,oBAAiBH,WAAjB,CAA6BI,KAA7B;AACAD,oBAAiBH,WAAjB,CAA6BM,SAA7B;AACJ,OAAII,WAAWjC,SAASkB,aAAT,CAAuB,GAAvB,CAAf;AACIe,YAASb,SAAT,CAAmBC,GAAnB,CAAuB,WAAvB;AACA,SAAKT,KAAL,CAAWsB,YAAX,CAAwBD,QAAxB,EAAiC,MAAK5B,GAAL,CAAS8B,SAA1C;AACRV,SAAMF,WAAN,CAAkBG,gBAAlB;AACAD,SAAMF,WAAN,CAAkBU,QAAlB;AACJ,OAAIG,UAAUpC,SAASkB,aAAT,CAAuB,KAAvB,CAAd;AACIkB,WAAQhB,SAAR,CAAkBC,GAAlB,CAAsB,UAAtB;AACI,OAAIgB,OAAOrC,SAASkB,aAAT,CAAuB,KAAvB,CAAX;AACImB,QAAKjB,SAAL,CAAeC,GAAf,CAAmB,MAAnB;AACI,OAAIiB,WAAWtC,SAASkB,aAAT,CAAuB,KAAvB,CAAf;AACIoB,YAASlB,SAAT,CAAmBC,GAAnB,CAAuB,WAAvB;AACI,OAAIkB,WAAWvC,SAASkB,aAAT,CAAuB,KAAvB,CAAf;AACIqB,YAASnB,SAAT,CAAmBC,GAAnB,CAAuB,WAAvB;AACH,OAAImB,YAAYxC,SAASkB,aAAT,CAAuB,KAAvB,CAAhB;AACIsB,aAAUpB,SAAV,CAAoBC,GAApB,CAAwB,YAAxB;AACPkB,YAAShB,WAAT,CAAqBiB,SAArB;AACFF,YAASf,WAAT,CAAqBgB,QAArB;AACRF,QAAKd,WAAL,CAAiBe,QAAjB;AACRF,WAAQb,WAAR,CAAoBc,IAApB;AACJ,OAAII,SAASzC,SAASkB,aAAT,CAAuB,KAAvB,CAAb;AACIuB,UAAOrB,SAAP,CAAiBC,GAAjB,CAAqB,SAArB;AACI,OAAIqB,SAAS1C,SAASkB,aAAT,CAAuB,KAAvB,CAAb;AACIwB,UAAOtB,SAAP,CAAiBC,GAAjB,CAAqB,QAArB;AACI,OAAIsB,eAAe3C,SAASkB,aAAT,CAAuB,KAAvB,CAAnB;AACIyB,gBAAavB,SAAb,CAAuBC,GAAvB,CAA2B,eAA3B;AACI,OAAIuB,cAAc5C,SAASkB,aAAT,CAAuB,GAAvB,CAAlB;AACI0B,eAAYxB,SAAZ,CAAsBC,GAAtB,CAA0B,cAA1B;AACA,SAAKT,KAAL,CAAWsB,YAAX,CAAwBU,WAAxB,EAAoC,MAAKvC,GAAL,CAASwC,SAA7C;AACRF,gBAAapB,WAAb,CAAyBqB,WAAzB;AACJ,OAAIE,aAAa9C,SAASkB,aAAT,CAAuB,KAAvB,CAAjB;AACI4B,cAAW1B,SAAX,CAAqBC,GAArB,CAAyB,aAAzB;AACI,OAAI0B,aAAa/C,SAASkB,aAAT,CAAuB,KAAvB,CAAjB;AACI6B,cAAW3B,SAAX,CAAqBC,GAArB,CAAyB,aAAzB;AACH,OAAI2B,cAAchD,SAASkB,aAAT,CAAuB,KAAvB,CAAlB;AACI8B,eAAY5B,SAAZ,CAAsBC,GAAtB,CAA0B,cAA1B;AACP0B,cAAWxB,WAAX,CAAuByB,WAAvB;AACFF,cAAWvB,WAAX,CAAuBwB,UAAvB;AACRL,UAAOnB,WAAP,CAAmBoB,YAAnB;AACAD,UAAOnB,WAAP,CAAmBuB,UAAnB;AACJ,OAAIG,aAAajD,SAASkB,aAAT,CAAuB,KAAvB,CAAjB;AACI+B,cAAW7B,SAAX,CAAqBC,GAArB,CAAyB,aAAzB;AACI,OAAI6B,YAAYlD,SAASkB,aAAT,CAAuB,GAAvB,CAAhB;AACIgC,aAAU9B,SAAV,CAAoBC,GAApB,CAAwB,YAAxB;AACA,SAAKT,KAAL,CAAWsB,YAAX,CAAwBgB,SAAxB,EAAkC,MAAK7C,GAAL,CAAS8C,YAA3C;AACRF,cAAW1B,WAAX,CAAuB2B,SAAvB;AACJ,OAAIE,cAAcpD,SAASkB,aAAT,CAAuB,KAAvB,CAAlB;AACIkC,eAAYhC,SAAZ,CAAsBC,GAAtB,CAA0B,cAA1B;AACI,OAAIgC,aAAarD,SAASkB,aAAT,CAAuB,GAAvB,CAAjB;AACImC,cAAWjC,SAAX,CAAqBC,GAArB,CAAyB,aAAzB;AACA,SAAKT,KAAL,CAAWsB,YAAX,CAAwBmB,UAAxB,EAAmC,MAAKhD,GAAL,CAASiD,IAA5C;AACRF,eAAY7B,WAAZ,CAAwB8B,UAAxB;AACRZ,UAAOlB,WAAP,CAAmBmB,MAAnB;AACAD,UAAOlB,WAAP,CAAmB0B,UAAnB;AACAR,UAAOlB,WAAP,CAAmB6B,WAAnB;AACR5B,YAASD,WAAT,CAAqBE,KAArB;AACAD,YAASD,WAAT,CAAqBa,OAArB;AACAZ,YAASD,WAAT,CAAqBkB,MAArB;AACJ,OAAIc,OAAOvD,SAASkB,aAAT,CAAuB,KAAvB,CAAX;AACIqC,QAAKnC,SAAL,CAAeC,GAAf,CAAmB,MAAnB;AACAkC,QAAKnC,SAAL,CAAeC,GAAf,CAAmB,WAAnB;AACI,OAAImC,WAAWxD,SAASkB,aAAT,CAAuB,WAAvB,CAAf;AACJqC,QAAKhC,WAAL,CAAiBiC,QAAjB;AACRlE,WAAQiC,WAAR,CAAoBJ,KAApB;AACA7B,WAAQiC,WAAR,CAAoBC,QAApB;AACAlC,WAAQiC,WAAR,CAAoBgC,IAApB;AACA,SAAKhE,OAAL,CAAakE,OAAb,CAAqBlC,WAArB,CAAiCjC,OAAjC;AACH,GAhGD;AAiGA,OAAKsB,KAAL,CAAW8C,IAAX,GAAkB,KAAKnE,OAAL,CAAakE,OAAb,CAAqBE,oBAArB,CAA0C,UAA1C,CAAlB;AACA,OAAK/C,KAAL,CAAW8C,IAAX,GAAkB,KAAK9C,KAAL,CAAW8C,IAAX,CAAgB,KAAK9C,KAAL,CAAW8C,IAAX,CAAgBlD,MAAhB,GAAuB,CAAvC,CAAlB;AACA;AACA,OAAKoD,QAAL,GAAgB;AACZ,YAAe,KAAKhD,KAAL,CAAWiD,UAAX,CAAsB,OAAtB,CADH;AAEZ,gBAAe,KAAKjD,KAAL,CAAWkD,YAAX,CAAwB,YAAxB,CAFH;AAGZ,aAAe,KAAKlD,KAAL,CAAWiD,UAAX,CAAsB,WAAtB,CAHH;AAIZ,UAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,UAAtB,CAJH;AAKZ,WAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,YAAtB,CALH;AAMZ,aAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,cAAtB,CANH;AAOZ,WAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,MAAtB,CAPH;AAQZ,eAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,WAAtB,CARH;AASZ,gBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,YAAtB,CATH;AAUZ,iBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,aAAtB,CAVH;AAWZ,kBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,cAAtB,CAXH;AAYZ,iBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,aAAtB,CAZH;AAaZ,kBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,cAAtB,CAbH;AAcZ,gBAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,YAAtB,CAdH;AAeZ,WAAe,KAAKjD,KAAL,CAAWiD,UAAX,CAAsB,MAAtB,CAfH;AAgBZ,eAAe,KAAKjD,KAAL,CAAWkD,YAAX,CAAwB,WAAxB;AAhBH,GAAhB;AAkBA,OAAKF,QAAL,CAAcG,UAAd,GAA2B,KAAKnD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,KAAKF,QAAL,CAAcI,MAA5C,CAA3B;AACA,OAAKJ,QAAL,CAAcK,UAAd,GAA2B,KAAKrD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,KAAKF,QAAL,CAAchB,WAA5C,CAA3B;;AAGA,OAAKsB,KAAL,GAAalE,SAASkB,aAAT,CAAuB,OAAvB,CAAb;AACA,OAAKgD,KAAL,CAAWC,QAAX,GAAsB,CAAC,CAAC,KAAK5E,OAAL,CAAa4E,QAArC;AACA;;AAEA,OAAKzE,OAAL,CAAaE,EAAb,CAAgB,QAAhB,EAAyB,YAAI;AACzB,OAAI,MAAKwE,QAAL,EAAJ,EAAqB;AACjB,UAAKC,IAAL;AACH,IAFD,MAEO;AACH,UAAKC,KAAL;AACH;AACJ,GAND,EAMG1E,EANH,CAMM,iBANN,EAMwB,YAAI;AACxB,OAAI,MAAK2E,QAAL,CAAc,MAAKzD,GAAnB,KAA2B,MAAK8C,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BoD,QAA9B,CAAuC,WAAvC,CAA/B,EAAoF;AAChF,UAAKC,SAAL;AACH,IAFD,MAEO,IAAI,MAAKF,QAAL,CAAc,MAAKzD,GAAnB,KAA2B,CAAC,MAAK8C,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BoD,QAA9B,CAAuC,WAAvC,CAAhC,EAAqF;AACxF,UAAKE,SAAL;AACH;AACJ,GAZD,EAYG9E,EAZH,CAYM,gBAZN,EAYuB,YAAI;AACvB,OAAI,MAAK+E,OAAL,MAAkB,MAAKf,QAAL,CAAcL,IAAd,CAAmBnC,SAAnB,CAA6BoD,QAA7B,CAAsC,WAAtC,CAAtB,EAA0E;AACtE,UAAKI,QAAL;AACH,IAFD,MAEO,IAAI,MAAKL,QAAL,MAAmB,CAAC,MAAKX,QAAL,CAAcL,IAAd,CAAmBnC,SAAnB,CAA6BoD,QAA7B,CAAsC,WAAtC,CAAxB,EAA4E;AAC/E,UAAKK,QAAL;AACH;AACJ,GAlBD,EAkBGjF,EAlBH,CAkBM,kBAlBN,EAkByB,YAAI;AACzB,OAAI,MAAKkF,OAAL,EAAJ,EAAoB;AAChB,UAAKZ,KAAL,CAAWa,KAAX,GAAmB,KAAnB;AACH,IAFD,MAEO;AACH,UAAKrC,MAAL,CAAY,CAAZ;AACH;AACJ,GAxBD,EAwBG9C,EAxBH,CAwBM,YAxBN,EAwBmB,YAAI;AACnB,SAAKoF,UAAL;AACA,OAAI,MAAKT,QAAL,CAAc,MAAKzD,GAAnB,CAAJ,EAA6B;AACzB,UAAKmE,UAAL,CAAgB,MAAKf,KAAL,CAAWgB,WAA3B;AACH;AACJ,GA7BD,EA6BGtF,EA7BH,CA6BM,cA7BN,EA6BqB,YAAI;AACrB,SAAK8C,MAAL,GADqB,CACN;AAClB,GA/BD,EA+BG9C,EA/BH,CA+BM,OA/BN,EA+Bc,YAAI;AACd,SAAKgB,KAAL,CAAWsB,YAAX,CAAwB,MAAK0B,QAAL,CAAcI,MAAtC,EAA6C,MAAK3D,GAAL,CAAS8B,SAAtD;AACA;AACA;AACH,GAnCD,EAmCGvC,EAnCH,CAmCM,MAnCN,EAmCa,YAAI;AACb,SAAKgB,KAAL,CAAWsB,YAAX,CAAwB,MAAK0B,QAAL,CAAcI,MAAtC,EAA6C,MAAK3D,GAAL,CAASiE,KAAtD;AACA;AACA,SAAKV,QAAL,CAAcG,UAAd,GAA2B,MAAKnD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,MAAKF,QAAL,CAAcI,MAA5C,CAA3B;AACH,GAvCD,EAuCGpE,EAvCH,CAuCM,OAvCN,EAuCc,YAAI;AACd;AACA,SAAKgB,KAAL,CAAWuE,KAAX,CAAiB,MAAKvB,QAAL,CAActC,SAA/B,EAAyC,WAAzC,EAAqD,EAArD;AACA,OAAI,MAAK/B,OAAL,CAAagE,IAAb,CAAkB,MAAKzC,GAAvB,EAA4BsE,IAA5B,KAAqC,IAAzC,EAA+C;AACvC,UAAKJ,UAAL,CAAgB,CAAhB;AACA,UAAKX,IAAL;AACP,IAHD,MAGM,IAAI,MAAKM,OAAL,MAAgB,MAAK7D,GAAL,KAAa,MAAKvB,OAAL,CAAagE,IAAb,CAAkB/C,MAAlB,GAAyB,CAA1D,EAA6D;AAC/D,UAAK6E,IAAL;AACH;AACJ,GAhDD;;AAkDA;;;AAGA,MAAG,KAAK9F,OAAL,CAAagE,IAAb,CAAkB,CAAlB,CAAH,EAAyB,KAAKS,MAAL;AACzB,OAAKJ,QAAL,CAAcI,MAAd,CAAqBsB,gBAArB,CAAsC,OAAtC,EAA+C;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,QAAlB,CAAJ;AAAA,GAA/C;AACA,OAAK3B,QAAL,CAAcP,UAAd,CAAyBiC,gBAAzB,CAA0C,OAA1C,EAAmD;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,iBAAlB,CAAJ;AAAA,GAAnD;AACA,OAAK3B,QAAL,CAAcV,SAAd,CAAwBoC,gBAAxB,CAAyC,OAAzC,EAAkD;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,gBAAlB,CAAJ;AAAA,GAAlD;AACA,OAAK3B,QAAL,CAAchB,WAAd,CAA0B0C,gBAA1B,CAA2C,OAA3C,EAAoD;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,kBAAlB,CAAJ;AAAA,GAApD;AACA,OAAKrB,KAAL,CAAWoB,gBAAX,CAA4B,cAA5B,EAA4C,UAACE,EAAD;AAAA,UAAM,MAAK9F,OAAL,CAAa6F,IAAb,CAAkB,cAAlB,EAAiCC,EAAjC,CAAN;AAAA,GAA5C;AACA,OAAKtB,KAAL,CAAWoB,gBAAX,CAA4B,YAA5B,EAA0C,UAACE,EAAD;AAAA,UAAM,MAAK9F,OAAL,CAAa6F,IAAb,CAAkB,YAAlB,EAA+BC,EAA/B,CAAN;AAAA,GAA1C;AACA,OAAKtB,KAAL,CAAWoB,gBAAX,CAA4B,gBAA5B,EAA8C;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,gBAAlB,CAAJ;AAAA,GAA9C;AACA,OAAKrB,KAAL,CAAWoB,gBAAX,CAA4B,OAA5B,EAAqC;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,OAAlB,CAAJ;AAAA,GAArC;AACA,OAAKrB,KAAL,CAAWoB,gBAAX,CAA4B,MAA5B,EAAoC;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,MAAlB,CAAJ;AAAA,GAApC;AACA,OAAKrB,KAAL,CAAWoB,gBAAX,CAA4B,OAA5B,EAAqC;AAAA,UAAI,MAAK5F,OAAL,CAAa6F,IAAb,CAAkB,OAAlB,CAAJ;AAAA,GAArC;AACA;AACA,OAAKhG,OAAL,CAAakE,OAAb,CAAqB6B,gBAArB,CAAsC,WAAtC,EAAmD,UAACG,CAAD;AAAA,UAAK,MAAKC,cAAL,CAAoBD,CAApB,CAAL;AAAA,GAAnD;AACA,OAAKlG,OAAL,CAAakE,OAAb,CAAqB6B,gBAArB,CAAsC,WAAtC,EAAmD,UAACG,CAAD;AAAA,UAAK,MAAKC,cAAL,CAAoBD,CAApB,CAAL;AAAA,GAAnD;AACA,OAAKlG,OAAL,CAAakE,OAAb,CAAqB6B,gBAArB,CAAsC,SAAtC,EAAiD,UAACG,CAAD;AAAA,UAAK,MAAKC,cAAL,CAAoBD,CAApB,CAAL;AAAA,GAAjD;AACA;;AAEA;AACA,MAAG,KAAKvB,KAAL,CAAWyB,MAAX,GAAoBvF,SAAvB,EAAkCF,OAAO0F,cAAP,CAAsB1B,KAAtB,EAA4B,QAA5B,EAAqC,EAAC2B,KAAI,aAASC,KAAT,EAAe;AACvF,QAAGA,QAAQ,IAAX,EAAgB;AACZ,UAAKpG,OAAL,CAAa6F,IAAb,CAAkB,OAAlB;AACH,KAFD,MAEK;AACD,UAAK7F,OAAL,CAAa6F,IAAb,CAAkB,MAAlB;AACH;AACJ,IANsE,EAArC;AAOlC;;AAEA,OAAK7C,MAAL;AACA,OAAKqD,WAAL;AACH;;AAnRA;AAAA;AAAA,iCAqRcxG,OArRd,EAqRuB;AACvB,OAAIyG,eAAJ;AACG,WAAQzG,QAAQ0G,IAAhB;AACI,SAAK,WAAL;AACI,SAAI,EAAE1G,QAAQ0B,MAAR,KAAmB,KAAK2C,QAAL,CAAcpB,SAAjC,IAA8CjD,QAAQ0B,MAAR,KAAmB,KAAK2C,QAAL,CAAcZ,WAAjF,CAAJ,EAAmG;AACnG,UAAKjC,QAAL,CAAcC,OAAd,GAAwB,IAAxB;AACA,UAAKD,QAAL,CAAcE,MAAd,GAAuB1B,QAAQ0B,MAA/B;AACA;AACJ,SAAK,WAAL;AACI,SAAI,KAAKF,QAAL,CAAcC,OAAd,KAA0B,KAA9B,EAAqC;AACrCgF,cAAS,KAAKjF,QAAL,CAAcE,MAAd,CAAqBiF,UAArB,CAAgCA,UAAzC;AACA,SAAIF,OAAO5E,SAAP,CAAiBoD,QAAjB,CAA0B,aAA1B,CAAJ,EAA8C;AAC1C,WAAKZ,QAAL,CAAcb,UAAd,CAAyBoC,KAAzB,CAA+BgB,KAA/B,GAAuC,CAAC5G,QAAQ6G,OAAR,GAAkBJ,OAAOK,UAA1B,IAAwCL,OAAOM,WAA/C,GAA6D,GAA7D,GAAmE,GAA1G;AACH,MAFD,MAEO,IAAIN,OAAO5E,SAAP,CAAiBoD,QAAjB,CAA0B,WAA1B,CAAJ,EAA4C;AAC/C,WAAKZ,QAAL,CAAcrB,QAAd,CAAuB4C,KAAvB,CAA6BgB,KAA7B,GAAqC,CAAC5G,QAAQ6G,OAAR,GAAkBJ,OAAOK,UAA1B,IAAwCL,OAAOM,WAA/C,GAA6D,GAA7D,GAAmE,GAAxG;AACH;AACD;AACA,SAAIN,OAAO5E,SAAP,CAAiBoD,QAAjB,CAA0B,aAA1B,CAAJ,EAA8C;AAC1C,UAAI+B,MAAM,CAAChH,QAAQ6G,OAAR,GAAkBJ,OAAOK,UAA1B,IAAwCL,OAAOM,WAAzD;AACAC,YAAMA,MAAM,CAAN,GAAU,CAAV,GAAcA,GAApB;AACAA,YAAMA,MAAM,CAAN,GAAU,CAAV,GAAcA,GAApB;AACA,WAAKrC,KAAL,CAAWxB,MAAX,GAAoB6D,GAApB;AACH;AACD;AACJ,SAAK,SAAL;AACI,SAAI,KAAKxF,QAAL,CAAcC,OAAd,KAA0B,KAA9B,EAAqC;AACrCgF,cAAS,KAAKjF,QAAL,CAAcE,MAAd,CAAqBiF,UAArB,CAAgCA,UAAzC;AACA,SAAIF,OAAO5E,SAAP,CAAiBoD,QAAjB,CAA0B,aAA1B,CAAJ,EAA8C;AAC1C,UAAI+B,OAAM,CAAChH,QAAQ6G,OAAR,GAAkBJ,OAAOK,UAA1B,IAAwCL,OAAOM,WAAzD;AACAC,aAAMA,OAAM,CAAN,GAAU,CAAV,GAAcA,IAApB;AACAA,aAAMA,OAAM,CAAN,GAAU,CAAV,GAAcA,IAApB;AACA,WAAKrC,KAAL,CAAWxB,MAAX,GAAoB6D,IAApB;AACH,MALD,MAKO,IAAIP,OAAO5E,SAAP,CAAiBoD,QAAjB,CAA0B,WAA1B,CAAJ,EAA4C;AAC/C,UAAInC,OAAO,CAAC9C,QAAQ6G,OAAR,GAAkBJ,OAAOK,UAA1B,IAAwCL,OAAOM,WAA1D;AACAjE,aAAOA,OAAO,CAAP,GAAW,CAAX,GAAeA,IAAtB;AACAA,aAAOA,OAAO,CAAP,GAAW,CAAX,GAAeA,IAAtB;AACA,WAAK2C,UAAL,CAAgB3C,OAAO,KAAK6B,KAAL,CAAWsC,QAAlC;AACH;AACD,UAAKzF,QAAL,CAAcC,OAAd,GAAwB,KAAxB;AACA,UAAKD,QAAL,CAAcE,MAAd,GAAuBb,SAAvB;AACA;AAtCR;AAwCH;AA/TA;AAAA;AAAA,2BAiUsB;AAAA;;AAAA,OAAhBqG,EAAgB,uEAAXrG,SAAW;;AACnB,OAAIsG,aAAa,SAAbA,UAAa,GAAI;AACjB,QAAG,OAAKxC,KAAL,CAAWxB,MAAX,KAAoB,CAApB,IAAuB,OAAKoC,OAAL,EAA1B,EAAyC;AACrC,YAAKlE,KAAL,CAAWsB,YAAX,CAAwB,OAAK0B,QAAL,CAAchB,WAAtC,EAAkD,OAAKvC,GAAL,CAASwC,SAA3D;AACA,YAAKe,QAAL,CAAcK,UAAd,GAA2B,OAAKrD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,OAAKF,QAAL,CAAchB,WAA5C,CAA3B;AACH,KAHD,MAGO,IAAG,OAAKsB,KAAL,CAAWxB,MAAX,GAAkB,CAAlB,IAAqB,OAAKwB,KAAL,CAAWxB,MAAX,IAAmB,GAA3C,EAA+C;AAClD,YAAK9B,KAAL,CAAWsB,YAAX,CAAwB,OAAK0B,QAAL,CAAchB,WAAtC,EAAkD,OAAKvC,GAAL,CAASsG,UAA3D;AACA,YAAK/C,QAAL,CAAcK,UAAd,GAA2B,OAAKrD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,OAAKF,QAAL,CAAchB,WAA5C,CAA3B;AACH,KAHM,MAGA,IAAG,OAAKsB,KAAL,CAAWxB,MAAX,GAAkB,GAAlB,IAAuB,OAAKwB,KAAL,CAAWxB,MAAX,IAAmB,CAA7C,EAA+C;AAClD,YAAK9B,KAAL,CAAWsB,YAAX,CAAwB,OAAK0B,QAAL,CAAchB,WAAtC,EAAkD,OAAKvC,GAAL,CAASuG,QAA3D;AACA,YAAKhD,QAAL,CAAcK,UAAd,GAA2B,OAAKrD,KAAL,CAAWkD,YAAX,CAAwB,KAAxB,EAA8B,OAAKF,QAAL,CAAchB,WAA5C,CAA3B;AACH,KAHM,MAGA;AACHiE,aAAQC,GAAR,CAAY,wBAAsB,OAAK5C,KAAL,CAAWxB,MAA7C;AACH;AACJ,IAbD;AAcA,OAAI+D,OAAOrG,SAAX,EAAsB;AAClB,SAAKwD,QAAL,CAAcb,UAAd,CAAyBoC,KAAzB,CAA+BgB,KAA/B,GAAwC,KAAKjC,KAAL,CAAWxB,MAAX,GAAoB,GAArB,GAA4B,GAAnE;AACAgE;AACA,WAAO,KAAK5B,OAAL,KAAiB,CAAjB,GAAqB,KAAKZ,KAAL,CAAWxB,MAAvC;AACH,IAJD,MAIO;AACH,QAAI+D,OAAO,CAAX,EAAc;AACV,UAAKvC,KAAL,CAAWa,KAAX,GAAmB,IAAnB;AACA2B;AACH,KAHD,MAGO;AACH,UAAKxC,KAAL,CAAWxB,MAAX,GAAoB+D,EAApB;AACAC;AACH;AACJ;AACJ;AA7VA;AAAA;AAAA,4BA+VS;AACN,UAAO,KAAKxC,KAAL,CAAWa,KAAlB;AACH;AAjWA;AAAA;AAAA,yBAmWM;AACH;;;;AAIA,OAAG,KAAKb,KAAL,CAAW6C,OAAX,KAAuB,IAA1B,EAAgC,OAAO,IAAP;AAChC,QAAK7C,KAAL,CAAWG,IAAX;AACA,UAAO,IAAP;AACH;AA3WA;AAAA;AAAA,0BA6WO;AACJ,OAAG,KAAKH,KAAL,CAAW6C,OAAX,KAAuB,IAA1B,EAAgC;AAChC;AACA,QAAK7C,KAAL,CAAWI,KAAX;AACA,UAAO,IAAP;AACH;AAlXA;AAAA;AAAA,6BAoXU;AACP,QAAK5E,OAAL,CAAa6F,IAAb,CAAkB,UAAlB;AACA,OAAG,KAAKzE,GAAL,KAAa,CAAhB,EAAmB;AACnB,QAAKA,GAAL;AACA,QAAKkD,MAAL,GAAcK,IAAd;AACA,UAAO,IAAP;AACH;AA1XA;AAAA;AAAA,yBA4XM;AACH,QAAK3E,OAAL,CAAa6F,IAAb,CAAkB,MAAlB;AACA,OAAG,KAAKzE,GAAL,KAAa,KAAKvB,OAAL,CAAagE,IAAb,CAAkB/C,MAAlB,GAAyB,CAAzC,EAA4C;AAC5C,QAAKM,GAAL;AACA,QAAKkD,MAAL,GAAcK,IAAd;AACA,UAAO,IAAP;AACH;AAlYA;AAAA;AAAA,qBAoYEvD,GApYF,EAoYO;AACJ,QAAKA,GAAL,GAAWA,GAAX;AACA,QAAKkD,MAAL;AACA,QAAKK,IAAL;AACA,UAAO,IAAP;AACH;AAzYA;AAAA;AAAA,2BA2YsB;AAAA,OAAhBvD,GAAgB,uEAAV,KAAKA,GAAK;;AACnB,QAAKpB,OAAL,CAAa6F,IAAb,CAAkB,QAAlB;AACA,OAAIhC,OAAO,KAAKhE,OAAL,CAAagE,IAAb,CAAkBzC,GAAlB,CAAX;AAAA,OAAmCkG,MAAM,KAAKpD,QAA9C;AACA,QAAKM,KAAL,CAAWI,KAAX;AACA;AAJmB,cAKuD,CAACf,KAAK5B,KAAN,EAAa4B,KAAK0D,IAAlB,EAAwB1D,KAAK2D,MAA7B,EAAqC3D,KAAK4D,GAA1C,CALvD;AAKlBH,OAAII,GAAJ,CAAQC,GALU;AAKLL,OAAIC,IAAJ,CAASK,SALJ;AAKeN,OAAIE,MAAJ,CAAWI,SAL1B;AAKqC,QAAKpD,KAAL,CAAWmD,GALhD;;AAMnB,QAAK7H,SAAL,GAAiB,KAAjB;AACA,QAAK+H,YAAL;AACA,OAAI,CAAC,KAAKhD,QAAL,CAAc,KAAKzD,GAAnB,CAAL,EAA6B,KAAK4D,SAAL;AAC7B;AACA,QAAK9D,KAAL,CAAWuE,KAAX,CAAiB,KAAKvB,QAAL,CAActC,SAA/B,EAAyC,WAAzC,EAAqD,EAArD;AACA;AACA,UAAO,IAAP;AACH;AAxZA;AAAA;AAAA,2BA0ZQxB,IA1ZR,EA0Zc;AACX,OAAGA,SAASM,SAAZ,EAAuBN;AACvB,UAAO,KAAKoE,KAAL,CAAWsD,MAAlB;AACH;AA7ZA;AAAA;AAAA,6BA+ZqB;AAAA,OAAbC,EAAa,uEAAR,CAAQ;AAAA,OAAN3H,IAAM;;AAClB,OAAGA,SAASM,SAAZ,EAAuBN;AACvB,UAAQ,KAAKP,OAAL,CAAagE,IAAb,CAAkBkE,EAAlB,EAAsBtG,KAAtB,IAA+Bf,SAAvC;AACH;AAlaA;AAAA;AAAA,8BAoaW;AACR,QAAKV,OAAL,CAAa6F,IAAb,CAAkB,YAAlB,EAA+B,IAA/B;AACA,OAAI,KAAKhB,QAAL,CAAc,KAAKzD,GAAnB,CAAJ,EAA4B,KAAK8C,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BsG,MAA9B,CAAqC,WAArC;AAC5B,OAAI,CAAC,KAAK9D,QAAL,CAAcL,IAAd,CAAmBnC,SAAnB,CAA6BoD,QAA7B,CAAsC,WAAtC,CAAL,EAAyD,KAAKK,QAAL;AACzD,UAAO,IAAP;AACH;AAzaA;AAAA;AAAA,8BA2aW;AACR,QAAKnF,OAAL,CAAa6F,IAAb,CAAkB,YAAlB,EAA+B,KAA/B;AACA,QAAK3B,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BC,GAA9B,CAAkC,WAAlC;AACA,UAAO,IAAP;AACH;AA/aA;AAAA;AAAA,0BAibOvB,IAjbP,EAiba;AACV,OAAGA,SAASM,SAAZ,EAAuBN;AACvB,UAAQ,KAAKP,OAAL,CAAagE,IAAb,CAAkB/C,MAAlB,GAA2B,CAAnC;AACH;AApbA;AAAA;AAAA,2BAsbQV,IAtbR,EAsbc;AACX,QAAKJ,OAAL,CAAa6F,IAAb,CAAkB,WAAlB,EAA8B,IAA9B;AACA,QAAK3B,QAAL,CAAcL,IAAd,CAAmBnC,SAAnB,CAA6BsG,MAA7B,CAAoC,WAApC;AACA,OAAI,CAAC,KAAK9D,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BoD,QAA9B,CAAuC,WAAvC,CAAL,EAA0D,KAAKE,SAAL;AAC1D,OAAG5E,SAASM,SAAZ,EAAuBN;AACvB,UAAO,IAAP;AACH;AA5bA;AAAA;AAAA,2BA8bQA,IA9bR,EA8bc;AACX,QAAKJ,OAAL,CAAa6F,IAAb,CAAkB,WAAlB,EAA8B,KAA9B;AACA,QAAK3B,QAAL,CAAcL,IAAd,CAAmBnC,SAAnB,CAA6BC,GAA7B,CAAiC,WAAjC;AACA,OAAGvB,SAASM,SAAZ,EAAuBN;AACvB,UAAO,IAAP;AACH;AAncA;AAAA;AAAA,8BAqcWA,IArcX,EAqciB;AAAA;;AACd,QAAKJ,OAAL,CAAa6F,IAAb,CAAkB,YAAlB;AACA;AACA,OAAIhC,OAAO,KAAKhE,OAAL,CAAagE,IAAxB;AAAA,OAA8BoE,KAAK,KAAK/D,QAAL,CAAcJ,QAAjD;AACAmE,MAAGL,SAAH;;AAJc,8BAKLhH,CALK;AAMV,QAAIwB,MAAM9B,SAASkB,aAAT,CAAuB,KAAvB,CAAV;AACAY,QAAIwF,SAAJ,GAAgB,8BAA8B/D,KAAKjD,CAAL,EAAQ2G,IAAtC,GAA6C,oCAA7C,GAAoF1D,KAAKjD,CAAL,EAAQ4G,MAA5F,GAAqG,SAArH;AACApF,UAAM6F,GAAGpG,WAAH,CAAeO,GAAf,CAAN;AACAA,QAAIwD,gBAAJ,CAAqB,OAArB,EAA8B,YAAK;AAC/B,YAAKsC,EAAL,CAAQtH,CAAR;AACH,KAFD;AATU;;AAKd,QAAK,IAAIA,IAAI,CAAb,EAAgBA,KAAKiD,KAAK/C,MAAL,GAAc,CAAnC,EAAsCF,GAAtC,EAA2C;AAAA,UAAlCA,CAAkC;AAO1C;AACD,OAAGR,SAASM,SAAZ,EAAuBN;AAC1B;AAndA;AAAA;AAAA,sBAqdG+H,CArdH,EAqdK/H,IArdL,EAqdW;AAAA;;AACR;AACA,OAAIgI,KAAK,KAAKvI,OAAL,CAAagE,IAAb,CAAkBwE,IAAlB,CAAuBF,CAAvB,CAAT;AACA,OAAI/F,MAAM9B,SAASkB,aAAT,CAAuB,KAAvB,CAAV;AACAY,OAAIwF,SAAJ,GAAgB,8BAA8BO,EAAEZ,IAAhC,GAAuC,oCAAvC,GAA8EY,EAAEX,MAAhF,GAAyF,SAAzG;AACApF,SAAM,KAAK8B,QAAL,CAAcJ,QAAd,CAAuBjC,WAAvB,CAAmCO,GAAnC,CAAN;AACAA,OAAIwD,gBAAJ,CAAqB,OAArB,EAA8B,YAAK;AAC/B,WAAKsC,EAAL,CAAQE,KAAK,CAAb;AACH,IAFD;AAGA,OAAGA,OAAK,CAAR,EAAW,KAAK9D,MAAL,GATH,CASkB;AAC1B,OAAGlE,SAASM,SAAZ,EAAuBN;AAC1B;AAheA;AAAA;AAAA,0BAke0B;AAAA,OAArBkI,OAAqB,uEAAX5H,SAAW;;AACvB,OAAI4H,YAAY5H,SAAhB,EAA2B;AACvB,QAAI,KAAKmE,QAAL,CAAc,KAAKzD,GAAnB,CAAJ,EAA6B,OAAO,KAAKvB,OAAL,CAAagE,IAAb,CAAkB,KAAKzC,GAAvB,EAA4BK,KAAnC;AAChC,IAFD,MAEO;AACH,SAAK5B,OAAL,CAAagE,IAAb,CAAkB,KAAKzC,GAAvB,EAA4BK,KAA5B,GAAoC6G,OAApC;AACA,SAAKT,YAAL;AACH;AACD,UAAO,IAAP;AACH;AA1eA;AAAA;AAAA,+BA4eYU,OA5eZ,EA4eqB;AAClB;AACA,QAAKrE,QAAL,CAActC,SAAd,CAAwBgG,SAAxB;AACA,OAAI,CAAC,KAAK/C,QAAL,CAAc,KAAKzD,GAAnB,CAAL,EAA8B;AAC9B,OAAIoH,KAAO,CAAC,KAAK1I,SAAP,IAAmByI,OAAnB,GAA2B,KAAK1I,OAAL,CAAagE,IAAb,CAAkB,KAAKzC,GAAvB,EAA4BqH,UAAvD,GAAkE,KAAK5I,OAAL,CAAagE,IAAb,CAAkB,KAAKzC,GAAvB,EAA4BK,KAAxG;AACA;AACA+G,QAAKA,GAAGE,KAAH,CAAS,IAAT,CAAL;AACA,OAAIC,OAAO,EAAX;AACA,SAAK,uBAAwB,IAAI/H,IAAI,CAAR,EAAU0H,UAAQE,GAAG5H,CAAH,CAA/C,EAAqDA,IAAE4H,GAAG1H,MAA1D,EAAiEF,KAAI0H,UAAQE,GAAG5H,CAAH,CAA7E,EAAoF;AAChF,QAAI,OAAO0H,OAAP,KAAmB,QAAvB,EAAiC;AACjC,QAAIM,SAASN,QAAQI,KAAR,CAAc,cAAd,CAAb;AACA,SAAK,IAAI9H,KAAI,CAAb,EAAgBA,KAAIgI,OAAO9H,MAAP,GAAgB,CAApC,EAAuCF,IAAvC,EAA4C;AACxC,SAAIgI,OAAOhI,EAAP,MAAc,EAAd,IAAoBA,OAAMgI,OAAO9H,MAAP,GAAgB,CAA1C,IAA+C8H,OAAOhI,EAAP,EAAUiI,KAAV,CAAgB,kBAAhB,MAAsC,IAAzF,EAA+F;AAC3FD,aAAOE,MAAP,CAAclI,EAAd,EAAiB,CAAjB;AACAA;AACA;AACH;;AAED,SAAIgI,OAAOhI,EAAP,EAAUiI,KAAV,CAAgB,kBAAhB,CAAJ,EAAyC;AACrC,UAAIE,cAAcH,OAAOhI,EAAP,EAAU8H,KAAV,CAAgB,SAAhB,CAAlB;AACA,cAAQK,YAAYjI,MAApB;AACI,YAAK,CAAL;AACI8H,eAAOhI,EAAP,IAAYoI,SAASD,YAAY,CAAZ,CAAT,IAA2B,EAA3B,GAAgCC,SAASD,YAAY,CAAZ,CAAT,CAA5C;AACA;AACJ,YAAK,CAAL;AACIH,eAAOhI,EAAP,IAAYoI,SAASD,YAAY,CAAZ,CAAT,IAA2B,EAA3B,GAAgCC,SAASD,YAAY,CAAZ,CAAT,CAAhC,GAA2DE,WAAW,OAAOF,YAAY,CAAZ,CAAlB,CAAvE;AACA;AACJ;AACI,cAAM,IAAIG,KAAJ,CAAU,oBAAV,CAAN;AARR;AAUH;AACJ;;AAEDP,SAAKN,IAAL,CAAUO,MAAV;AACH;AACD;AACA,OAAInH,QAAQ,EAAZ;AACA,QAAK,IAAIb,MAAI+H,KAAK7H,MAAL,GAAc,CAA3B,EAA8BF,OAAK,CAAnC,EAAsCA,KAAtC,EAA2C;AACvC,QAAI+H,KAAK/H,GAAL,EAAQE,MAAR,GAAiB,CAArB,EAAwB;AACpB,UAAK,IAAIqI,QAAQR,KAAK/H,GAAL,EAAQE,MAAR,GAAiB,CAAlC,EAAqCqI,SAAS,CAA9C,EAAiDA,OAAjD,EAA0D;AACtD,UAAIA,UAAUR,KAAK/H,GAAL,EAAQE,MAAR,GAAiB,CAA3B,IAAgC6H,KAAK/H,GAAL,EAAQ+H,KAAK/H,GAAL,EAAQE,MAAR,GAAiB,CAAzB,MAA8BJ,SAAlE,EAA6E;AACzEe,aAAM4G,IAAN,CAAW,EAAC1F,MAAMgG,KAAK/H,GAAL,EAAQuI,KAAR,CAAP,EAAuBb,SAASK,KAAK/H,GAAL,EAAQ+H,KAAK/H,GAAL,EAAQE,MAAR,GAAiB,CAAzB,CAAhC,EAAX;AACH;AACJ;AAEJ,KAPD,MAOO,IAAG6H,KAAK/H,GAAL,EAAQ,CAAR,MAAaF,SAAhB,EAA2B;AAC9Be,WAAM4G,IAAN,CAAW,EAAC1F,MAAMgG,KAAK/H,GAAL,EAAQ,CAAR,CAAP,EAAmB0H,SAASK,KAAK/H,GAAL,EAAQ,CAAR,CAA5B,EAAX;AACH;AACJ;;AAEDa,SAAM2H,IAAN,CAAW,UAACrD,CAAD,EAAIsD,CAAJ,EAAS;AAChB,WAAOtD,EAAEpD,IAAF,GAAS0G,EAAE1G,IAAlB;AACH,IAFD;AAGAlB,SAAM,KAAN,IAAe,CAAf;AACA,QAAK6H,SAAL,GAAiB7H,KAAjB;AACA,QAAK,IAAIb,MAAI,CAAb,EAAgBA,OAAKa,MAAMX,MAAN,GAAe,CAApC,EAAuCF,KAAvC,EAA4C;AACxC,QAAIwB,MAAM9B,SAASkB,aAAT,CAAuB,KAAvB,CAAV;AACAY,QAAIwF,SAAJ,GAAgBnG,MAAMb,GAAN,EAAS0H,OAAzB;AACA,SAAKpE,QAAL,CAActC,SAAd,CAAwBC,WAAxB,CAAoCO,GAApC;AACH;AACD,QAAKpC,OAAL,CAAa6F,IAAb,CAAkB,aAAlB;AAEH;AA1iBA;AAAA;AAAA,+BA4iBiC;AAAA,OAAvBlD,IAAuB,uEAAhBjC,SAAgB;AAAA,OAANN,IAAM;;AAC9B,OAAIuC,SAASjC,SAAb,EAAuB,KAAK8D,KAAL,CAAWgB,WAAX,GAAyB7C,IAAzB;AACvB,OAAI,KAAKtB,QAAL,CAAcC,OAAd,KAA0B,KAA9B,EAAqC,KAAK4C,QAAL,CAAcrB,QAAd,CAAuB4C,KAAvB,CAA6BgB,KAA7B,GAAsC,KAAKjC,KAAL,CAAWgB,WAAX,GAAyB,KAAKhB,KAAL,CAAWsC,QAArC,GAAiD,GAAjD,GAAuD,GAA5F;AACrC;AACA,OAAG1G,SAASM,SAAZ,EAAuBN,KAAK,KAAKoE,KAAL,CAAWgB,WAAhB;AACvB;AACH;AAljBA;AAAA;AAAA,6BAojBU7C,IApjBV,EAojBe;AACZ;AACA,OAAG,KAAKuB,QAAL,CAAczC,KAAd,CAAoBC,SAApB,CAA8BoD,QAA9B,CAAuC,WAAvC,CAAH,EAAwD;AACxD;AACA,OAAIyE,mBAAJ;AAAA,OACCC,iBADD;AAAA,OAECC,mBAFD;AAAA,OAGC7H,YAAU,KAAKsC,QAAL,CAActC,SAHzB;AAAA,OAIC8H,MAAM,KAAKxF,QAAL,CAActC,SAAd,CAAwBqC,oBAAxB,CAA6C,KAA7C,CAJP;AAKA;AACA,QAAK,IAAIrD,IAAI,KAAK0I,SAAL,CAAexI,MAAf,GAAwB,CAAhC,EAAmCW,QAAQ,KAAK6H,SAAL,CAAe1I,CAAf,CAAhD,EAAmEA,KAAK,CAAxE,EAA2Ea,QAAQ,KAAK6H,SAAL,CAAe1I,IAAE,CAAjB,CAAR,EAA4BA,GAAvG,EAA4G;AAC3G,QAAGa,MAAMkB,IAAN,GAAWA,IAAd,EACC,IAAG,KAAK2G,SAAL,CAAe1I,IAAE,CAAjB,CAAH,EACA,IAAG,KAAK0I,SAAL,CAAe1I,IAAE,CAAjB,EAAoB+B,IAApB,GAAyBA,IAA5B,EAAkC;AACnC,QAAGlB,MAAMkB,IAAN,GAAWA,IAAX,IAAiB,CAAC,KAAK2G,SAAL,CAAe1I,IAAE,CAAjB,CAArB,EAA0C;AACzC,QAAG,KAAK0I,SAAL,CAAe,KAAf,MAAwB1I,IAAE,CAA7B,EACC,KAAK0I,SAAL,CAAe,KAAf,IAAsB1I,IAAE,CAAxB;AACE8I,QAAI9I,IAAE,CAAN,EAASc,SAAT,CAAmBC,GAAnB,CAAuB,KAAvB;AACH4H,iBAAc3H,UAAU+H,UAAV,CAAqB/I,IAAE,CAAvB,EAA0BgJ,SAA1B,GAAsChI,UAAU+H,UAAV,CAAqB,CAArB,EAAwBC,SAA9D,GAA0E,MAAMhI,UAAU+H,UAAV,CAAqB/I,IAAE,CAAvB,EAA0BiJ,YAAxH;AACAL,eAAc,MAAM,KAAKtF,QAAL,CAAczC,KAAd,CAAoBoI,YAA1B,GAAyCjI,UAAU+H,UAAV,CAAqB/I,IAAE,CAAvB,EAA0BiJ,YAAjF;AACAJ,iBAAc,EAAEF,aAAaC,QAAf,CAAd;AACA,SAAKtI,KAAL,CAAWuE,KAAX,CAAiB7D,SAAjB,EAA2B,WAA3B,EAAuC,gBAAgB6H,UAAhB,GAA6B,KAApE;AACA,QAAI5F,OAAO,KAAKK,QAAL,CAActC,SAAd,CAAwBkI,sBAAxB,CAA+C,KAA/C,CAAX;AACG,QAAGjG,KAAK/C,MAAL,GAAY,CAAf,EACC,KAAK,IAAIiJ,IAAIlG,KAAK/C,MAAL,GAAc,CAA3B,EAA8BiJ,KAAK,CAAnC,EAAsCA,GAAtC;AACC,SAAGlG,KAAKkG,CAAL,MAAUL,IAAI9I,IAAE,CAAN,CAAb,EACCiD,KAAKkG,CAAL,EAAQrI,SAAR,CAAkBsG,MAAlB,CAAyB,KAAzB;AAFF;AAGL;AACJ;AAhlBA;AAAA;AAAA,8BAilBU;AACV,OAAG,CAAC,KAAKnI,OAAL,CAAagE,IAAb,CAAkB,KAAKzC,GAAvB,EAA4BqH,UAA7B,IAAyC,CAAC,KAAK5D,QAAL,CAAc,KAAKzD,GAAnB,CAA7C,EAAsE,OAAO,KAAP;AACtE,QAAKyG,YAAL,CAAkB,IAAlB;AACA,QAAK/H,SAAL,GAAiB,IAAjB;AACA;AArlBA;AAAA;AAAA,sBAslBW;AACR,UAAO,KAAKD,OAAL,CAAagE,IAAb,CAAkB/C,MAAzB;AACH,GAxlBA;AAAA,oBAylBUA,MAzlBV,EAylBiB;AACd,SAAM,IAAIkJ,WAAJ,CAAgB,qBAAhB,CAAN;AACH;AA3lBA;;AAAA;AAAA,GAAN;;AA8lBA;AACA,IAAI,OAAOxJ,OAAOC,MAAd,IAAwB,UAA5B,EAAwC;AACrCD,QAAOC,MAAP,GAAgB,UAASc,MAAT,EAAiB;AAC/B;;AACA,MAAIA,UAAU,IAAd,EAAoB;AAClB,SAAM,IAAI0I,SAAJ,CAAc,4CAAd,CAAN;AACD;;AAED1I,WAASf,OAAOe,MAAP,CAAT;AACA,OAAK,IAAI2I,QAAQ,CAAjB,EAAoBA,QAAQC,UAAUrJ,MAAtC,EAA8CoJ,OAA9C,EAAuD;AACrD,OAAIE,SAASD,UAAUD,KAAV,CAAb;AACA,OAAIE,UAAU,IAAd,EAAoB;AAClB,SAAK,IAAIC,GAAT,IAAgBD,MAAhB,EAAwB;AACtB,SAAI5J,OAAO8J,SAAP,CAAiBC,cAAjB,CAAgCC,IAAhC,CAAqCJ,MAArC,EAA6CC,GAA7C,CAAJ,EAAuD;AACrD9I,aAAO8I,GAAP,IAAcD,OAAOC,GAAP,CAAd;AACD;AACF;AACF;AACF;AACD,SAAO9I,MAAP;AACD,EAlBD;AAmBF;;AAED,IAAMtB;AACD,mBAAYwK,QAAZ,EAAqB;AAAA;;AACjB,MAAGA,QAAH,EAAY;AACR,QAAKC,MAAL,GAAcD,QAAd;AACH,GAFD,MAEK;AACD,QAAKC,MAAL,GAAc,EAAd;AACH;AACJ;;AAPA;AAAA;AAAA,qBAQEvK,SARF,EAQYC,IARZ,EAQiB;AACd;AACA,OAAG,KAAKsK,MAAL,CAAYvK,SAAZ,KAAwB,KAAKuK,MAAL,CAAYvK,SAAZ,EAAuBkI,IAAvB,KAAgC3H,SAAxD,IAAmE,OAAON,IAAP,KAAgB,UAAtF,EAAiG;AAC7F,SAAKsK,MAAL,CAAYvK,SAAZ,EAAuBkI,IAAvB,CAA4BjI,IAA5B;AACH,IAFD,MAEM,IAAG,KAAKsK,MAAL,CAAYvK,SAAZ,MAAyBO,SAAzB,IAAoC,KAAKgK,MAAL,CAAYvK,SAAZ,EAAuBkI,IAAvB,KAA8B3H,SAArE,EAA+E;AACjF,SAAKgK,MAAL,CAAYvK,SAAZ,IAAyB,EAAzB;AACH,IAFK,MAED;AACD,UAAM,IAAI8J,SAAJ,CAAc,gCAAd,CAAN;AACH;AACD,UAAO,IAAP;AACH;AAlBA;AAAA;AAAA,uBAmBI9J,SAnBJ,EAmBsB;AAAA,qCAALwK,IAAK;AAALA,QAAK;AAAA;;AACnB,QAAI,IAAI/J,IAAI,CAAZ,EAAcA,IAAE,KAAK8J,MAAL,CAAYvK,SAAZ,EAAuBW,MAAvC,EAA8CF,GAA9C,EAAkD;AAC9C,SAAK8J,MAAL,CAAYvK,SAAZ,EAAuBS,CAAvB,EAA0B+J,IAA1B;AACH;AACD,UAAO,IAAP;AACA;AACH;AAzBA;;AAAA;AAAA,GAAN;AA2BA,IAAMxJ;AACD,kBAA8C;AAAA,MAAlCyJ,QAAkC,uEAAzBtK,SAASuK,eAAgB;;AAAA;;AAC1C,OAAK7G,IAAL,GAAY4G,QAAZ;AACA,OAAI,IAAIE,YAAYxK,SAASuK,eAAT,CAAyBpF,KAAzC,EAA+C7E,IAAIkK,UAAUhK,MAAjE,EAAwEF,IAAE,CAA1E,EAA4EA,GAA5E,EAAgF;AAC5E,OAAGkK,UAAUlK,CAAV,EAAamK,OAAb,CAAqB,UAArB,MAAmC,CAAC,CAAvC,EAAyC;AACrC,SAAKC,OAAL,GAAe,QAAf;AACA;AACH;AACD,OAAGF,UAAUlK,CAAV,EAAamK,OAAb,CAAqB,OAArB,MAAgC,CAAC,CAApC,EAAsC;AAClC,SAAKC,OAAL,GAAe,KAAf;AACA;AACH;AACD,OAAGF,UAAUlK,CAAV,EAAamK,OAAb,CAAqB,KAArB,MAA8B,CAAC,CAAlC,EAAoC;AAChC,SAAKC,OAAL,GAAe,GAAf;AACA;AACH;AACD,OAAGF,UAAUlK,CAAV,EAAamK,OAAb,CAAqB,MAArB,MAA+B,CAAC,CAAnC,EAAqC;AACjC,SAAKC,OAAL,GAAe,IAAf;AACA;AACH;AACJ;AACJ;;AArBA;AAAA;AAAA,0BAsBOC,UAtBP,EAsBkBC,UAtBlB,EAsB6B;AAC1B;AACAA,gBAAaA,WAAWC,SAAX,CAAqB,IAArB,CAAb;AACAF,cAAWzE,UAAX,CAAsB3E,WAAtB,CAAkCqJ,UAAlC;AACAD,cAAWzE,UAAX,CAAsB4E,WAAtB,CAAkCH,UAAlC;AACA;AACH;AA5BA;AAAA;AAAA,+BA6BYlH,OA7BZ,EA6BoBsH,YA7BpB,EA6BiC;AAC9B;AACAtH,WAAQ6D,SAAR,GAAoByD,YAApB;AACH;AAhCA;AAAA;AAAA,6BAiCUC,SAjCV,EAiCoBC,aAjCpB,EAiCkC;AAC/B,UAAOA,iBAAe7K,SAAf,GAAyB6K,cAAczB,sBAAd,CAAqCwB,SAArC,EAAgD,CAAhD,CAAzB,GAA4E,KAAKtH,IAAL,CAAU8F,sBAAV,CAAiCwB,SAAjC,EAA4C,CAA5C,CAAnF;AACH;AAnCA;AAAA;AAAA,+BAoCYE,OApCZ,EAoCoBD,aApCpB,EAoCkC;AAC/B,UAAOA,iBAAe7K,SAAf,GAAyB6K,cAActH,oBAAd,CAAmCuH,OAAnC,EAA4C,CAA5C,CAAzB,GAAwE,KAAKxH,IAAL,CAAUC,oBAAV,CAA+BuH,OAA/B,EAAwC,CAAxC,CAA/E;AACH;AAtCA;AAAA;AAAA,uBAuCIC,KAvCJ,EAuCUC,GAvCV,EAuCc;AACX,OAAGD,UAAQ/K,SAAR,IAAmBgL,QAAMhL,SAA5B,EAAuC,OAAOiL,KAAKC,MAAL,EAAP;AACvC,OAAGH,QAAMC,GAAT,EAAc,MAAM,IAAIG,UAAJ,CAAe,mDAAf,CAAN;AACd,UAAO,CAACH,MAAID,KAAL,IAAYE,KAAKC,MAAL,EAAZ,GAA0BH,KAAjC;AACH;AA3CA;AAAA;AAAA,wBA4CKnE,GA5CL,EA4CSwE,QA5CT,EA4CkBxD,OA5ClB,EA4C0B;AACvBhB,OAAI7B,KAAJ,CAAU,KAAKuF,OAAL,GAAac,SAASC,KAAT,CAAe,CAAf,EAAiB,CAAjB,EAAoBC,WAApB,EAAb,GAA+CF,SAASC,KAAT,CAAe,CAAf,CAAzD,IAA8EzD,OAA9E;AACAhB,OAAI7B,KAAJ,CAAUqG,QAAV,IAAsBxD,OAAtB;AACH;AA/CA;;AAAA;AAAA,GAAN;AAiDA,IAAG2D,MAAH,EAAUA,OAAOrM,OAAP,GAAiBA,OAAjB","file":"cplayer.js","sourcesContent":["/*\r\n \tcPlayer\r\n Author\tCorps\r\n */\r\nconst cPlayer = class cPlayer {\r\n\t constructor(options) {\r\n\t \tthis.transLock = false;\r\n\t const EVENTS = {\r\n\t \"play\" :[], //When Music be played, Emit.\r\n\t \"pause\" :[], //When Music be paused, Emit.\r\n\t \"volumechange\" :[],\r\n\t \"timeupdate\" :[],\r\n\t \"canplaythrough\" :[],\r\n\t \"ended\" :[],\r\n\t //All the above are binded on AUDIO Elements,\r\n\t //The following items are Function's callback function.\r\n\t \"toggle\" :[],\r\n\t \"previous\" :[],\r\n\t \"next\" :[],\r\n\t \"changeList\" :[],\r\n\t \"changeLyric\" :[],\r\n\t \"slideList\" :[],\r\n\t \"slideLyric\" :[],\r\n\t \"clickLyricPower\" :[],\r\n\t \"clickListPower\" :[],\r\n\t \"clickVolumePower\" :[],\r\n\t };\r\n\t this.emitter = new cEmitter(EVENTS);\r\n\t this.on = (eventName,func)=>this.emitter.on(eventName,func);\r\n\t /*\r\n\t * 參數处理,合并默认参数与定义參數\r\n\t */\r\n\t const DEFAULTS = {\r\n\t \"element\": document.getElementById(\"cplayer\"),\r\n\t \"list\" : []\r\n\t };\r\n\t if(Object.assign !== undefined){\r\n\t this.options = Object.assign({}, DEFAULTS, options);\r\n\t }\r\n\r\n\t //SVG建立\r\n\t this.SVG = {\r\n\t \"playArrow\" :'M16 10v28l22-14z',\r\n\t \"pause\" :'M12 38h8V10h-8v28zm16-28v28h8V10h-8z',\r\n\t \"playlistPlay\" :'M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z',\r\n\t \"note\" :'M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z',\r\n\t \"volumeUp\" :'M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z',\r\n\t \"volumeMute\" :'M14 18v12h8l10 10V8L22 18h-8z',\r\n\t \"volumeOff\" :'M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z',\r\n\t \"volumeDown\" :'M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z',\r\n\t };\r\n\t (()=>{\r\n\t for(let i = 0,keys = Object.keys(this.SVG),length = keys.length;i' :\r\n\t '';\r\n\t this.SVG[keys[i]] = svg;\r\n\t }\r\n\t })();\r\n\r\n\t this.CBASE = new cBase;\r\n\t this.now = 0;\r\n\t this.dragging = {contain: false, target: undefined};\r\n\t //现在开始填DOM\r\n\t (()=>{\r\n\t let cPlayer = document.createElement(\"c-player\");\r\n\t let lyric = document.createElement(\"div\");\r\n\t lyric.classList.add(\"lyric\");\r\n\t lyric.classList.add(\"invisible\");\r\n\t let lyricBody = document.createElement(\"lyric-body\");\r\n\t lyric.appendChild(lyricBody);\r\n\t let controls = document.createElement(\"div\");\r\n\t controls.classList.add(\"controls\");\r\n\t let cLeft = document.createElement(\"div\");\r\n\t cLeft.classList.add(\"c-left\");\r\n\t let musicDescription = document.createElement(\"div\");\r\n\t musicDescription.classList.add(\"music-description\");\r\n\t let image = document.createElement(\"div\");\r\n\t image.classList.add(\"image\");\r\n\t let metaBak = document.createElement(\"img\");\r\n\t metaBak.classList.add(\"meta-bak\");\r\n\t image.appendChild(metaBak);\r\n\t let musicMeta = document.createElement(\"div\");\r\n\t musicMeta.classList.add(\"music-meta\");\r\n\t let div = document.createElement(\"div\");\r\n\t let musicName = document.createElement(\"span\");\r\n\t musicName.classList.add(\"music-name\");\r\n\t let musicArtist = document.createElement(\"span\");\r\n\t musicArtist.classList.add(\"music-artist\");\r\n\t div.appendChild(musicName);\r\n\t div.appendChild(musicArtist);\r\n\t musicMeta.appendChild(div);\r\n\t musicDescription.appendChild(image);\r\n\t musicDescription.appendChild(musicMeta);\r\n\t let playIcon = document.createElement(\"a\");\r\n\t playIcon.classList.add(\"play-icon\");\r\n\t this.CBASE.replaceInner(playIcon,this.SVG.playArrow);\r\n\t cLeft.appendChild(musicDescription);\r\n\t cLeft.appendChild(playIcon);\r\n\t let cCenter = document.createElement(\"div\");\r\n\t cCenter.classList.add(\"c-center\");\r\n\t let time = document.createElement(\"div\");\r\n\t time.classList.add(\"time\");\r\n\t let timeBody = document.createElement(\"div\");\r\n\t timeBody.classList.add(\"time-body\");\r\n\t let timeLine = document.createElement(\"div\");\r\n\t timeLine.classList.add(\"time-line\");\r\n\t\t let timePoint = document.createElement(\"div\");\r\n\t\t timePoint.classList.add(\"time-point\");\r\n\t \t\ttimeLine.appendChild(timePoint);\r\n\t timeBody.appendChild(timeLine);\r\n\t time.appendChild(timeBody);\r\n\t cCenter.appendChild(time);\r\n\t let cRight = document.createElement(\"div\");\r\n\t cRight.classList.add(\"c-right\");\r\n\t let volume = document.createElement(\"div\");\r\n\t volume.classList.add(\"volume\");\r\n\t let volumeButton = document.createElement(\"div\");\r\n\t volumeButton.classList.add(\"volume-button\");\r\n\t let volumePower = document.createElement(\"a\");\r\n\t volumePower.classList.add(\"volume-power\");\r\n\t this.CBASE.replaceInner(volumePower,this.SVG.volumeOff);\r\n\t volumeButton.appendChild(volumePower);\r\n\t let volumeBody = document.createElement(\"div\");\r\n\t volumeBody.classList.add(\"volume-body\");\r\n\t let volumeLine = document.createElement(\"div\");\r\n\t volumeLine.classList.add(\"volume-line\");\r\n\t\t let volumePoint = document.createElement(\"div\");\r\n\t\t volumePoint.classList.add(\"volume-point\");\r\n\t \t\tvolumeLine.appendChild(volumePoint);\r\n\t volumeBody.appendChild(volumeLine);\r\n\t volume.appendChild(volumeButton);\r\n\t volume.appendChild(volumeBody);\r\n\t let listButton = document.createElement(\"div\");\r\n\t listButton.classList.add(\"list-button\");\r\n\t let listPower = document.createElement(\"a\");\r\n\t listPower.classList.add(\"list-power\");\r\n\t this.CBASE.replaceInner(listPower,this.SVG.playlistPlay);\r\n\t listButton.appendChild(listPower);\r\n\t let lyricButton = document.createElement(\"div\");\r\n\t lyricButton.classList.add(\"lyric-button\");\r\n\t let lyricPower = document.createElement(\"a\");\r\n\t lyricPower.classList.add(\"lyric-power\");\r\n\t this.CBASE.replaceInner(lyricPower,this.SVG.note);\r\n\t lyricButton.appendChild(lyricPower);\r\n\t cRight.appendChild(volume);\r\n\t cRight.appendChild(listButton);\r\n\t cRight.appendChild(lyricButton);\r\n\t controls.appendChild(cLeft);\r\n\t controls.appendChild(cCenter);\r\n\t controls.appendChild(cRight);\r\n\t let list = document.createElement(\"div\");\r\n\t list.classList.add(\"list\");\r\n\t list.classList.add(\"invisible\");\r\n\t let listBody = document.createElement(\"list-body\");\r\n\t list.appendChild(listBody);\r\n\t cPlayer.appendChild(lyric);\r\n\t cPlayer.appendChild(controls);\r\n\t cPlayer.appendChild(list);\r\n\t this.options.element.appendChild(cPlayer);\r\n\t })();\r\n\t this.CBASE.root = this.options.element.getElementsByTagName(\"c-player\");\r\n\t this.CBASE.root = this.CBASE.root[this.CBASE.root.length-1];\r\n\t //然后为DOMList填充一下吧\r\n\t this.__LIST__ = {\r\n\t \"lyric\" : this.CBASE.getByClass(\"lyric\"),\r\n\t \"lyricBody\" : this.CBASE.getByTagName(\"lyric-body\"),\r\n\t \"toggle\" : this.CBASE.getByClass(\"play-icon\"),\r\n\t \"img\" : this.CBASE.getByClass(\"meta-bak\"),\r\n\t \"name\" : this.CBASE.getByClass(\"music-name\"),\r\n\t \"artist\" : this.CBASE.getByClass(\"music-artist\"),\r\n\t \"time\" : this.CBASE.getByClass(\"time\"),\r\n\t \"timeLine\" : this.CBASE.getByClass(\"time-line\"),\r\n\t \"timePoint\" : this.CBASE.getByClass(\"time-point\"),\r\n\t \"lyricPower\" : this.CBASE.getByClass(\"lyric-power\"),\r\n\t \"volumePower\": this.CBASE.getByClass(\"volume-power\"),\r\n\t \"volumeLine\" : this.CBASE.getByClass(\"volume-line\"),\r\n\t \"volumePoint\": this.CBASE.getByClass(\"volume-point\"),\r\n\t \"listPower\" : this.CBASE.getByClass(\"list-power\"),\r\n\t \"list\" : this.CBASE.getByClass(\"list\"),\r\n\t \"listBody\" : this.CBASE.getByTagName(\"list-body\")\r\n\t };\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\r\n\r\n\t this.music = document.createElement(\"audio\");\r\n\t this.music.autoplay = !!this.options.autoplay;\r\n\t //绑定事件开始:\r\n\r\n\t this.emitter.on(\"toggle\",()=>{\r\n\t if (this.isPaused()) {\r\n\t this.play();\r\n\t } else {\r\n\t this.pause();\r\n\t }\r\n\t }).on(\"clickLyricPower\",()=>{\r\n\t if (this.hasLyric(this.now) && this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.showLyric();\r\n\t } else if (this.hasLyric(this.now) && !this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.hideLyric();\r\n\t }\r\n\t }).on(\"clickListPower\",()=>{\r\n\t if (this.hasList() && this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.showList();\r\n\t } else if (this.hasLyric() && !this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.hideList();\r\n\t }\r\n\t }).on(\"clickVolumePower\",()=>{\r\n\t if (this.isMuted()) {\r\n\t this.music.muted = false;\r\n\t } else {\r\n\t this.volume(0);\r\n\t }\r\n\t }).on(\"timeupdate\",()=>{\r\n\t this.updateTime();\r\n\t if (this.hasLyric(this.now)) {\r\n\t this.slideLyric(this.music.currentTime);\r\n\t }\r\n\t }).on(\"volumechange\",()=>{\r\n\t this.volume(); //做更新界面用.\r\n\t }).on(\"pause\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.playArrow);\r\n\t //再赋值,更新内容.\r\n\t //this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"play\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.pause);\r\n\t //再赋值,更新内容.\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"ended\",()=>{\r\n\t //this.__LIST__.lyricBody.style.transform = \"\"; 为了兼容性封装一遍\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t if (this.options.list[this.now].loop === true) {\r\n\t this.updateTime(0);\r\n\t this.play();\r\n\t }else if (this.hasList()&&this.now !== this.options.list.length-1) {\r\n\t this.next();\r\n\t }\r\n\t });\r\n\r\n\t //结束\r\n\r\n\r\n\t if(this.options.list[0]) this.toggle();\r\n\t this.__LIST__.toggle.addEventListener(\"click\", ()=>this.emitter.emit(\"toggle\"));\r\n\t this.__LIST__.lyricPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickLyricPower\"));\r\n\t this.__LIST__.listPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickListPower\"));\r\n\t this.__LIST__.volumePower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickVolumePower\"));\r\n\t this.music.addEventListener(\"volumechange\", (ev)=>this.emitter.emit(\"volumechange\",ev));\r\n\t this.music.addEventListener(\"timeupdate\", (ev)=>this.emitter.emit(\"timeupdate\",ev));\r\n\t this.music.addEventListener(\"canplaythrough\", ()=>this.emitter.emit(\"canplaythrough\"));\r\n\t this.music.addEventListener(\"pause\", ()=>this.emitter.emit(\"pause\"));\r\n\t this.music.addEventListener(\"play\", ()=>this.emitter.emit(\"play\"));\r\n\t this.music.addEventListener(\"ended\", ()=>this.emitter.emit(\"ended\"));\r\n\t //以下内容不适合使用cEmitter,所以就不使用了.\r\n\t this.options.element.addEventListener(\"mousedown\", (a)=>this.dragPercentage(a));\r\n\t this.options.element.addEventListener(\"mousemove\", (a)=>this.dragPercentage(a));\r\n\t this.options.element.addEventListener(\"mouseup\", (a)=>this.dragPercentage(a));\r\n\t //以上内容不适合使用cEmitter,所以就不使用了.\r\n\r\n\t //以下内容是为了兼容UC\r\n\t if(this.music.onplay = undefined) Object.defineProperty(music,\"paused\",{set:function(check){\r\n\t if(check = true){\r\n\t this.emitter.emit(\"pause\");\r\n\t }else{\r\n\t this.emitter.emit(\"play\");\r\n\t }\r\n\t }});\r\n\t //以上内容是为了兼容UC\r\n\r\n\t this.volume();\r\n\t this.refreshList();\r\n\t };\r\n\r\n\t dragPercentage(options) {\r\n\t \tlet parent;\r\n\t switch (options.type) {\r\n\t case \"mousedown\":\r\n\t if (!(options.target !== this.__LIST__.timePoint || options.target !== this.__LIST__.volumePoint)) return;\r\n\t this.dragging.contain = true;\r\n\t this.dragging.target = options.target;\r\n\t break;\r\n\t case \"mousemove\":\r\n\t if (this.dragging.contain === false) return;\r\n\t parent = this.dragging.target.parentNode.parentNode;\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t this.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t this.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t }\r\n\t //实时修正VOLUME(某人强烈要求)\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t vol = vol > 1 ? 1 : vol;\r\n\t vol = vol < 0 ? 0 : vol;\r\n\t this.music.volume = vol;\r\n\t }\r\n\t break;\r\n\t case \"mouseup\":\r\n\t if (this.dragging.contain === false) return;\r\n\t parent = this.dragging.target.parentNode.parentNode;\r\n\t if (parent.classList.contains(\"volume-body\")) {\r\n\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t vol = vol > 1 ? 1 : vol;\r\n\t vol = vol < 0 ? 0 : vol;\r\n\t this.music.volume = vol;\r\n\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t time = time > 1 ? 1 : time;\r\n\t time = time < 0 ? 0 : time;\r\n\t this.updateTime(time * this.music.duration);\r\n\t }\r\n\t this.dragging.contain = false;\r\n\t this.dragging.target = undefined;\r\n\t break;\r\n\t }\r\n\t }\r\n\r\n\t volume(vl = undefined) {\r\n\t let checkLevel = ()=>{\r\n\t if(this.music.volume===0||this.isMuted()){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeOff);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0&&this.music.volume<=0.5){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeDown);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0.5&&this.music.volume<=1){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeUp);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else {\r\n\t console.log(\"Unexcepted Volume: \"+this.music.volume);\r\n\t }\r\n\t }\r\n\t if (vl === undefined) {\r\n\t this.__LIST__.volumeLine.style.width = (this.music.volume * 100) + \"%\";\r\n\t checkLevel();\r\n\t return this.isMuted() ? 0 : this.music.volume;\r\n\t } else {\r\n\t if (vl === 0) {\r\n\t this.music.muted = true;\r\n\t checkLevel();\r\n\t } else {\r\n\t this.music.volume = vl;\r\n\t checkLevel();\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t isMuted() {\r\n\t return this.music.muted;\r\n\t }\r\n\r\n\t play() {\r\n\t /*this.interval = setInterval(()=>{\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t },500);\r\n\t */\r\n\t if(this.music.seeking === true) return this;\r\n\t this.music.play();\r\n\t return this;\r\n\t }\r\n\r\n\t pause() {\r\n\t if(this.music.seeking === true) return;\r\n\t //clearInterval(this.interval);\r\n\t this.music.pause();\r\n\t return this;\r\n\t }\r\n\r\n\t previous() {\r\n\t this.emitter.emit(\"previous\");\r\n\t if(this.now === 0) return;\r\n\t this.now--;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t next() {\r\n\t this.emitter.emit(\"next\");\r\n\t if(this.now === this.options.list.length-1) return;\r\n\t this.now++;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t to(now) {\r\n\t this.now = now;\r\n\t this.toggle();\r\n\t this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t toggle(now = this.now) {\r\n\t this.emitter.emit(\"toggle\");\r\n\t let list = this.options.list[now], dom = this.__LIST__;\r\n\t this.music.pause();\r\n\t //if(this.music.ended)this.music.load();\r\n\t [dom.img.src, dom.name.innerHTML, dom.artist.innerHTML, this.music.src] = [list.image, list.name, list.artist, list.url];\r\n\t this.transLock = false;\r\n\t this.refreshLyric();\r\n\t if (!this.hasLyric(this.now))this.hideLyric();\r\n\t //this.__LIST__.lyricBody.style.transform = \"\";\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t //this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t isPaused(func) {\r\n\t if(func !== undefined) func();\r\n\t return this.music.paused;\r\n\t }\r\n\r\n\t hasLyric(id = 0,func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list[id].lyric != undefined);\r\n\t }\r\n\r\n\t showLyric() {\r\n\t this.emitter.emit(\"slideLyric\",true);\r\n\t if (this.hasLyric(this.now))this.__LIST__.lyric.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.list.classList.contains(\"invisible\")) this.hideList();\r\n\t return this;\r\n\t }\r\n\r\n\t hideLyric() {\r\n\t this.emitter.emit(\"slideLyric\",false);\r\n\t this.__LIST__.lyric.classList.add(\"invisible\");\r\n\t return this;\r\n\t }\r\n\r\n\t hasList(func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list.length > 1);\r\n\t }\r\n\r\n\t showList(func) {\r\n\t this.emitter.emit(\"slideList\",true);\r\n\t this.__LIST__.list.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.lyric.classList.contains(\"invisible\")) this.hideLyric();\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t hideList(func) {\r\n\t this.emitter.emit(\"slideList\",false);\r\n\t this.__LIST__.list.classList.add(\"invisible\");\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t refreshList(func) {\r\n\t this.emitter.emit(\"changeList\");\r\n\t //let __SELF__ = this;\r\n\t let list = this.options.list, lb = this.__LIST__.listBody;\r\n\t lb.innerHTML = ``;\r\n\t for (let i = 0; i <= list.length - 1; i++) {\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + list[i].name + '' + list[i].artist + '';\r\n\t div = lb.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(i);\r\n\t });\r\n\t }\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t add(u,func) {\r\n\t //let __SELF__ = this;\r\n\t let ln = this.options.list.push(u);\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + u.name + '' + u.artist + '';\r\n\t div = this.__LIST__.listBody.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(ln - 1);\r\n\t });\r\n\t if(ln===1) this.toggle(); //刷新元素.\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t lyric(content = undefined) {\r\n\t if (content === undefined) {\r\n\t if (this.hasLyric(this.now)) return this.options.list[this.now].lyric;\r\n\t } else {\r\n\t this.options.list[this.now].lyric = content;\r\n\t this.refreshLyric();\r\n\t }\r\n\t return this;\r\n\t }\r\n\r\n\t refreshLyric(isTrans) {\r\n\t //REQUIRE LYRIC...\r\n\t this.__LIST__.lyricBody.innerHTML = ``;\r\n\t if (!this.hasLyric(this.now)) return;\r\n\t let lr = ((!this.transLock)&&isTrans?this.options.list[this.now].transLyric:this.options.list[this.now].lyric);\r\n\t //START LRC BASEING...\r\n\t lr = lr.split(\"\\n\");\r\n\t let lrcs = [];\r\n\t for (/* let content of lr */ let i = 0,content=lr[i];i= 0; i--) {\r\n\t if (lrcs[i].length > 2) {\r\n\t for (let count = lrcs[i].length - 1; count >= 0; count--) {\r\n\t if (count !== lrcs[i].length - 1 && lrcs[i][lrcs[i].length - 1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][count], content: lrcs[i][lrcs[i].length - 1]});\r\n\t }\r\n\t }\r\n\r\n\t } else if(lrcs[i][1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][0], content: lrcs[i][1]});\r\n\t }\r\n\t }\r\n\r\n\t lyric.sort((a, b)=> {\r\n\t return a.time - b.time;\r\n\t });\r\n\t lyric[\"now\"] = 0;\r\n\t this.__LYRIC__ = lyric;\r\n\t for (let i = 0; i <= lyric.length - 1; i++) {\r\n\t let div = document.createElement(\"lrc\");\r\n\t div.innerHTML = lyric[i].content;\r\n\t this.__LIST__.lyricBody.appendChild(div);\r\n\t }\r\n\t this.emitter.emit(\"changeLyric\");\r\n\r\n\t }\r\n\r\n\t updateTime(time = undefined,func) {\r\n\t if (time !== undefined)this.music.currentTime = time;\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t //if(this.isPaused()) this.play();\r\n\t if(func !== undefined) func(this.music.currentTime);\r\n\t //return this.music.currentTime;\r\n\t }\r\n\r\n\t slideLyric(time){\r\n\t //如果没开歌词,就不干事了\r\n\t if(this.__LIST__.lyric.classList.contains(\"invisible\")) return;\r\n\t //声明变量\r\n\t let lyricToTop,\r\n\t \thalfBody,\r\n\t \ttranslateY,\r\n\t \tlyricBody=this.__LIST__.lyricBody,\r\n\t \tlrc = this.__LIST__.lyricBody.getElementsByTagName(\"lrc\");\r\n\t //遍历Lyric,寻找当前时间的歌词\r\n\t for (let i = this.__LYRIC__.length - 1, lyric = this.__LYRIC__[i]; i >= 0; lyric = this.__LYRIC__[i-1],i--) {\r\n\t \tif(lyric.time>time)\r\n\t \t\tif(this.__LYRIC__[i-1])\r\n\t \t\tif(this.__LYRIC__[i-1].time>time) continue;\r\n\t \tif(lyric.time1)\r\n\t\t\t for (let n = list.length - 1; n >= 0; n--)\r\n\t\t\t \tif(list[n]!==lrc[i-1])\r\n\t\t\t \t\tlist[n].classList.remove(\"now\");\r\n\t }\r\n\t }\r\n\t translate(){\r\n\t \tif(!this.options.list[this.now].transLyric||!this.hasLyric(this.now)) return false;\r\n\t \tthis.refreshLyric(true);\r\n\t \tthis.transLock = true;\r\n\t }\r\n\t get length(){\r\n\t return this.options.list.length;\r\n\t }\r\n\t set length(length){\r\n\t throw new SyntaxError(\"Read-only Property.\");\r\n\t }\r\n}\r\n\r\n//Object.assign 解决方案\r\nif (typeof Object.assign != 'function') {\r\n\t Object.assign = function(target) {\r\n\t 'use strict';\r\n\t if (target == null) {\r\n\t throw new TypeError('Cannot convert undefined or null to object');\r\n\t }\r\n\r\n\t target = Object(target);\r\n\t for (var index = 1; index < arguments.length; index++) {\r\n\t var source = arguments[index];\r\n\t if (source != null) {\r\n\t for (var key in source) {\r\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n\t target[key] = source[key];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return target;\r\n\t };\r\n}\r\n\r\nconst cEmitter = class cEmitter{\r\n\t constructor(typeList){\r\n\t if(typeList){\r\n\t this.events = typeList;\r\n\t }else{\r\n\t this.events = [];\r\n\t }\r\n\t }\r\n\t on(eventName,func){\r\n\t //func的参数这样写:function([参数A,参数B]){}或者箭头函数([参数A,参数B])=>{}\r\n\t if(this.events[eventName]&&this.events[eventName].push !== undefined&&typeof func === \"function\"){\r\n\t this.events[eventName].push(func);\r\n\t }else if(this.events[eventName]===undefined||this.events[eventName].push===undefined){\r\n\t this.events[eventName] = [];\r\n\t }else{\r\n\t throw new TypeError(\"Uncaught Unexcepted TypeError.\")\r\n\t }\r\n\t return this;\r\n\t }\r\n\t emit(eventName,...args){\r\n\t for(let i = 0;i0;i--){\r\n\t if(styleList[i].indexOf(\"-webkit-\")!==-1){\r\n\t this.browser = \"webkit\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-moz-\")!==-1){\r\n\t this.browser = \"moz\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-o-\")!==-1){\r\n\t this.browser = \"o\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-ms-\")!==-1){\r\n\t this.browser = \"ms\";\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t replace(oldElement,newElement){\r\n\t //newElement 不存在于oldElement 的父元素中,首先载入.\r\n\t newElement = newElement.cloneNode(true);\r\n\t oldElement.parentNode.appendChild(newElement);\r\n\t oldElement.parentNode.removeChild(oldElement);\r\n\t //顺便如果有值为oldElement的变量,请重新赋值.\r\n\t }\r\n\t replaceInner(element,innerContent){\r\n\t //进行一次简单的封装\r\n\t element.innerHTML = innerContent;\r\n\t }\r\n\t getByClass(className,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByClassName(className)[0]:this.root.getElementsByClassName(className)[0];\r\n\t }\r\n\t getByTagName(tagName,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByTagName(tagName)[0]:this.root.getElementsByTagName(tagName)[0];\r\n\t }\r\n\t rand(start,end){\r\n\t if(start===undefined||end===undefined) return Math.random();\r\n\t if(start>end) throw new RangeError(\"the EndNumber must be bigger than the StartNumber\");\r\n\t return (end-start)*Math.random()+start;\r\n\t }\r\n\t style(dom,property,content){\r\n\t dom.style[this.browser+property.slice(0,1).toUpperCase()+property.slice(1)] = content;\r\n\t dom.style[property] = content;\r\n\t }\r\n}\r\nif(window)window.cPlayer = cPlayer;"],"sourceRoot":"/source/"} \ No newline at end of file +{"version":3,"sources":["cplayer.js"],"names":[],"mappings":"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","file":"cplayer.js","sourcesContent":["/*\r\n \tcPlayer\r\n Author\tCorps\r\n */\r\nconst cPlayer = class cPlayer {\r\n\t constructor(options) {\r\n\t \tthis.transLock = false;\r\n\t const EVENTS = {\r\n\t \"play\" :[], //When Music be played, Emit.\r\n\t \"pause\" :[], //When Music be paused, Emit.\r\n\t \"volumechange\" :[],\r\n\t \"timeupdate\" :[],\r\n\t \"canplaythrough\" :[],\r\n\t \"ended\" :[],\r\n\t //All the above are binded on AUDIO Elements,\r\n\t //The following items are Function's callback function.\r\n\t \"toggle\" :[],\r\n\t \"previous\" :[],\r\n\t \"next\" :[],\r\n\t \"changeList\" :[],\r\n\t \"changeLyric\" :[],\r\n\t \"slideList\" :[],\r\n\t \"slideLyric\" :[],\r\n\t \"clickLyricPower\" :[],\r\n\t \"clickListPower\" :[],\r\n\t \"clickVolumePower\" :[],\r\n\t };\r\n\t this.emitter = new cEmitter(EVENTS);\r\n\t this.on = (eventName,func)=>this.emitter.on(eventName,func);\r\n\t /*\r\n\t * 參數处理,合并默认参数与定义參數\r\n\t */\r\n\t const DEFAULTS = {\r\n\t \"element\": document.getElementById(\"cplayer\"),\r\n\t \"list\" : []\r\n\t };\r\n\t if(Object.assign !== undefined){\r\n\t this.options = Object.assign({}, DEFAULTS, options);\r\n\t }\r\n\r\n\t //SVG建立\r\n\t this.SVG = {\r\n\t \"playArrow\" :'M16 10v28l22-14z',\r\n\t \"pause\" :'M12 38h8V10h-8v28zm16-28v28h8V10h-8z',\r\n\t \"playlistPlay\" :'M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z',\r\n\t \"note\" :'M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z',\r\n\t \"volumeUp\" :'M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z',\r\n\t \"volumeMute\" :'M14 18v12h8l10 10V8L22 18h-8z',\r\n\t \"volumeOff\" :'M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z',\r\n\t \"volumeDown\" :'M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z',\r\n\t };\r\n\t (()=>{\r\n\t for(let i = 0,keys = Object.keys(this.SVG),length = keys.length;i' :\r\n\t '';\r\n\t this.SVG[keys[i]] = svg;\r\n\t }\r\n\t })();\r\n\r\n\t this.CBASE = new cBase;\r\n\t this.now = 0;\r\n\t this.dragging = {contain: false, target: undefined};\r\n\t //现在开始填DOM\r\n\t (()=>{\r\n\t let cPlayer = document.createElement(\"c-player\");\r\n\t let lyric = document.createElement(\"div\");\r\n\t lyric.classList.add(\"lyric\");\r\n\t lyric.classList.add(\"invisible\");\r\n\t let lyricBody = document.createElement(\"lyric-body\");\r\n\t lyric.appendChild(lyricBody);\r\n\t let controls = document.createElement(\"div\");\r\n\t controls.classList.add(\"controls\");\r\n\t let cLeft = document.createElement(\"div\");\r\n\t cLeft.classList.add(\"c-left\");\r\n\t let musicDescription = document.createElement(\"div\");\r\n\t musicDescription.classList.add(\"music-description\");\r\n\t let image = document.createElement(\"div\");\r\n\t image.classList.add(\"image\");\r\n\t let metaBak = document.createElement(\"img\");\r\n\t metaBak.classList.add(\"meta-bak\");\r\n\t image.appendChild(metaBak);\r\n\t let musicMeta = document.createElement(\"div\");\r\n\t musicMeta.classList.add(\"music-meta\");\r\n\t let div = document.createElement(\"div\");\r\n\t let musicName = document.createElement(\"span\");\r\n\t musicName.classList.add(\"music-name\");\r\n\t let musicArtist = document.createElement(\"span\");\r\n\t musicArtist.classList.add(\"music-artist\");\r\n\t div.appendChild(musicName);\r\n\t div.appendChild(musicArtist);\r\n\t musicMeta.appendChild(div);\r\n\t musicDescription.appendChild(image);\r\n\t musicDescription.appendChild(musicMeta);\r\n\t let playIcon = document.createElement(\"a\");\r\n\t playIcon.classList.add(\"play-icon\");\r\n\t this.CBASE.replaceInner(playIcon,this.SVG.playArrow);\r\n\t cLeft.appendChild(musicDescription);\r\n\t cLeft.appendChild(playIcon);\r\n\t let cCenter = document.createElement(\"div\");\r\n\t cCenter.classList.add(\"c-center\");\r\n\t let time = document.createElement(\"div\");\r\n\t time.classList.add(\"time\");\r\n\t let timeBody = document.createElement(\"div\");\r\n\t timeBody.classList.add(\"time-body\");\r\n\t let timeLine = document.createElement(\"div\");\r\n\t timeLine.classList.add(\"time-line\");\r\n\t\t let timePoint = document.createElement(\"div\");\r\n\t\t timePoint.classList.add(\"time-point\");\r\n\t \t\ttimeLine.appendChild(timePoint);\r\n\t timeBody.appendChild(timeLine);\r\n\t time.appendChild(timeBody);\r\n\t cCenter.appendChild(time);\r\n\t let cRight = document.createElement(\"div\");\r\n\t cRight.classList.add(\"c-right\");\r\n\t let volume = document.createElement(\"div\");\r\n\t volume.classList.add(\"volume\");\r\n\t let volumeButton = document.createElement(\"div\");\r\n\t volumeButton.classList.add(\"volume-button\");\r\n\t let volumePower = document.createElement(\"a\");\r\n\t volumePower.classList.add(\"volume-power\");\r\n\t this.CBASE.replaceInner(volumePower,this.SVG.volumeOff);\r\n\t volumeButton.appendChild(volumePower);\r\n\t let volumeBody = document.createElement(\"div\");\r\n\t volumeBody.classList.add(\"volume-body\");\r\n\t let volumeLine = document.createElement(\"div\");\r\n\t volumeLine.classList.add(\"volume-line\");\r\n\t\t let volumePoint = document.createElement(\"div\");\r\n\t\t volumePoint.classList.add(\"volume-point\");\r\n\t \t\tvolumeLine.appendChild(volumePoint);\r\n\t volumeBody.appendChild(volumeLine);\r\n\t volume.appendChild(volumeButton);\r\n\t volume.appendChild(volumeBody);\r\n\t let listButton = document.createElement(\"div\");\r\n\t listButton.classList.add(\"list-button\");\r\n\t let listPower = document.createElement(\"a\");\r\n\t listPower.classList.add(\"list-power\");\r\n\t this.CBASE.replaceInner(listPower,this.SVG.playlistPlay);\r\n\t listButton.appendChild(listPower);\r\n\t let lyricButton = document.createElement(\"div\");\r\n\t lyricButton.classList.add(\"lyric-button\");\r\n\t let lyricPower = document.createElement(\"a\");\r\n\t lyricPower.classList.add(\"lyric-power\");\r\n\t this.CBASE.replaceInner(lyricPower,this.SVG.note);\r\n\t lyricButton.appendChild(lyricPower);\r\n\t cRight.appendChild(volume);\r\n\t cRight.appendChild(listButton);\r\n\t cRight.appendChild(lyricButton);\r\n\t controls.appendChild(cLeft);\r\n\t controls.appendChild(cCenter);\r\n\t controls.appendChild(cRight);\r\n\t let list = document.createElement(\"div\");\r\n\t list.classList.add(\"list\");\r\n\t list.classList.add(\"invisible\");\r\n\t let listBody = document.createElement(\"list-body\");\r\n\t list.appendChild(listBody);\r\n\t cPlayer.appendChild(lyric);\r\n\t cPlayer.appendChild(controls);\r\n\t cPlayer.appendChild(list);\r\n\t this.options.element.appendChild(cPlayer);\r\n\t })();\r\n\t this.CBASE.root = this.options.element.getElementsByTagName(\"c-player\");\r\n\t this.CBASE.root = this.CBASE.root[this.CBASE.root.length-1];\r\n\t //然后为DOMList填充一下吧\r\n\t this.__LIST__ = {\r\n\t \"lyric\" : this.CBASE.getByClass(\"lyric\"),\r\n\t \"lyricBody\" : this.CBASE.getByTagName(\"lyric-body\"),\r\n\t \"toggle\" : this.CBASE.getByClass(\"play-icon\"),\r\n\t \"img\" : this.CBASE.getByClass(\"meta-bak\"),\r\n\t \"name\" : this.CBASE.getByClass(\"music-name\"),\r\n\t \"artist\" : this.CBASE.getByClass(\"music-artist\"),\r\n\t \"time\" : this.CBASE.getByClass(\"time\"),\r\n\t \"timeBody\" : this.CBASE.getByClass(\"time-body\"),\r\n\t \"timeLine\" : this.CBASE.getByClass(\"time-line\"),\r\n\t \"timePoint\" : this.CBASE.getByClass(\"time-point\"),\r\n\t \"lyricPower\" : this.CBASE.getByClass(\"lyric-power\"),\r\n\t \"volumePower\": this.CBASE.getByClass(\"volume-power\"),\r\n\t \"volumeBody\" : this.CBASE.getByClass(\"volume-body\"),\r\n\t \"volumeLine\" : this.CBASE.getByClass(\"volume-line\"),\r\n\t \"volumePoint\": this.CBASE.getByClass(\"volume-point\"),\r\n\t \"listPower\" : this.CBASE.getByClass(\"list-power\"),\r\n\t \"list\" : this.CBASE.getByClass(\"list\"),\r\n\t \"listBody\" : this.CBASE.getByTagName(\"list-body\")\r\n\t };\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\r\n\t let that=this;function dragPercentage(options) {\r\n\t\t \t/*\r\n\t\t \t\tWhile anything...\r\n\t\t \t\trightTarget(if.it.possible)[\r\n\t\t\t\t\t\t0 -> sth.point\r\n\t\t\t\t\t\t1 -> sth.line\r\n\t\t\t\t\t\t2 -> sth.point & sth.line & sth.body\r\n\t\t \t\t]\r\n\t\t \t*/\r\n\t\t \tlet rightTarget = [];\r\n\t\t \t\trightTarget.push(options.target === that.__LIST__.timePoint \r\n\t\t \t|| options.target === that.__LIST__.volumePoint); //Check if the focus of mouse is the `point circle`\r\n\t\t \t\trightTarget.push(options.target === that.__LIST__.timeLine\r\n\t\t \t|| options.target === that.__LIST__.volumeLine);\r\n\t\t \t\trightTarget.push((options.target === that.__LIST__.timePoint \r\n\t\t \t|| options.target === that.__LIST__.volumePoint\r\n\t\t \t|| options.target === that.__LIST__.timeBody\r\n\t\t \t|| options.target === that.__LIST__.volumeBody\r\n\t\t \t|| options.target === that.__LIST__.timeLine\r\n\t\t \t|| options.target === that.__LIST__.volumeLine));\r\n\t\t \tif (!rightTarget[2]) return;\r\n\t\t that.dragging.contain = true;\r\n\t\t that.dragging.target = options.target;\r\n\t\t\t\tif (rightTarget[0])window.addEventListener(\"mousemove\",function mover(options){\r\n\t\t\t\t\tif (that.dragging.contain === false) return;\r\n\t\t if (!rightTarget[0]) return;\r\n\t\t parent = that.dragging.target.parentNode.parentNode;\r\n\t\t if (parent.classList && parent.classList.contains(\"volume-body\")) {\r\n\t\t that.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t\t } else if (parent.classList && parent.classList.contains(\"time-body\")) {\r\n\t\t that.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + \"%\";\r\n\t\t }\r\n\t\t //实时修正VOLUME\r\n\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t that.music.volume = vol;\r\n\t\t }\r\n\t\t window.addEventListener(\"mouseup\",function upper(options){\r\n\t\t \tif (that.dragging.contain === false) return;\r\n\t\t\t /*\r\n\t\t\t \tWhile anything...\r\n\t\t\t \tsth.body -> self\r\n\t\t\t \tsth.line -> parent\r\n\t\t\t \tsth.point-> parent.parent\r\n\t\t\t */\r\n\t\t\t if(false){}\r\n\t\t\t \telse if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode}\r\n\t\t\t \telse if(rightTarget[1]){parent = that.dragging.target.parentNode}\r\n\t\t\t \telse if(rightTarget[2]){parent = that.dragging.target}\r\n\t\t\t \telse throw new Error(JSON.stringify([that.dragging.target, rightTarget]));\r\n\r\n\t\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t\t that.music.volume = vol;\r\n\t\t\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t\t\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t time = time > 1 ? 1 : time;\r\n\t\t\t time = time < 0 ? 0 : time;\r\n\t\t\t that.updateTime(time * that.music.duration);\r\n\t\t\t }\r\n\t\t\t that.dragging.contain = false;\r\n\t\t\t that.dragging.target = undefined;\r\n\t\t\t window.removeEventListener(\"mouseup\",upper);\r\n\t\t\t window.removeEventListener(\"mousemove\",mover);\r\n\t\t });\r\n\t\t\t\t});\r\n\t\t\t\tif (!rightTarget[0])window.addEventListener(\"mouseup\",function upper(options){\r\n\t\t \tif (that.dragging.contain === false) return;\r\n\t\t\t if(false){}\r\n\t\t\t \telse if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode}\r\n\t\t\t \telse if(rightTarget[1]){parent = that.dragging.target.parentNode}\r\n\t\t\t \telse if(rightTarget[2]){parent = that.dragging.target}\r\n\t\t\t \telse throw new Error(JSON.stringify([that.dragging.target, rightTarget]));\r\n\r\n\t\t\t if (parent.classList.contains(\"volume-body\")) {\r\n\t\t\t let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t vol = vol > 1 ? 1 : vol;\r\n\t\t\t vol = vol < 0 ? 0 : vol;\r\n\t\t\t that.music.volume = vol;\r\n\t\t\t } else if (parent.classList.contains(\"time-body\")) {\r\n\t\t\t let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth;\r\n\t\t\t time = time > 1 ? 1 : time;\r\n\t\t\t time = time < 0 ? 0 : time;\r\n\t\t\t that.updateTime(time * that.music.duration);\r\n\t\t\t }\r\n\t\t\t that.dragging.contain = false;\r\n\t\t\t that.dragging.target = undefined;\r\n\t\t\t window.removeEventListener(\"mouseup\",upper);\r\n\t\t });\r\n\t\t }\r\n\r\n\t this.music = document.createElement(\"audio\");\r\n\t this.music.autoplay = !!this.options.autoplay;\r\n\t //绑定事件开始:\r\n\r\n\t this.emitter.on(\"toggle\",()=>{\r\n\t if (this.isPaused()) {\r\n\t this.play();\r\n\t } else {\r\n\t this.pause();\r\n\t }\r\n\t }).on(\"clickLyricPower\",()=>{\r\n\t if (this.hasLyric(this.now) && this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.showLyric();\r\n\t } else if (this.hasLyric(this.now) && !this.__LIST__.lyric.classList.contains(\"invisible\")) {\r\n\t this.hideLyric();\r\n\t }\r\n\t }).on(\"clickListPower\",()=>{\r\n\t if (this.hasList() && this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.showList();\r\n\t } else if (this.hasLyric() && !this.__LIST__.list.classList.contains(\"invisible\")) {\r\n\t this.hideList();\r\n\t }\r\n\t }).on(\"clickVolumePower\",()=>{\r\n\t if (this.isMuted()) {\r\n\t this.music.muted = false;\r\n\t } else {\r\n\t this.volume(0);\r\n\t }\r\n\t }).on(\"timeupdate\",()=>{\r\n\t this.updateTime();\r\n\t if (this.hasLyric(this.now)) {\r\n\t this.slideLyric(this.music.currentTime);\r\n\t }\r\n\t }).on(\"volumechange\",()=>{\r\n\t this.volume(); //做更新界面用.\r\n\t }).on(\"pause\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.playArrow);\r\n\t //再赋值,更新内容.\r\n\t //this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"play\",()=>{\r\n\t this.CBASE.replaceInner(this.__LIST__.toggle,this.SVG.pause);\r\n\t //再赋值,更新内容.\r\n\t this.__LIST__.toggleIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.toggle);\r\n\t }).on(\"ended\",()=>{\r\n\t //this.__LIST__.lyricBody.style.transform = \"\"; 为了兼容性封装一遍\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t if (this.options.list[this.now].loop === true) {\r\n\t this.updateTime(0);\r\n\t this.play();\r\n\t }else if (this.hasList()&&this.now !== this.options.list.length-1) {\r\n\t this.next();\r\n\t }\r\n\t });\r\n\r\n\t //结束\r\n\r\n\r\n\t if(this.options.list[0]) this.toggle();\r\n\t this.__LIST__.toggle.addEventListener(\"click\", ()=>this.emitter.emit(\"toggle\"));\r\n\t this.__LIST__.lyricPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickLyricPower\"));\r\n\t this.__LIST__.listPower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickListPower\"));\r\n\t this.__LIST__.volumePower.addEventListener(\"click\", ()=>this.emitter.emit(\"clickVolumePower\"));\r\n\t this.music.addEventListener(\"volumechange\", (ev)=>this.emitter.emit(\"volumechange\",ev));\r\n\t this.music.addEventListener(\"timeupdate\", (ev)=>this.emitter.emit(\"timeupdate\",ev));\r\n\t this.music.addEventListener(\"canplaythrough\", ()=>this.emitter.emit(\"canplaythrough\"));\r\n\t this.music.addEventListener(\"pause\", ()=>this.emitter.emit(\"pause\"));\r\n\t this.music.addEventListener(\"play\", ()=>this.emitter.emit(\"play\"));\r\n\t this.music.addEventListener(\"ended\", ()=>this.emitter.emit(\"ended\"));\r\n\t this.options.element.addEventListener(\"mousedown\", (a)=>dragPercentage(a));\r\n\r\n\t this.volume();\r\n\t this.refreshList();\r\n\t };\r\n\r\n\t volume(vl = undefined) {\r\n\t let checkLevel = ()=>{\r\n\t if(this.music.volume===0||this.isMuted()){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeOff);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0&&this.music.volume<=0.5){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeDown);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else if(this.music.volume>0.5&&this.music.volume<=1){\r\n\t this.CBASE.replaceInner(this.__LIST__.volumePower,this.SVG.volumeUp);\r\n\t this.__LIST__.volumeIcon = this.CBASE.getByTagName(\"svg\",this.__LIST__.volumePower);\r\n\t } else {\r\n\t console.log(\"Unexcepted Volume: \"+this.music.volume);\r\n\t }\r\n\t }\r\n\t if (vl === undefined) {\r\n\t this.__LIST__.volumeLine.style.width = (this.music.volume * 100) + \"%\";\r\n\t checkLevel();\r\n\t return this.isMuted() ? 0 : this.music.volume;\r\n\t } else {\r\n\t if (vl === 0) {\r\n\t this.music.muted = true;\r\n\t checkLevel();\r\n\t } else {\r\n\t this.music.volume = vl;\r\n\t checkLevel();\r\n\t }\r\n\t }\r\n\t }\r\n\r\n\t isMuted() {\r\n\t return this.music.muted;\r\n\t }\r\n\r\n\t play() {\r\n\t if(this.music.seeking === true) return this;\r\n\t this.music.play();\r\n\t return this;\r\n\t }\r\n\r\n\t pause() {\r\n\t if(this.music.seeking === true) return;\r\n\t this.music.pause();\r\n\t return this;\r\n\t }\r\n\r\n\t previous() {\r\n\t this.emitter.emit(\"previous\");\r\n\t if(this.now === 0) return;\r\n\t this.now--;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t next() {\r\n\t this.emitter.emit(\"next\");\r\n\t if(this.now === this.options.list.length-1) return;\r\n\t this.now++;\r\n\t this.toggle().play();\r\n\t return this;\r\n\t }\r\n\r\n\t to(now) {\r\n\t this.now = now;\r\n\t this.toggle();\r\n\t this.play();\r\n\t return this;\r\n\t }\r\n\r\n\t toggle(now = this.now) {\r\n\t this.emitter.emit(\"toggle\");\r\n\t let list = this.options.list[now], dom = this.__LIST__;\r\n\t this.music.pause();\r\n\t [dom.img.src, dom.name.innerHTML, dom.artist.innerHTML, this.music.src] = [list.image, list.name, list.artist, list.url];\r\n\t this.transLock = false;\r\n\t this.refreshLyric();\r\n\t if (!this.hasLyric(this.now))this.hideLyric();\r\n\t this.CBASE.style(this.__LIST__.lyricBody,\"transform\",\"\");\r\n\t return this;\r\n\t }\r\n\r\n\t isPaused(func) {\r\n\t if(func !== undefined) func();\r\n\t return this.music.paused;\r\n\t }\r\n\r\n\t hasLyric(id = 0,func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list[id].lyric != undefined);\r\n\t }\r\n\r\n\t showLyric() {\r\n\t this.emitter.emit(\"slideLyric\",true);\r\n\t if (this.hasLyric(this.now))this.__LIST__.lyric.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.list.classList.contains(\"invisible\")) this.hideList();\r\n\t return this;\r\n\t }\r\n\r\n\t hideLyric() {\r\n\t this.emitter.emit(\"slideLyric\",false);\r\n\t this.__LIST__.lyric.classList.add(\"invisible\");\r\n\t return this;\r\n\t }\r\n\r\n\t hasList(func) {\r\n\t if(func !== undefined) func();\r\n\t return (this.options.list.length > 1);\r\n\t }\r\n\r\n\t showList(func) {\r\n\t this.emitter.emit(\"slideList\",true);\r\n\t this.__LIST__.list.classList.remove(\"invisible\");\r\n\t if (!this.__LIST__.lyric.classList.contains(\"invisible\")) this.hideLyric();\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t hideList(func) {\r\n\t this.emitter.emit(\"slideList\",false);\r\n\t this.__LIST__.list.classList.add(\"invisible\");\r\n\t if(func !== undefined) func();\r\n\t return this;\r\n\t }\r\n\r\n\t refreshList(func) {\r\n\t this.emitter.emit(\"changeList\");\r\n\t let list = this.options.list, lb = this.__LIST__.listBody;\r\n\t lb.innerHTML = ``;\r\n\t for (let i = 0; i <= list.length - 1; i++) {\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + list[i].name + '' + list[i].artist + '';\r\n\t div = lb.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(i);\r\n\t });\r\n\t }\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t add(u,func) {\r\n\t let ln = this.options.list.push(u);\r\n\t let div = document.createElement(\"div\");\r\n\t div.innerHTML = '' + u.name + '' + u.artist + '';\r\n\t div = this.__LIST__.listBody.appendChild(div);\r\n\t div.addEventListener(\"click\", ()=> {\r\n\t this.to(ln - 1);\r\n\t });\r\n\t if(ln===1) this.toggle(); //刷新元素.\r\n\t if(func !== undefined) func();\r\n\t }\r\n\r\n\t lyric(content = undefined) {\r\n\t if (content === undefined) {\r\n\t if (this.hasLyric(this.now)) return this.options.list[this.now].lyric;\r\n\t } else {\r\n\t this.options.list[this.now].lyric = content;\r\n\t this.refreshLyric();\r\n\t }\r\n\t return this;\r\n\t }\r\n\r\n\t refreshLyric(isTrans) {\r\n\t //REQUIRE LYRIC...\r\n\t this.__LIST__.lyricBody.innerHTML = ``;\r\n\t if (!this.hasLyric(this.now)) return;\r\n\t let lr = ((!this.transLock)&&isTrans?this.options.list[this.now].transLyric:this.options.list[this.now].lyric);\r\n\t //START LRC BASEING...\r\n\t lr = lr.split(\"\\n\");\r\n\t let lrcs = [];\r\n\t for (let i = 0,content=lr[i];i= 0; i--) {\r\n\t if (lrcs[i].length > 2) {\r\n\t for (let count = lrcs[i].length - 1; count >= 0; count--) {\r\n\t if (count !== lrcs[i].length - 1 && lrcs[i][lrcs[i].length - 1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][count], content: lrcs[i][lrcs[i].length - 1]});\r\n\t }\r\n\t }\r\n\r\n\t } else if(lrcs[i][1]!==undefined) {\r\n\t lyric.push({time: lrcs[i][0], content: lrcs[i][1]});\r\n\t }\r\n\t }\r\n\r\n\t lyric.sort((a, b)=> {\r\n\t return a.time - b.time;\r\n\t });\r\n\t lyric[\"now\"] = 0;\r\n\t this.__LYRIC__ = lyric;\r\n\t for (let i = 0; i <= lyric.length - 1; i++) {\r\n\t let div = document.createElement(\"lrc\");\r\n\t div.innerHTML = lyric[i].content;\r\n\t this.__LIST__.lyricBody.appendChild(div);\r\n\t }\r\n\t this.emitter.emit(\"changeLyric\");\r\n\r\n\t }\r\n\r\n\t updateTime(time = undefined,func) {\r\n\t if (time !== undefined)this.music.currentTime = time;\r\n\t if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + \"%\";\r\n\t //if(this.isPaused()) this.play();\r\n\t if(func !== undefined) func(this.music.currentTime);\r\n\t //return this.music.currentTime;\r\n\t }\r\n\r\n\t slideLyric(time){\r\n\t if(this.__LIST__.lyric.classList.contains(\"invisible\")) return;\r\n\r\n\t let lyricToTop,\r\n\t \thalfBody,\r\n\t \ttranslateY,\r\n\t \tlyricBody=this.__LIST__.lyricBody,\r\n\t \tlrc = this.__LIST__.lyricBody.getElementsByTagName(\"lrc\");\r\n\t //遍历Lyric,寻找当前时间的歌词\r\n\t for (let i = this.__LYRIC__.length - 1, lyric = this.__LYRIC__[i]; i >= 0; lyric = this.__LYRIC__[i-1],i--) {\r\n\t \tif(lyric.time>time)\r\n\t \t\tif(this.__LYRIC__[i-1])\r\n\t \t\tif(this.__LYRIC__[i-1].time>time) continue;\r\n\t \tif(lyric.time1)\r\n\t\t\t for (let n = list.length - 1; n >= 0; n--)\r\n\t\t\t \tif(list[n]!==lrc[i-1])\r\n\t\t\t \t\tlist[n].classList.remove(\"now\");\r\n\t }\r\n\t }\r\n\t translate(){\r\n\t \tif(!this.options.list[this.now].transLyric||!this.hasLyric(this.now)) return false;\r\n\t \tthis.refreshLyric(true);\r\n\t \tthis.transLock = true;\r\n\t }\r\n\t get length(){\r\n\t return this.options.list.length;\r\n\t }\r\n\t set length(length){\r\n\t throw new SyntaxError(\"Read-only Property.\");\r\n\t }\r\n}\r\n\r\n//Object.assign 解决方案\r\nif (typeof Object.assign != 'function') {\r\n\t Object.assign = function(target) {\r\n\t 'use strict';\r\n\t if (target == null) {\r\n\t throw new TypeError('Cannot convert undefined or null to object');\r\n\t }\r\n\r\n\t target = Object(target);\r\n\t for (var index = 1; index < arguments.length; index++) {\r\n\t var source = arguments[index];\r\n\t if (source != null) {\r\n\t for (var key in source) {\r\n\t if (Object.prototype.hasOwnProperty.call(source, key)) {\r\n\t target[key] = source[key];\r\n\t }\r\n\t }\r\n\t }\r\n\t }\r\n\t return target;\r\n\t };\r\n}\r\n\r\nconst cEmitter = class cEmitter{\r\n\t constructor(typeList){\r\n\t if(typeList){\r\n\t this.events = typeList;\r\n\t }else{\r\n\t this.events = [];\r\n\t }\r\n\t }\r\n\t on(eventName,func){\r\n\t if(this.events[eventName]&&this.events[eventName].push !== undefined&&typeof func === \"function\"){\r\n\t this.events[eventName].push(func);\r\n\t }else if(this.events[eventName]===undefined||this.events[eventName].push===undefined){\r\n\t this.events[eventName] = [];\r\n\t }else{\r\n\t throw new TypeError(\"Uncaught Unexcepted TypeError.\")\r\n\t }\r\n\t return this;\r\n\t }\r\n\t emit(eventName,...args){\r\n\t for(let i = 0;i0;i--){\r\n\t if(styleList[i].indexOf(\"-webkit-\")!==-1){\r\n\t this.browser = \"webkit\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-moz-\")!==-1){\r\n\t this.browser = \"moz\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-o-\")!==-1){\r\n\t this.browser = \"o\";\r\n\t break;\r\n\t }\r\n\t if(styleList[i].indexOf(\"-ms-\")!==-1){\r\n\t this.browser = \"ms\";\r\n\t break;\r\n\t }\r\n\t }\r\n\t }\r\n\t replace(oldElement,newElement){\r\n\t //newElement 不存在于oldElement 的父元素中,首先载入.\r\n\t newElement = newElement.cloneNode(true);\r\n\t oldElement.parentNode.appendChild(newElement);\r\n\t oldElement.parentNode.removeChild(oldElement);\r\n\t //顺便如果有值为oldElement的变量,请重新赋值.\r\n\t }\r\n\t replaceInner(element,innerContent){\r\n\t //进行一次简单的封装\r\n\t element.innerHTML = innerContent;\r\n\t }\r\n\t getByClass(className,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByClassName(className)[0]:this.root.getElementsByClassName(className)[0];\r\n\t }\r\n\t getByTagName(tagName,parentElement){\r\n\t return parentElement!=undefined?parentElement.getElementsByTagName(tagName)[0]:this.root.getElementsByTagName(tagName)[0];\r\n\t }\r\n\t rand(start,end){\r\n\t if(start===undefined||end===undefined) return Math.random();\r\n\t if(start>end) throw new RangeError(\"the EndNumber must be bigger than the StartNumber\");\r\n\t return (end-start)*Math.random()+start;\r\n\t }\r\n\t style(dom,property,content){\r\n\t dom.style[this.browser+property.slice(0,1).toUpperCase()+property.slice(1)] = content;\r\n\t dom.style[property] = content;\r\n\t }\r\n}\r\nif(window)window.cPlayer = cPlayer;"]} \ No newline at end of file diff --git a/dist/cplayer.min.css b/dist/cplayer.min.css index 4ab43b8..e82239c 100644 --- a/dist/cplayer.min.css +++ b/dist/cplayer.min.css @@ -1 +1 @@ -@-webkit-keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}@keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}c-player{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player svg{width:100%;height:100%;fill:#333;display:block}c-player .play-icon svg{fill:white;width:80%;height:80%}c-player .invisible{height:0 !important;overflow:hidden !important;max-height:0 !important;min-height:0 !important}c-player *{font-family:"Ubuntu Mono","微软雅黑","Microsoft JHenghei",sans-serif;text-decoration:none;font-size:initial;line-height:initial}c-player .lyric{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:20em;height:45vh;width:100%;background:#eee;overflow:hidden}c-player .lyric lyric-body{will-change:transform;display:block;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;text-align:center;-webkit-transform:translateY(6em);-ms-transform:translateY(6em);transform:translateY(6em);-webkit-transition:all 0.25s;transition:all 0.25s}c-player .lyric lyric-body lrc{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:block;will-change:background;line-height:3em;min-height:3em;font-size:large;font-family:"LiHei Pro","Microsoft Yahei",sans-serif;width:100%;-webkit-transition:0.25s background ease;transition:0.25s background ease}c-player .lyric lyric-body lrc.now{background:#ddd}c-player .controls{background:white;height:4em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description .image,c-player .controls .c-left .music-description .image img{height:4em;width:4em}c-player .controls .c-left .music-description .image:hover+.music-meta,c-player .controls .c-left .music-description .image img:hover+.music-meta{max-width:9999px}c-player .controls .c-left .music-description .music-meta{margin:0 0.5em;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:0;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;-webkit-transition:1.5s all 0.5s ease-in;transition:1.5s all 0.5s ease-in}c-player .controls .c-left .music-description .music-meta div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player .controls .c-left .music-description .music-meta .music-name{font-size:1.5em;white-space:nowrap}c-player .controls .c-left .music-description .music-meta .music-artist{font-size:0.7em;color:grey;white-space:nowrap}c-player .controls .c-left .play-icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto 0.5em;width:3.2em;height:3.2em;-webkit-border-radius:100%;border-radius:100%;background-color:#f66;color:white;cursor:pointer}c-player .controls .c-center{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0.5em}@media screen and (max-width: 800px){c-player .controls .c-center{display:none}}c-player .controls .c-center .time{width:100%;cursor:pointer}c-player .controls .c-center .time .time-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-center .time .time-body .time-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-center .time .time-body .time-line .time-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 800px){c-player .controls .c-right{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}}c-player .controls .c-right>*{width:2em;height:2em;margin:0 0.5em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;cursor:pointer;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume .volume-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume .volume-body .volume-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-right .volume .volume-body .volume-line .volume-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right .volume .volume-body{visibility:hidden;width:0;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:12em}@media screen and (max-width: 800px){c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:100% !important}}c-player .controls .c-right .volume:hover .volume-body,c-player .controls .c-right .volume:active .volume-body{visibility:visible;width:100%}c-player .controls .c-right .volume .volume-button{width:2em;height:2em}c-player .controls .c-right .volume .volume-button .volume-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .volume .volume-button .volume-power:hover,c-player .controls .c-right .volume .volume-button .volume-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .volume .volume-button .volume-power .material-icons{margin:auto}c-player .controls .c-right .list-button .list-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .list-button .list-power:hover,c-player .controls .c-right .list-button .list-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .list-button .list-power .material-icons{margin:auto}c-player .controls .c-right .lyric-button .lyric-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .lyric-button .lyric-power:hover,c-player .controls .c-right .lyric-button .lyric-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .lyric-button .lyric-power .material-icons{margin:auto}c-player .list{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;max-height:75vh;background:white;overflow:auto}c-player .list list-body{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow:hidden}c-player .list list-body>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;cursor:pointer;-webkit-transition:0.2s background 0s ease;transition:0.2s background 0s ease}c-player .list list-body>*:nth-child(2n-1){background:rgba(117,117,117,0.23)}c-player .list list-body>*:hover,c-player .list list-body>*:active{background:rgba(117,117,117,0.5)}c-player .list list-body>*:hover::before,c-player .list list-body>*:active::before{width:0.2em}c-player .list list-body>*::before{background:#f66;-webkit-transition:0.2s width 0s ease;transition:0.2s width 0s ease;float:left;height:2.5em;width:0em;display:block;content:""}@media screen and (max-width: 800px){c-player .list list-body>*::before{height:3em}c-player .list list-body>*::before:hover::before,c-player .list list-body>*::before:active::before{width:0.4em}}c-player .list list-body .music-name,c-player .list list-body .music-artist{padding:0 0.5em}c-player .list list-body .music-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1} +@-webkit-keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}@keyframes changeSize{0%{width:0;height:0;top:50%;left:50%}100%{width:200%;height:200%;top:-50%;left:-50%}}c-player{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player svg{width:100%;height:100%;fill:#333;display:block}c-player .play-icon svg{fill:white;width:80%;height:80%}c-player .invisible{height:0 !important;overflow:hidden !important;max-height:0 !important;min-height:0 !important}c-player *{font-family:"Ubuntu Mono","微软雅黑","Microsoft JHenghei",sans-serif;text-decoration:none;font-size:initial;line-height:initial}c-player .lyric{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;height:20em;height:45vh;width:100%;background:#eee;overflow:hidden}c-player .lyric lyric-body{will-change:transform;display:block;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;height:100%;text-align:center;-webkit-transform:translateY(6em);-ms-transform:translateY(6em);transform:translateY(6em);-webkit-transition:all 0.25s;transition:all 0.25s}c-player .lyric lyric-body lrc{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;display:block;will-change:background;line-height:3em;min-height:3em;font-size:large;font-family:"LiHei Pro","Microsoft Yahei",sans-serif;width:100%;-webkit-transition:0.25s background ease;transition:0.25s background ease}c-player .lyric lyric-body lrc.now{background:#ddd}c-player .controls{background:white;height:4em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-left .music-description .image,c-player .controls .c-left .music-description .image img{height:4em;width:4em}c-player .controls .c-left .music-description .image:hover+.music-meta,c-player .controls .c-left .music-description .image img:hover+.music-meta{max-width:9999px}c-player .controls .c-left .music-description .music-meta{margin:0 0.5em;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;max-width:0;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;overflow:hidden;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;height:100%;-webkit-transition:1.5s all 0.5s ease-in;transition:1.5s all 0.5s ease-in}c-player .controls .c-left .music-description .music-meta div{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column}c-player .controls .c-left .music-description .music-meta .music-name{font-size:1.5em;white-space:nowrap}c-player .controls .c-left .music-description .music-meta .music-artist{font-size:0.7em;color:grey;white-space:nowrap}c-player .controls .c-left .play-icon{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;margin:auto 0.5em;width:3.2em;height:3.2em;-webkit-border-radius:100%;border-radius:100%;background-color:#f66;color:white;cursor:pointer}c-player .controls .c-center{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;width:auto;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;padding:0.5em}@media screen and (max-width: 800px){c-player .controls .c-center{display:none}}c-player .controls .c-center .time{width:100%;cursor:pointer}c-player .controls .c-center .time .time-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-center .time .time-body .time-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-center .time .time-body .time-line .time-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center}@media screen and (max-width: 800px){c-player .controls .c-right{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1}}c-player .controls .c-right>*{width:2em;height:2em;margin:0 0.5em;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume{-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;-ms-grid-row-align:center;align-items:center;cursor:pointer;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume .volume-body{margin:0 1%;height:2px;background-color:#ccc;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex}c-player .controls .c-right .volume .volume-body .volume-line{width:0%;height:2px;background-color:red;will-change:width;position:relative}c-player .controls .c-right .volume .volume-body .volume-line .volume-point{width:10px;height:10px;margin:-4px 0 0 -5px;background-color:#f66;-webkit-border-radius:100%;border-radius:100%;position:absolute;right:0}c-player .controls .c-right .volume .volume-body{visibility:hidden;width:0;-webkit-transition:width 0.2s;transition:width 0.2s}c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:12em}@media screen and (max-width: 800px){c-player .controls .c-right .volume:hover,c-player .controls .c-right .volume:active{width:100% !important}}c-player .controls .c-right .volume:hover .volume-body,c-player .controls .c-right .volume:active .volume-body{visibility:visible;width:100%}c-player .controls .c-right .volume .volume-button{width:2em;height:2em}c-player .controls .c-right .volume .volume-button .volume-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .volume .volume-button .volume-power:hover,c-player .controls .c-right .volume .volume-button .volume-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .volume .volume-button .volume-power .material-icons{margin:auto}c-player .controls .c-right .list-button .list-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .list-button .list-power:hover,c-player .controls .c-right .list-button .list-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .list-button .list-power .material-icons{margin:auto}c-player .controls .c-right .lyric-button .lyric-power{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;height:100%;-webkit-border-radius:10%;border-radius:10%;color:grey;-webkit-transition:all 0.2s ease-in;transition:all 0.2s ease-in;cursor:pointer}c-player .controls .c-right .lyric-button .lyric-power:hover,c-player .controls .c-right .lyric-button .lyric-power:active{background:rgba(117,117,117,0.3)}c-player .controls .c-right .lyric-button .lyric-power .material-icons{margin:auto}c-player .list{will-change:height;-webkit-transition:all 0.25s;transition:all 0.25s;max-height:75vh;background:white;overflow:auto}c-player .list list-body{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-orient:vertical;-webkit-box-direction:normal;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;overflow:hidden}c-player .list list-body>*{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-align:center;-webkit-align-items:center;-ms-flex-align:center;align-items:center;-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1;cursor:pointer;-webkit-transition:0.2s background 0s ease;transition:0.2s background 0s ease}c-player .list list-body>*:nth-child(2n-1){background:rgba(117,117,117,0.23)}c-player .list list-body>*:hover,c-player .list list-body>*:active{background:rgba(117,117,117,0.5)}c-player .list list-body>*:hover::before,c-player .list list-body>*:active::before{width:0.2em}c-player .list list-body>*::before{background:#f66;-webkit-transition:0.2s width 0s ease;transition:0.2s width 0s ease;float:left;height:2.5em;width:0em;display:block;content:""}@media screen and (max-width: 800px){c-player .list list-body>*::before{height:3em}c-player .list list-body>*::before:hover::before,c-player .list list-body>*::before:active::before{width:0.4em}}c-player .list list-body .music-name,c-player .list list-body .music-artist{padding:0 0.5em}c-player .list list-body .music-name{-webkit-box-flex:1;-webkit-flex:1;-ms-flex:1;flex:1} diff --git a/dist/cplayer.min.js b/dist/cplayer.min.js index 7f539d0..86d16b4 100644 --- a/dist/cplayer.min.js +++ b/dist/cplayer.min.js @@ -1 +1 @@ -"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 i=0;i':'',i.SVG[t[e]]=n}}(),this.CBASE=new cBase,this.now=0,this.dragging={contain:!1,target:void 0},function(){var e=document.createElement("c-player"),t=document.createElement("div");t.classList.add("lyric"),t.classList.add("invisible");var s=document.createElement("lyric-body");t.appendChild(s);var n=document.createElement("div");n.classList.add("controls");var a=document.createElement("div");a.classList.add("c-left");var r=document.createElement("div");r.classList.add("music-description");var o=document.createElement("div");o.classList.add("image");var l=document.createElement("img");l.classList.add("meta-bak"),o.appendChild(l);var c=document.createElement("div");c.classList.add("music-meta");var d=document.createElement("div"),h=document.createElement("span");h.classList.add("music-name");var u=document.createElement("span");u.classList.add("music-artist"),d.appendChild(h),d.appendChild(u),c.appendChild(d),r.appendChild(o),r.appendChild(c);var m=document.createElement("a");m.classList.add("play-icon"),i.CBASE.replaceInner(m,i.SVG.playArrow),a.appendChild(r),a.appendChild(m);var v=document.createElement("div");v.classList.add("c-center");var _=document.createElement("div");_.classList.add("time");var p=document.createElement("div");p.classList.add("time-body");var g=document.createElement("div");g.classList.add("time-line");var y=document.createElement("div");y.classList.add("time-point"),g.appendChild(y),p.appendChild(g),_.appendChild(p),v.appendChild(_);var L=document.createElement("div");L.classList.add("c-right");var f=document.createElement("div");f.classList.add("volume");var w=document.createElement("div");w.classList.add("volume-button");var C=document.createElement("a");C.classList.add("volume-power"),i.CBASE.replaceInner(C,i.SVG.volumeOff),w.appendChild(C);var E=document.createElement("div");E.classList.add("volume-body");var S=document.createElement("div");S.classList.add("volume-line");var B=document.createElement("div");B.classList.add("volume-point"),S.appendChild(B),E.appendChild(S),f.appendChild(w),f.appendChild(E);var T=document.createElement("div");T.classList.add("list-button");var I=document.createElement("a");I.classList.add("list-power"),i.CBASE.replaceInner(I,i.SVG.playlistPlay),T.appendChild(I);var k=document.createElement("div");k.classList.add("lyric-button");var b=document.createElement("a");b.classList.add("lyric-power"),i.CBASE.replaceInner(b,i.SVG.note),k.appendChild(b),L.appendChild(f),L.appendChild(T),L.appendChild(k),n.appendChild(a),n.appendChild(v),n.appendChild(L);var A=document.createElement("div");A.classList.add("list"),A.classList.add("invisible");var P=document.createElement("list-body");A.appendChild(P),e.appendChild(t),e.appendChild(n),e.appendChild(A),i.options.element.appendChild(e)}(),this.CBASE.root=this.options.element.getElementsByTagName("c-player"),this.CBASE.root=this.CBASE.root[this.CBASE.root.length-1],this.__LIST__={lyric:this.CBASE.getByClass("lyric"),lyricBody:this.CBASE.getByTagName("lyric-body"),toggle:this.CBASE.getByClass("play-icon"),img:this.CBASE.getByClass("meta-bak"),name:this.CBASE.getByClass("music-name"),artist:this.CBASE.getByClass("music-artist"),time:this.CBASE.getByClass("time"),timeLine:this.CBASE.getByClass("time-line"),timePoint:this.CBASE.getByClass("time-point"),lyricPower:this.CBASE.getByClass("lyric-power"),volumePower:this.CBASE.getByClass("volume-power"),volumeLine:this.CBASE.getByClass("volume-line"),volumePoint:this.CBASE.getByClass("volume-point"),listPower:this.CBASE.getByClass("list-power"),list:this.CBASE.getByClass("list"),listBody:this.CBASE.getByTagName("list-body")},this.__LIST__.toggleIcon=this.CBASE.getByTagName("svg",this.__LIST__.toggle),this.__LIST__.volumeIcon=this.CBASE.getByTagName("svg",this.__LIST__.volumePower),this.music=document.createElement("audio"),this.music.autoplay=!!this.options.autoplay,this.emitter.on("toggle",function(){i.isPaused()?i.play():i.pause()}).on("clickLyricPower",function(){i.hasLyric(i.now)&&i.__LIST__.lyric.classList.contains("invisible")?i.showLyric():i.hasLyric(i.now)&&!i.__LIST__.lyric.classList.contains("invisible")&&i.hideLyric()}).on("clickListPower",function(){i.hasList()&&i.__LIST__.list.classList.contains("invisible")?i.showList():i.hasLyric()&&!i.__LIST__.list.classList.contains("invisible")&&i.hideList()}).on("clickVolumePower",function(){i.isMuted()?i.music.muted=!1:i.volume(0)}).on("timeupdate",function(){i.updateTime(),i.hasLyric(i.now)&&i.slideLyric(i.music.currentTime)}).on("volumechange",function(){i.volume()}).on("pause",function(){i.CBASE.replaceInner(i.__LIST__.toggle,i.SVG.playArrow)}).on("play",function(){i.CBASE.replaceInner(i.__LIST__.toggle,i.SVG.pause),i.__LIST__.toggleIcon=i.CBASE.getByTagName("svg",i.__LIST__.toggle)}).on("ended",function(){i.CBASE.style(i.__LIST__.lyricBody,"transform",""),i.options.list[i.now].loop===!0?(i.updateTime(0),i.play()):i.hasList()&&i.now!==i.options.list.length-1&&i.next()}),this.options.list[0]&&this.toggle(),this.__LIST__.toggle.addEventListener("click",function(){return i.emitter.emit("toggle")}),this.__LIST__.lyricPower.addEventListener("click",function(){return i.emitter.emit("clickLyricPower")}),this.__LIST__.listPower.addEventListener("click",function(){return i.emitter.emit("clickListPower")}),this.__LIST__.volumePower.addEventListener("click",function(){return i.emitter.emit("clickVolumePower")}),this.music.addEventListener("volumechange",function(e){return i.emitter.emit("volumechange",e)}),this.music.addEventListener("timeupdate",function(e){return i.emitter.emit("timeupdate",e)}),this.music.addEventListener("canplaythrough",function(){return i.emitter.emit("canplaythrough")}),this.music.addEventListener("pause",function(){return i.emitter.emit("pause")}),this.music.addEventListener("play",function(){return i.emitter.emit("play")}),this.music.addEventListener("ended",function(){return i.emitter.emit("ended")}),this.options.element.addEventListener("mousedown",function(e){return i.dragPercentage(e)}),this.options.element.addEventListener("mousemove",function(e){return i.dragPercentage(e)}),this.options.element.addEventListener("mouseup",function(e){return i.dragPercentage(e)}),(this.music.onplay=void 0)&&Object.defineProperty(music,"paused",{set:function(e){(e=!0)?this.emitter.emit("pause"):this.emitter.emit("play")}}),this.volume(),this.refreshList()}return _createClass(e,[{key:"dragPercentage",value:function(e){var t=void 0;switch(e.type){case"mousedown":if(e.target===this.__LIST__.timePoint&&e.target===this.__LIST__.volumePoint)return;this.dragging.contain=!0,this.dragging.target=e.target;break;case"mousemove":if(this.dragging.contain===!1)return;if(t=this.dragging.target.parentNode.parentNode,t.classList.contains("volume-body")?this.__LIST__.volumeLine.style.width=(e.clientX-t.offsetLeft)/t.offsetWidth*100+"%":t.classList.contains("time-body")&&(this.__LIST__.timeLine.style.width=(e.clientX-t.offsetLeft)/t.offsetWidth*100+"%"),t.classList.contains("volume-body")){var i=(e.clientX-t.offsetLeft)/t.offsetWidth;i=i>1?1:i,i=i<0?0:i,this.music.volume=i}break;case"mouseup":if(this.dragging.contain===!1)return;if(t=this.dragging.target.parentNode.parentNode,t.classList.contains("volume-body")){var s=(e.clientX-t.offsetLeft)/t.offsetWidth;s=s>1?1:s,s=s<0?0:s,this.music.volume=s}else if(t.classList.contains("time-body")){var n=(e.clientX-t.offsetLeft)/t.offsetWidth;n=n>1?1:n,n=n<0?0:n,this.updateTime(n*this.music.duration)}this.dragging.contain=!1,this.dragging.target=void 0}}},{key:"volume",value:function(){var e=this,t=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,i=function(){0===e.music.volume||e.isMuted()?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeOff),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>0&&e.music.volume<=.5?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeDown),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>.5&&e.music.volume<=1?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeUp),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):console.log("Unexcepted Volume: "+e.music.volume)};return void 0===t?(this.__LIST__.volumeLine.style.width=100*this.music.volume+"%",i(),this.isMuted()?0:this.music.volume):void(0===t?(this.music.muted=!0,i()):(this.music.volume=t,i()))}},{key:"isMuted",value:function(){return this.music.muted}},{key:"play",value:function(){return this.music.seeking===!0?this:(this.music.play(),this)}},{key:"pause",value:function(){if(this.music.seeking!==!0)return this.music.pause(),this}},{key:"previous",value:function(){if(this.emitter.emit("previous"),0!==this.now)return this.now--,this.toggle().play(),this}},{key:"next",value:function(){if(this.emitter.emit("next"),this.now!==this.options.list.length-1)return this.now++,this.toggle().play(),this}},{key:"to",value:function(e){return this.now=e,this.toggle(),this.play(),this}},{key:"toggle",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:this.now;this.emitter.emit("toggle");var t=this.options.list[e],i=this.__LIST__;this.music.pause();var s=[t.image,t.name,t.artist,t.url];return i.img.src=s[0],i.name.innerHTML=s[1],i.artist.innerHTML=s[2],this.music.src=s[3],this.transLock=!1,this.refreshLyric(),this.hasLyric(this.now)||this.hideLyric(),this.CBASE.style(this.__LIST__.lyricBody,"transform",""),this}},{key:"isPaused",value:function(e){return void 0!==e&&e(),this.music.paused}},{key:"hasLyric",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:0,t=arguments[1];return void 0!==t&&t(),void 0!=this.options.list[e].lyric}},{key:"showLyric",value:function(){return this.emitter.emit("slideLyric",!0),this.hasLyric(this.now)&&this.__LIST__.lyric.classList.remove("invisible"),this.__LIST__.list.classList.contains("invisible")||this.hideList(),this}},{key:"hideLyric",value:function(){return this.emitter.emit("slideLyric",!1),this.__LIST__.lyric.classList.add("invisible"),this}},{key:"hasList",value:function(e){return void 0!==e&&e(),this.options.list.length>1}},{key:"showList",value:function(e){return this.emitter.emit("slideList",!0),this.__LIST__.list.classList.remove("invisible"),this.__LIST__.lyric.classList.contains("invisible")||this.hideLyric(),void 0!==e&&e(),this}},{key:"hideList",value:function(e){return this.emitter.emit("slideList",!1),this.__LIST__.list.classList.add("invisible"),void 0!==e&&e(),this}},{key:"refreshList",value:function(e){var t=this;this.emitter.emit("changeList");var i=this.options.list,s=this.__LIST__.listBody;s.innerHTML="";for(var n=function(e){var n=document.createElement("div");n.innerHTML=''+i[e].name+''+i[e].artist+"",n=s.appendChild(n),n.addEventListener("click",function(){t.to(e)})},a=0;a<=i.length-1;a++)n(a);void 0!==e&&e()}},{key:"add",value:function(e,t){var i=this,s=this.options.list.push(e),n=document.createElement("div");n.innerHTML=''+e.name+''+e.artist+"",n=this.__LIST__.listBody.appendChild(n),n.addEventListener("click",function(){i.to(s-1)}),1===s&&this.toggle(),void 0!==t&&t()}},{key:"lyric",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0;if(void 0===e){if(this.hasLyric(this.now))return this.options.list[this.now].lyric}else this.options.list[this.now].lyric=e,this.refreshLyric();return this}},{key:"refreshLyric",value:function(e){if(this.__LIST__.lyricBody.innerHTML="",this.hasLyric(this.now)){var t=!this.transLock&&e?this.options.list[this.now].transLyric:this.options.list[this.now].lyric;t=t.split("\n");for(var i=[],s=0,n=t[s];s=0;c--)if(i[c].length>2)for(var d=i[c].length-1;d>=0;d--)d!==i[c].length-1&&void 0!==i[c][i[c].length-1]&&l.push({time:i[c][d],content:i[c][i[c].length-1]});else void 0!==i[c][1]&&l.push({time:i[c][0],content:i[c][1]});l.sort(function(e,t){return e.time-t.time}),l.now=0,this.__LYRIC__=l;for(var h=0;h<=l.length-1;h++){var u=document.createElement("lrc");u.innerHTML=l[h].content,this.__LIST__.lyricBody.appendChild(u)}this.emitter.emit("changeLyric")}}},{key:"updateTime",value:function(){var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:void 0,t=arguments[1];void 0!==e&&(this.music.currentTime=e),this.dragging.contain===!1&&(this.__LIST__.timeLine.style.width=this.music.currentTime/this.music.duration*100+"%"),void 0!==t&&t(this.music.currentTime)}},{key:"slideLyric",value:function(e){if(!this.__LIST__.lyric.classList.contains("invisible"))for(var t=void 0,i=void 0,s=void 0,n=this.__LIST__.lyricBody,a=this.__LIST__.lyricBody.getElementsByTagName("lrc"),r=this.__LYRIC__.length-1,o=this.__LYRIC__[r];r>=0;o=this.__LYRIC__[r-1],r--)if(!(o.time>e&&this.__LYRIC__[r-1]&&this.__LYRIC__[r-1].time>e)){if(o.time1)for(var c=l.length-1;c>=0;c--)l[c]!==a[r-1]&&l[c].classList.remove("now")}}},{key:"translate",value:function(){return!(!this.options.list[this.now].transLyric||!this.hasLyric(this.now))&&(this.refreshLyric(!0),void(this.transLock=!0))}},{key:"length",get:function(){return this.options.list.length},set:function(e){throw new SyntaxError("Read-only Property.")}}]),e}();"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t1?t-1:0),s=1;s0&&void 0!==arguments[0]?arguments[0]:document.documentElement;_classCallCheck(this,e),this.root=t;for(var i=document.documentElement.style,s=i.length;s>0;s--){if(i[s].indexOf("-webkit-")!==-1){this.browser="webkit";break}if(i[s].indexOf("-moz-")!==-1){this.browser="moz";break}if(i[s].indexOf("-o-")!==-1){this.browser="o";break}if(i[s].indexOf("-ms-")!==-1){this.browser="ms";break}}}return _createClass(e,[{key:"replace",value:function(e,t){t=t.cloneNode(!0),e.parentNode.appendChild(t),e.parentNode.removeChild(e)}},{key:"replaceInner",value:function(e,t){e.innerHTML=t}},{key:"getByClass",value:function(e,t){return void 0!=t?t.getElementsByClassName(e)[0]:this.root.getElementsByClassName(e)[0]}},{key:"getByTagName",value:function(e,t){return void 0!=t?t.getElementsByTagName(e)[0]:this.root.getElementsByTagName(e)[0]}},{key:"rand",value:function(e,t){if(void 0===e||void 0===t)return Math.random();if(e>t)throw new RangeError("the EndNumber must be bigger than the StartNumber");return(t-e)*Math.random()+e}},{key:"style",value:function(e,t,i){e.style[this.browser+t.slice(0,1).toUpperCase()+t.slice(1)]=i,e.style[t]=i}}]),e}();window&&(window.cPlayer=cPlayer); \ No newline at end of file +"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 i=0;i1?1:s,s=s<0?0:s,r.music.volume=s}window.addEventListener("mouseup",function n(e){if(r.dragging.contain!==!1){if(t[0])parent=r.dragging.target.parentNode.parentNode;else if(t[1])parent=r.dragging.target.parentNode;else{if(!t[2])throw new Error(JSON.stringify([r.dragging.target,t]));parent=r.dragging.target}if(parent.classList.contains("volume-body")){var s=(e.clientX-parent.offsetLeft)/parent.offsetWidth;s=s>1?1:s,s=s<0?0:s,r.music.volume=s}else if(parent.classList.contains("time-body")){var a=(e.clientX-parent.offsetLeft)/parent.offsetWidth;a=a>1?1:a,a=a<0?0:a,r.updateTime(a*r.music.duration)}r.dragging.contain=!1,r.dragging.target=void 0,window.removeEventListener("mouseup",n),window.removeEventListener("mousemove",i)}})}}),t[0]||window.addEventListener("mouseup",function s(e){if(r.dragging.contain!==!1){if(t[0])parent=r.dragging.target.parentNode.parentNode;else if(t[1])parent=r.dragging.target.parentNode;else{if(!t[2])throw new Error(JSON.stringify([r.dragging.target,t]));parent=r.dragging.target}if(parent.classList.contains("volume-body")){var i=(e.clientX-parent.offsetLeft)/parent.offsetWidth;i=i>1?1:i,i=i<0?0:i,r.music.volume=i}else if(parent.classList.contains("time-body")){var n=(e.clientX-parent.offsetLeft)/parent.offsetWidth;n=n>1?1:n,n=n<0?0:n,r.updateTime(n*r.music.duration)}r.dragging.contain=!1,r.dragging.target=void 0,window.removeEventListener("mouseup",s)}}))}var s=this;_classCallCheck(this,e),this.transLock=!1;var n={play:[],pause:[],volumechange:[],timeupdate:[],canplaythrough:[],ended:[],toggle:[],previous:[],next:[],changeList:[],changeLyric:[],slideList:[],slideLyric:[],clickLyricPower:[],clickListPower:[],clickVolumePower:[]};this.emitter=new cEmitter(n),this.on=function(e,t){return s.emitter.on(e,t)};var a={element:document.getElementById("cplayer"),list:[]};void 0!==Object.assign&&(this.options=Object.assign({},a,t)),this.SVG={playArrow:"M16 10v28l22-14z",pause:"M12 38h8V10h-8v28zm16-28v28h8V10h-8z",playlistPlay:"M26 6H-8v4h34V6zm0-8H-8v4h34v-4zM-8 18h26v-4H-8v4zm30-4v12l10-6-10-6z",note:"M44 20L32 8H8c-2.2 0-4 1.8-4 4v24.02C4 38.22 5.8 40 8 40l32-.02c2.2 0 4-1.78 4-3.98V20zm-14-9l11 11H30V11z",volumeUp:"M6 18v12h8l10 10V8L14 18H6zm27 6c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zM28 6.46v4.13c5.78 1.72 10 7.07 10 13.41s-4.22 11.69-10 13.41v4.13c8.01-1.82 14-8.97 14-17.54S36.01 8.28 28 6.46z",volumeMute:"M14 18v12h8l10 10V8L22 18h-8z",volumeOff:"M33 24c0-3.53-2.04-6.58-5-8.05v4.42l4.91 4.91c.06-.42.09-.85.09-1.28zm5 0c0 1.88-.41 3.65-1.08 5.28l3.03 3.03C41.25 29.82 42 27 42 24c0-8.56-5.99-15.72-14-17.54v4.13c5.78 1.72 10 7.07 10 13.41zM8.55 6L6 8.55 15.45 18H6v12h8l10 10V26.55l8.51 8.51c-1.34 1.03-2.85 1.86-4.51 2.36v4.13c2.75-.63 5.26-1.89 7.37-3.62L39.45 42 42 39.45l-18-18L8.55 6zM24 8l-4.18 4.18L24 16.36V8z",volumeDown:"M37 24c0-3.53-2.04-6.58-5-8.05v16.11c2.96-1.48 5-4.53 5-8.06zm-27-6v12h8l10 10V8L18 18h-8z"},function(){for(var e=0,t=Object.keys(s.SVG),i=t.length;e':'',s.SVG[t[e]]=n}}(),this.CBASE=new cBase,this.now=0,this.dragging={contain:!1,target:void 0},function(){var e=document.createElement("c-player"),t=document.createElement("div");t.classList.add("lyric"),t.classList.add("invisible");var i=document.createElement("lyric-body");t.appendChild(i);var n=document.createElement("div");n.classList.add("controls");var a=document.createElement("div");a.classList.add("c-left");var r=document.createElement("div");r.classList.add("music-description");var o=document.createElement("div");o.classList.add("image");var l=document.createElement("img");l.classList.add("meta-bak"),o.appendChild(l);var c=document.createElement("div");c.classList.add("music-meta");var d=document.createElement("div"),u=document.createElement("span");u.classList.add("music-name");var h=document.createElement("span");h.classList.add("music-artist"),d.appendChild(u),d.appendChild(h),c.appendChild(d),r.appendChild(o),r.appendChild(c);var m=document.createElement("a");m.classList.add("play-icon"),s.CBASE.replaceInner(m,s.SVG.playArrow),a.appendChild(r),a.appendChild(m);var v=document.createElement("div");v.classList.add("c-center");var _=document.createElement("div");_.classList.add("time");var p=document.createElement("div");p.classList.add("time-body");var g=document.createElement("div");g.classList.add("time-line");var L=document.createElement("div");L.classList.add("time-point"),g.appendChild(L),p.appendChild(g),_.appendChild(p),v.appendChild(_);var y=document.createElement("div");y.classList.add("c-right");var f=document.createElement("div");f.classList.add("volume");var w=document.createElement("div");w.classList.add("volume-button");var C=document.createElement("a");C.classList.add("volume-power"),s.CBASE.replaceInner(C,s.SVG.volumeOff),w.appendChild(C);var S=document.createElement("div");S.classList.add("volume-body");var E=document.createElement("div");E.classList.add("volume-line");var B=document.createElement("div");B.classList.add("volume-point"),E.appendChild(B),S.appendChild(E),f.appendChild(w),f.appendChild(S);var T=document.createElement("div");T.classList.add("list-button");var I=document.createElement("a");I.classList.add("list-power"),s.CBASE.replaceInner(I,s.SVG.playlistPlay),T.appendChild(I);var b=document.createElement("div");b.classList.add("lyric-button");var k=document.createElement("a");k.classList.add("lyric-power"),s.CBASE.replaceInner(k,s.SVG.note),b.appendChild(k),y.appendChild(f),y.appendChild(T),y.appendChild(b),n.appendChild(a),n.appendChild(v),n.appendChild(y);var A=document.createElement("div");A.classList.add("list"),A.classList.add("invisible");var P=document.createElement("list-body");A.appendChild(P),e.appendChild(t),e.appendChild(n),e.appendChild(A),s.options.element.appendChild(e)}(),this.CBASE.root=this.options.element.getElementsByTagName("c-player"),this.CBASE.root=this.CBASE.root[this.CBASE.root.length-1],this.__LIST__={lyric:this.CBASE.getByClass("lyric"),lyricBody:this.CBASE.getByTagName("lyric-body"),toggle:this.CBASE.getByClass("play-icon"),img:this.CBASE.getByClass("meta-bak"),name:this.CBASE.getByClass("music-name"),artist:this.CBASE.getByClass("music-artist"),time:this.CBASE.getByClass("time"),timeBody:this.CBASE.getByClass("time-body"),timeLine:this.CBASE.getByClass("time-line"),timePoint:this.CBASE.getByClass("time-point"),lyricPower:this.CBASE.getByClass("lyric-power"),volumePower:this.CBASE.getByClass("volume-power"),volumeBody:this.CBASE.getByClass("volume-body"),volumeLine:this.CBASE.getByClass("volume-line"),volumePoint:this.CBASE.getByClass("volume-point"),listPower:this.CBASE.getByClass("list-power"),list:this.CBASE.getByClass("list"),listBody:this.CBASE.getByTagName("list-body")},this.__LIST__.toggleIcon=this.CBASE.getByTagName("svg",this.__LIST__.toggle),this.__LIST__.volumeIcon=this.CBASE.getByTagName("svg",this.__LIST__.volumePower);var r=this;this.music=document.createElement("audio"),this.music.autoplay=!!this.options.autoplay,this.emitter.on("toggle",function(){s.isPaused()?s.play():s.pause()}).on("clickLyricPower",function(){s.hasLyric(s.now)&&s.__LIST__.lyric.classList.contains("invisible")?s.showLyric():s.hasLyric(s.now)&&!s.__LIST__.lyric.classList.contains("invisible")&&s.hideLyric()}).on("clickListPower",function(){s.hasList()&&s.__LIST__.list.classList.contains("invisible")?s.showList():s.hasLyric()&&!s.__LIST__.list.classList.contains("invisible")&&s.hideList()}).on("clickVolumePower",function(){s.isMuted()?s.music.muted=!1:s.volume(0)}).on("timeupdate",function(){s.updateTime(),s.hasLyric(s.now)&&s.slideLyric(s.music.currentTime)}).on("volumechange",function(){s.volume()}).on("pause",function(){s.CBASE.replaceInner(s.__LIST__.toggle,s.SVG.playArrow)}).on("play",function(){s.CBASE.replaceInner(s.__LIST__.toggle,s.SVG.pause),s.__LIST__.toggleIcon=s.CBASE.getByTagName("svg",s.__LIST__.toggle)}).on("ended",function(){s.CBASE.style(s.__LIST__.lyricBody,"transform",""),s.options.list[s.now].loop===!0?(s.updateTime(0),s.play()):s.hasList()&&s.now!==s.options.list.length-1&&s.next()}),this.options.list[0]&&this.toggle(),this.__LIST__.toggle.addEventListener("click",function(){return s.emitter.emit("toggle")}),this.__LIST__.lyricPower.addEventListener("click",function(){return s.emitter.emit("clickLyricPower")}),this.__LIST__.listPower.addEventListener("click",function(){return s.emitter.emit("clickListPower")}),this.__LIST__.volumePower.addEventListener("click",function(){return s.emitter.emit("clickVolumePower")}),this.music.addEventListener("volumechange",function(e){return s.emitter.emit("volumechange",e)}),this.music.addEventListener("timeupdate",function(e){return s.emitter.emit("timeupdate",e)}),this.music.addEventListener("canplaythrough",function(){return s.emitter.emit("canplaythrough")}),this.music.addEventListener("pause",function(){return s.emitter.emit("pause")}),this.music.addEventListener("play",function(){return s.emitter.emit("play")}),this.music.addEventListener("ended",function(){return s.emitter.emit("ended")}),this.options.element.addEventListener("mousedown",function(e){return i(e)}),this.volume(),this.refreshList()}return _createClass(e,[{key:"volume",value:function(){var e=this,t=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0],i=function(){0===e.music.volume||e.isMuted()?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeOff),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>0&&e.music.volume<=.5?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeDown),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):e.music.volume>.5&&e.music.volume<=1?(e.CBASE.replaceInner(e.__LIST__.volumePower,e.SVG.volumeUp),e.__LIST__.volumeIcon=e.CBASE.getByTagName("svg",e.__LIST__.volumePower)):console.log("Unexcepted Volume: "+e.music.volume)};return void 0===t?(this.__LIST__.volumeLine.style.width=100*this.music.volume+"%",i(),this.isMuted()?0:this.music.volume):void(0===t?(this.music.muted=!0,i()):(this.music.volume=t,i()))}},{key:"isMuted",value:function(){return this.music.muted}},{key:"play",value:function(){return this.music.seeking===!0?this:(this.music.play(),this)}},{key:"pause",value:function(){if(this.music.seeking!==!0)return this.music.pause(),this}},{key:"previous",value:function(){if(this.emitter.emit("previous"),0!==this.now)return this.now--,this.toggle().play(),this}},{key:"next",value:function(){if(this.emitter.emit("next"),this.now!==this.options.list.length-1)return this.now++,this.toggle().play(),this}},{key:"to",value:function(e){return this.now=e,this.toggle(),this.play(),this}},{key:"toggle",value:function(){var e=arguments.length<=0||void 0===arguments[0]?this.now:arguments[0];this.emitter.emit("toggle");var t=this.options.list[e],i=this.__LIST__;this.music.pause();var s=[t.image,t.name,t.artist,t.url];return i.img.src=s[0],i.name.innerHTML=s[1],i.artist.innerHTML=s[2],this.music.src=s[3],this.transLock=!1,this.refreshLyric(),this.hasLyric(this.now)||this.hideLyric(),this.CBASE.style(this.__LIST__.lyricBody,"transform",""),this}},{key:"isPaused",value:function(e){return void 0!==e&&e(),this.music.paused}},{key:"hasLyric",value:function(){var e=arguments.length<=0||void 0===arguments[0]?0:arguments[0],t=arguments[1];return void 0!==t&&t(),void 0!=this.options.list[e].lyric}},{key:"showLyric",value:function(){return this.emitter.emit("slideLyric",!0),this.hasLyric(this.now)&&this.__LIST__.lyric.classList.remove("invisible"),this.__LIST__.list.classList.contains("invisible")||this.hideList(),this}},{key:"hideLyric",value:function(){return this.emitter.emit("slideLyric",!1),this.__LIST__.lyric.classList.add("invisible"),this}},{key:"hasList",value:function(e){return void 0!==e&&e(),this.options.list.length>1}},{key:"showList",value:function(e){return this.emitter.emit("slideList",!0),this.__LIST__.list.classList.remove("invisible"),this.__LIST__.lyric.classList.contains("invisible")||this.hideLyric(),void 0!==e&&e(),this}},{key:"hideList",value:function(e){return this.emitter.emit("slideList",!1),this.__LIST__.list.classList.add("invisible"),void 0!==e&&e(),this}},{key:"refreshList",value:function(e){var t=this;this.emitter.emit("changeList");var i=this.options.list,s=this.__LIST__.listBody;s.innerHTML="";for(var n=function(e){var n=document.createElement("div");n.innerHTML=''+i[e].name+''+i[e].artist+"",n=s.appendChild(n),n.addEventListener("click",function(){t.to(e)})},a=0;a<=i.length-1;a++)n(a);void 0!==e&&e()}},{key:"add",value:function(e,t){var i=this,s=this.options.list.push(e),n=document.createElement("div");n.innerHTML=''+e.name+''+e.artist+"",n=this.__LIST__.listBody.appendChild(n),n.addEventListener("click",function(){i.to(s-1)}),1===s&&this.toggle(),void 0!==t&&t()}},{key:"lyric",value:function(){var e=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0];if(void 0===e){if(this.hasLyric(this.now))return this.options.list[this.now].lyric}else this.options.list[this.now].lyric=e,this.refreshLyric();return this}},{key:"refreshLyric",value:function(e){if(this.__LIST__.lyricBody.innerHTML="",this.hasLyric(this.now)){var t=!this.transLock&&e?this.options.list[this.now].transLyric:this.options.list[this.now].lyric;t=t.split("\n");for(var i=[],s=0,n=t[s];s=0;c--)if(i[c].length>2)for(var d=i[c].length-1;d>=0;d--)d!==i[c].length-1&&void 0!==i[c][i[c].length-1]&&l.push({time:i[c][d],content:i[c][i[c].length-1]});else void 0!==i[c][1]&&l.push({time:i[c][0],content:i[c][1]});l.sort(function(e,t){return e.time-t.time}),l.now=0,this.__LYRIC__=l;for(var u=0;u<=l.length-1;u++){var h=document.createElement("lrc");h.innerHTML=l[u].content,this.__LIST__.lyricBody.appendChild(h)}this.emitter.emit("changeLyric")}}},{key:"updateTime",value:function(){var e=arguments.length<=0||void 0===arguments[0]?void 0:arguments[0],t=arguments[1];void 0!==e&&(this.music.currentTime=e),this.dragging.contain===!1&&(this.__LIST__.timeLine.style.width=this.music.currentTime/this.music.duration*100+"%"),void 0!==t&&t(this.music.currentTime)}},{key:"slideLyric",value:function(e){if(!this.__LIST__.lyric.classList.contains("invisible"))for(var t=void 0,i=void 0,s=void 0,n=this.__LIST__.lyricBody,a=this.__LIST__.lyricBody.getElementsByTagName("lrc"),r=this.__LYRIC__.length-1,o=this.__LYRIC__[r];r>=0;o=this.__LYRIC__[r-1],r--)if(!(o.time>e&&this.__LYRIC__[r-1]&&this.__LYRIC__[r-1].time>e)){if(o.time1)for(var c=l.length-1;c>=0;c--)l[c]!==a[r-1]&&l[c].classList.remove("now")}}},{key:"translate",value:function(){return!(!this.options.list[this.now].transLyric||!this.hasLyric(this.now))&&(this.refreshLyric(!0),void(this.transLock=!0))}},{key:"length",get:function(){return this.options.list.length},set:function(e){throw new SyntaxError("Read-only Property.")}}]),e}();"function"!=typeof Object.assign&&(Object.assign=function(e){if(null==e)throw new TypeError("Cannot convert undefined or null to object");e=Object(e);for(var t=1;t1?t-1:0),s=1;s0;s--){if(i[s].indexOf("-webkit-")!==-1){this.browser="webkit";break}if(i[s].indexOf("-moz-")!==-1){this.browser="moz";break}if(i[s].indexOf("-o-")!==-1){this.browser="o";break}if(i[s].indexOf("-ms-")!==-1){this.browser="ms";break}}}return _createClass(e,[{key:"replace",value:function(e,t){t=t.cloneNode(!0),e.parentNode.appendChild(t),e.parentNode.removeChild(e)}},{key:"replaceInner",value:function(e,t){e.innerHTML=t}},{key:"getByClass",value:function(e,t){return void 0!=t?t.getElementsByClassName(e)[0]:this.root.getElementsByClassName(e)[0]}},{key:"getByTagName",value:function(e,t){return void 0!=t?t.getElementsByTagName(e)[0]:this.root.getElementsByTagName(e)[0]}},{key:"rand",value:function(e,t){if(void 0===e||void 0===t)return Math.random();if(e>t)throw new RangeError("the EndNumber must be bigger than the StartNumber");return(t-e)*Math.random()+e}},{key:"style",value:function(e,t,i){e.style[this.browser+t.slice(0,1).toUpperCase()+t.slice(1)]=i,e.style[t]=i}}]),e}();window&&(window.cPlayer=cPlayer); \ No newline at end of file diff --git a/gulpfile.js b/gulpfile.js index 5061471..4b767cf 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -39,9 +39,19 @@ gulp.task("compress",["babel","sass"],()=>{ .pipe(gulp.dest("dist")); return 0; }); +gulp.task("_compress",["babel"],()=>{ + gulp.src("dist/cplayer.js") + .pipe(uglify()) + .pipe(rename({"suffix":".min"})) + .pipe(gulp.dest("dist")); + return 0; +}); gulp.task("createDemo",["compress"],()=>{ return gulp.src("dist/*").pipe(gulp.dest("demo")); }); +gulp.task("_createDemo",["_compress"],()=>{ + return gulp.src("dist/*").pipe(gulp.dest("demo")); +}); gulp.task("serve",["createDemo"],()=>{ browserSync.init({ server:{ @@ -49,7 +59,7 @@ gulp.task("serve",["createDemo"],()=>{ } }); gulp.watch("src/scss/*.scss",["sass"]); - gulp.watch("src/js/*.js",["createDemo"]); + gulp.watch("src/js/*.js",["_createDemo"]); gulp.watch("demo/*.min.js").on("change",reload); gulp.watch("demo/*.html").on("change",reload); }) \ No newline at end of file diff --git a/package.json b/package.json index 9630f98..11d51cb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "cPlayer", - "version": "2.3.11", + "version": "2.3.12", "description": "A beautiful and clean WEB Music Player by HTML5.", "scripts": { "dist": "gulp compress", diff --git a/src/js/cplayer.js b/src/js/cplayer.js index 1bf030d..dcecf03 100644 --- a/src/js/cplayer.js +++ b/src/js/cplayer.js @@ -177,10 +177,12 @@ const cPlayer = class cPlayer { "name" : this.CBASE.getByClass("music-name"), "artist" : this.CBASE.getByClass("music-artist"), "time" : this.CBASE.getByClass("time"), + "timeBody" : this.CBASE.getByClass("time-body"), "timeLine" : this.CBASE.getByClass("time-line"), "timePoint" : this.CBASE.getByClass("time-point"), "lyricPower" : this.CBASE.getByClass("lyric-power"), "volumePower": this.CBASE.getByClass("volume-power"), + "volumeBody" : this.CBASE.getByClass("volume-body"), "volumeLine" : this.CBASE.getByClass("volume-line"), "volumePoint": this.CBASE.getByClass("volume-point"), "listPower" : this.CBASE.getByClass("list-power"), @@ -190,6 +192,100 @@ const cPlayer = class cPlayer { this.__LIST__.toggleIcon = this.CBASE.getByTagName("svg",this.__LIST__.toggle); this.__LIST__.volumeIcon = this.CBASE.getByTagName("svg",this.__LIST__.volumePower); + let that=this;function dragPercentage(options) { + /* + While anything... + rightTarget(if.it.possible)[ + 0 -> sth.point + 1 -> sth.line + 2 -> sth.point & sth.line & sth.body + ] + */ + let rightTarget = []; + rightTarget.push(options.target === that.__LIST__.timePoint + || options.target === that.__LIST__.volumePoint); //Check if the focus of mouse is the `point circle` + rightTarget.push(options.target === that.__LIST__.timeLine + || options.target === that.__LIST__.volumeLine); + rightTarget.push((options.target === that.__LIST__.timePoint + || options.target === that.__LIST__.volumePoint + || options.target === that.__LIST__.timeBody + || options.target === that.__LIST__.volumeBody + || options.target === that.__LIST__.timeLine + || options.target === that.__LIST__.volumeLine)); + if (!rightTarget[2]) return; + that.dragging.contain = true; + that.dragging.target = options.target; + if (rightTarget[0])window.addEventListener("mousemove",function mover(options){ + if (that.dragging.contain === false) return; + if (!rightTarget[0]) return; + parent = that.dragging.target.parentNode.parentNode; + if (parent.classList && parent.classList.contains("volume-body")) { + that.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } else if (parent.classList && parent.classList.contains("time-body")) { + that.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; + } + //实时修正VOLUME + if (parent.classList.contains("volume-body")) { + let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } + window.addEventListener("mouseup",function upper(options){ + if (that.dragging.contain === false) return; + /* + While anything... + sth.body -> self + sth.line -> parent + sth.point-> parent.parent + */ + if(false){} + else if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode} + else if(rightTarget[1]){parent = that.dragging.target.parentNode} + else if(rightTarget[2]){parent = that.dragging.target} + else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } else if (parent.classList.contains("time-body")) { + let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup",upper); + window.removeEventListener("mousemove",mover); + }); + }); + if (!rightTarget[0])window.addEventListener("mouseup",function upper(options){ + if (that.dragging.contain === false) return; + if(false){} + else if(rightTarget[0]){parent = that.dragging.target.parentNode.parentNode} + else if(rightTarget[1]){parent = that.dragging.target.parentNode} + else if(rightTarget[2]){parent = that.dragging.target} + else throw new Error(JSON.stringify([that.dragging.target, rightTarget])); + + if (parent.classList.contains("volume-body")) { + let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + vol = vol > 1 ? 1 : vol; + vol = vol < 0 ? 0 : vol; + that.music.volume = vol; + } else if (parent.classList.contains("time-body")) { + let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; + time = time > 1 ? 1 : time; + time = time < 0 ? 0 : time; + that.updateTime(time * that.music.duration); + } + that.dragging.contain = false; + that.dragging.target = undefined; + window.removeEventListener("mouseup",upper); + }); + } this.music = document.createElement("audio"); this.music.autoplay = !!this.options.autoplay; @@ -259,70 +355,12 @@ const cPlayer = class cPlayer { this.music.addEventListener("pause", ()=>this.emitter.emit("pause")); this.music.addEventListener("play", ()=>this.emitter.emit("play")); this.music.addEventListener("ended", ()=>this.emitter.emit("ended")); - //以下内容不适合使用cEmitter,所以就不使用了. - this.options.element.addEventListener("mousedown", (a)=>this.dragPercentage(a)); - this.options.element.addEventListener("mousemove", (a)=>this.dragPercentage(a)); - this.options.element.addEventListener("mouseup", (a)=>this.dragPercentage(a)); - //以上内容不适合使用cEmitter,所以就不使用了. - - //以下内容是为了兼容UC - if(this.music.onplay = undefined) Object.defineProperty(music,"paused",{set:function(check){ - if(check = true){ - this.emitter.emit("pause"); - }else{ - this.emitter.emit("play"); - } - }}); - //以上内容是为了兼容UC + this.options.element.addEventListener("mousedown", (a)=>dragPercentage(a)); this.volume(); this.refreshList(); }; - dragPercentage(options) { - let parent; - switch (options.type) { - case "mousedown": - if (!(options.target !== this.__LIST__.timePoint || options.target !== this.__LIST__.volumePoint)) return; - this.dragging.contain = true; - this.dragging.target = options.target; - break; - case "mousemove": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - this.__LIST__.volumeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } else if (parent.classList.contains("time-body")) { - this.__LIST__.timeLine.style.width = (options.clientX - parent.offsetLeft) / parent.offsetWidth * 100 + "%"; - } - //实时修正VOLUME(某人强烈要求) - if (parent.classList.contains("volume-body")) { - let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - vol = vol > 1 ? 1 : vol; - vol = vol < 0 ? 0 : vol; - this.music.volume = vol; - } - break; - case "mouseup": - if (this.dragging.contain === false) return; - parent = this.dragging.target.parentNode.parentNode; - if (parent.classList.contains("volume-body")) { - let vol = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - vol = vol > 1 ? 1 : vol; - vol = vol < 0 ? 0 : vol; - this.music.volume = vol; - } else if (parent.classList.contains("time-body")) { - let time = (options.clientX - parent.offsetLeft) / parent.offsetWidth; - time = time > 1 ? 1 : time; - time = time < 0 ? 0 : time; - this.updateTime(time * this.music.duration); - } - this.dragging.contain = false; - this.dragging.target = undefined; - break; - } - } - volume(vl = undefined) { let checkLevel = ()=>{ if(this.music.volume===0||this.isMuted()){ @@ -358,10 +396,6 @@ const cPlayer = class cPlayer { } play() { - /*this.interval = setInterval(()=>{ - if (this.dragging.contain === false) this.__LIST__.timeLine.style.width = (this.music.currentTime / this.music.duration) * 100 + "%"; - },500); - */ if(this.music.seeking === true) return this; this.music.play(); return this; @@ -369,7 +403,6 @@ const cPlayer = class cPlayer { pause() { if(this.music.seeking === true) return; - //clearInterval(this.interval); this.music.pause(); return this; } @@ -401,14 +434,11 @@ const cPlayer = class cPlayer { this.emitter.emit("toggle"); let list = this.options.list[now], dom = this.__LIST__; this.music.pause(); - //if(this.music.ended)this.music.load(); [dom.img.src, dom.name.innerHTML, dom.artist.innerHTML, this.music.src] = [list.image, list.name, list.artist, list.url]; this.transLock = false; this.refreshLyric(); if (!this.hasLyric(this.now))this.hideLyric(); - //this.__LIST__.lyricBody.style.transform = ""; this.CBASE.style(this.__LIST__.lyricBody,"transform",""); - //this.play(); return this; } @@ -457,7 +487,6 @@ const cPlayer = class cPlayer { refreshList(func) { this.emitter.emit("changeList"); - //let __SELF__ = this; let list = this.options.list, lb = this.__LIST__.listBody; lb.innerHTML = ``; for (let i = 0; i <= list.length - 1; i++) { @@ -472,7 +501,6 @@ const cPlayer = class cPlayer { } add(u,func) { - //let __SELF__ = this; let ln = this.options.list.push(u); let div = document.createElement("div"); div.innerHTML = '' + u.name + '' + u.artist + ''; @@ -502,7 +530,7 @@ const cPlayer = class cPlayer { //START LRC BASEING... lr = lr.split("\n"); let lrcs = []; - for (/* let content of lr */ let i = 0,content=lr[i];i{} if(this.events[eventName]&&this.events[eventName].push !== undefined&&typeof func === "function"){ this.events[eventName].push(func); }else if(this.events[eventName]===undefined||this.events[eventName].push===undefined){ @@ -655,7 +681,6 @@ const cEmitter = class cEmitter{ this.events[eventName][i](args); } return this; - //也许会有emitter.emit(..).emit(..)的写法?一次执行俩事件,实在不知道哪里有用... } } const cBase = class cBase{