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

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

`;\r\n }\r\n this.lrcContents.innerHTML = lrcHTML;\r\n if (!this.lrcIndex) {\r\n this.lrcIndex = 0;\r\n }\r\n this.lrcContents.getElementsByTagName('p')[0].classList.add('aplayer-lrc-current');\r\n this.lrcContents.style.transform = 'translateY(0px)';\r\n this.lrcContents.style.webkitTransform = 'translateY(0px)';\r\n }\r\n\r\n // set duration time\r\n if (this.audio.duration !== 1) { // compatibility: Android browsers will output 1 at first\r\n this.element.getElementsByClassName('aplayer-dtime')[0].innerHTML = this.audio.duration ? this.secondToTime(this.audio.duration) : '00:00';\r\n }\r\n\r\n // autoplay\r\n if (this.option.autoplay && !this.isMobile) {\r\n this.play();\r\n }\r\n this.option.autoplay = true; // autoplay next music\r\n\r\n if (this.isMobile) {\r\n this.pause();\r\n }\r\n }\r\n\r\n /**\r\n * Play music\r\n */\r\n play() {\r\n if (this.audio.paused) {\r\n this.button.classList.remove('aplayer-play');\r\n this.button.classList.add('aplayer-pause');\r\n this.button.innerHTML = '';\r\n setTimeout(() => {\r\n this.button.innerHTML = '';\r\n }, 50);\r\n\r\n // pause other players (Thanks @Aprikyblue)\r\n if (this.option.mutex) {\r\n for (let i = 0; i < instances.length; i++) {\r\n if (this != instances[i]) {\r\n instances[i].pause();\r\n }\r\n }\r\n }\r\n this.audio.play();\r\n if (this.playedTime) {\r\n clearInterval(this.playedTime);\r\n }\r\n this.playedTime = setInterval(() => {\r\n this.updateBar('played', this.audio.currentTime / this.audio.duration, 'width');\r\n if (this.option.showlrc) {\r\n this.updateLrc();\r\n }\r\n this.ptime.innerHTML = this.secondToTime(this.audio.currentTime);\r\n this.trigger('playing');\r\n }, 100);\r\n this.trigger('play');\r\n }\r\n }\r\n\r\n /**\r\n * Pause music\r\n */\r\n pause() {\r\n if (!this.audio.paused || this.ended) {\r\n this.ended = false;\r\n this.button.classList.remove('aplayer-pause');\r\n this.button.classList.add('aplayer-play');\r\n this.button.innerHTML = '';\r\n setTimeout(() => {\r\n this.button.innerHTML = '';\r\n }, 50);\r\n this.audio.pause();\r\n clearInterval(this.playedTime);\r\n this.trigger('pause');\r\n }\r\n }\r\n\r\n /**\r\n * attach event\r\n */\r\n on(name, func) {\r\n if (typeof func === 'function') {\r\n this.event[name].push(func);\r\n }\r\n }\r\n }\r\n\r\n if (typeof module !== 'undefined' && typeof module.exports !== 'undefined') {\r\n module.exports = APlayer;\r\n }\r\n else {\r\n window.APlayer = APlayer;\r\n }\r\n})([]);"],"sourceRoot":"/source/"}