diff --git a/docs/assets/example/danmuku.js b/docs/assets/example/danmuku.js index 34b2f29d9..9bd40c3b5 100644 --- a/docs/assets/example/danmuku.js +++ b/docs/assets/example/danmuku.js @@ -42,8 +42,7 @@ var art = new Artplayer({ art.plugins.artplayerPluginDanmuku.emit({ text: text, color: color, - border: color, - time: art.player.currentTime + 0.2, + border: true, }); }, }, diff --git a/docs/assets/example/github.js b/docs/assets/example/github.js index 56682f9a8..d19c5fa12 100644 --- a/docs/assets/example/github.js +++ b/docs/assets/example/github.js @@ -45,7 +45,7 @@ var art = new Artplayer({ ...data, mode: 0, time: art.player.currentTime + 0.2, - border: data.color, + border: true, }); }) .catch(() => { diff --git a/docs/uncompiled/artplayer-plugin-danmuku.js b/docs/uncompiled/artplayer-plugin-danmuku.js index 9b57275a8..93ba2e97b 100644 --- a/docs/uncompiled/artplayer-plugin-danmuku.js +++ b/docs/uncompiled/artplayer-plugin-danmuku.js @@ -559,8 +559,8 @@ danmu.$ref.style.opacity = _this2.option.opacity; danmu.$ref.style.fontSize = "".concat(_this2.option.fontSize, "px"); danmu.$ref.innerText = danmu.text; - danmu.$ref.style.color = danmu.color; - danmu.$ref.style.border = danmu.border ? "1px solid ".concat(danmu.color) : 'none'; + danmu.$ref.style.color = danmu.color || '#fff'; + danmu.$ref.style.border = danmu.border ? "1px solid ".concat(danmu.color || '#fff') : 'none'; danmu.$restTime = _this2.option.synchronousPlayback && player.playbackRate ? _this2.option.speed / Number(player.playbackRate) : _this2.option.speed; danmu.$lastStartTime = Date.now(); var danmuWidth = getRect(danmu.$ref, 'width'); @@ -629,6 +629,16 @@ notice = _this$art2.notice, player = _this$art2.player, i18n = _this$art2.i18n; + var _this$art$constructor2 = this.art.constructor, + clamp = _this$art$constructor2.utils.clamp, + validator = _this$art$constructor2.validator; + validator(danmu, { + text: 'string', + mode: 'number|undefined', + color: 'string|undefined', + time: 'number|undefined', + border: 'boolean|undefined' + }); if (!danmu.text.trim()) { notice.show = i18n.get('Danmu text cannot be empty'); @@ -640,8 +650,10 @@ return; } - if (typeof danmu.time !== 'number') { - danmu.time = player.currentTime; + if (danmu.time) { + danmu.time = clamp(danmu.time, 0, Infinity); + } else { + danmu.time = player.currentTime + 0.5; } this.queue.push(_objectSpread({ diff --git a/docs/uncompiled/artplayer-plugin-danmuku.js.map b/docs/uncompiled/artplayer-plugin-danmuku.js.map index 4cf1f46aa..ed35194c6 100644 --- a/docs/uncompiled/artplayer-plugin-danmuku.js.map +++ b/docs/uncompiled/artplayer-plugin-danmuku.js.map @@ -1 +1 @@ -{"version":3,"file":"artplayer-plugin-danmuku.js","sources":["../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../packages/artplayer-plugin-danmuku/src/i18n.js","../../packages/artplayer-plugin-danmuku/src/setting.js","../../packages/artplayer-plugin-danmuku/src/utils.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../packages/artplayer-plugin-danmuku/src/bilibili.js","../../packages/artplayer-plugin-danmuku/src/getDanmuTop.js","../../packages/artplayer-plugin-danmuku/src/danmuku.js","../../packages/artplayer-plugin-danmuku/src/index.js"],"sourcesContent":["function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","export default {\n 'zh-cn': {\n 'Danmu opacity': '弹幕透明度',\n 'Danmu speed': '弹幕速度',\n 'Danmu size': '弹幕大小',\n 'Danmu text cannot be empty': '弹幕文本不能为空',\n 'The length of the danmu does not exceed': '弹幕文本字数不能超过',\n 'Danmu speed synchronous playback multiple': '弹幕速度同步播放倍数',\n },\n 'zh-tw': {\n 'Danmu opacity': '彈幕透明度',\n 'Danmu speed': '彈幕速度',\n 'Danmu size': '弹幕大小',\n 'Danmu text cannot be empty': '彈幕文本不能為空',\n 'The length of the danmu does not exceed': '彈幕文本字數不能超過',\n 'Danmu speed synchronous playback multiple': '彈幕速度同步播放倍數',\n },\n};","export function opacity(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-opacity',\n index: 10,\n html: `\n
\n ${i18n.get('Danmu opacity')}: 100%\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = Number(value) * 100;\n\n art.plugins.artplayerPluginDanmuku.config({\n opacity: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.opacity) {\n $range.value = config.opacity;\n $value.innerText = config.opacity * 100;\n }\n });\n },\n };\n}\n\nexport function size(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-size',\n index: 11,\n html: `\n
\n ${i18n.get('Danmu size')}: 25px\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = value;\n\n art.plugins.artplayerPluginDanmuku.config({\n fontSize: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.fontSize) {\n $range.value = config.fontSize;\n $value.innerText = config.fontSize;\n }\n });\n },\n };\n}\n\nexport function speed(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-speed',\n index: 12,\n html: `\n
\n ${i18n.get('Danmu speed')}: 5s\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = value;\n\n art.plugins.artplayerPluginDanmuku.config({\n speed: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.speed) {\n $range.value = config.speed;\n $value.innerText = config.speed;\n }\n });\n },\n };\n}\n\nexport function synchronousPlayback(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n return {\n name: 'danmuku-synchronousPlayback',\n index: 13,\n html: `\n \n `,\n mounted: $setting => {\n const $checkbox = $setting.querySelector('input[type=checkbox]');\n proxy($checkbox, 'change', () => {\n art.plugins.artplayerPluginDanmuku.config({\n synchronousPlayback: $checkbox.checked,\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($checkbox.checked !== config.synchronousPlayback) {\n $checkbox.checked = config.synchronousPlayback;\n }\n });\n },\n };\n}\n","export function filter(queue, state, callback) {\n return queue.filter(danmu => danmu.$state === state).map(callback);\n}\n\nexport function getRect(ref, key) {\n const result = ref.getBoundingClientRect();\n return key ? result[key] : result;\n}\n\nexport function getDanmuRef(queue) {\n const result = queue.find(danmu => {\n return danmu.$ref && danmu.$state === 'wait';\n });\n\n if (result) {\n const { $ref } = result;\n result.$ref = null;\n return $ref;\n }\n\n const $ref = document.createElement('div');\n $ref.style.cssText = `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n font-weight: normal;\n line-height: 1.125;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n\n return $ref;\n}","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","export function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n case 5:\n return 1;\n default:\n return 0;\n }\n}\n\nexport function bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const srtList = xmlString.match(/[\\S ]*?)<\\/d>/gi);\n return srtList.length\n ? srtList.map(item => {\n const [, attrStr, text] = item.match(/(.+)<\\/d>/);\n const attr = attrStr.split(',');\n return attr.length === 8 && text.trim()\n ? {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n : null;\n })\n : [];\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n return fetch(url)\n .then(res => res.text())\n .then(xmlString => bilibiliDanmuParseFromXml(xmlString));\n}\n","import { getRect } from './utils';\n\nfunction calculatedTop(danmus) {\n let top = 0;\n const topMap = {};\n for (let index = 0; index < danmus.length; index += 1) {\n const item = danmus[index];\n if (topMap[item.top]) {\n topMap[item.top].push(item);\n } else {\n topMap[item.top] = [item];\n }\n }\n const topMapKeys = Object.keys(topMap);\n\n let maxDiff = 0;\n for (let index = 1; index < danmus.length; index += 1) {\n const item = danmus[index];\n const prev = danmus[index - 1];\n const prevTop = prev.top + prev.height;\n const diff = item.top - prevTop;\n if (diff > maxDiff) {\n top = prevTop;\n maxDiff = diff;\n }\n }\n\n if (top === 0) {\n let maxRight = 0;\n for (let index = 0; index < topMapKeys.length; index += 1) {\n let minRight = danmus[0].width;\n const topKey = topMapKeys[index];\n const danmuArr = topMap[topKey];\n for (let index = 0; index < danmuArr.length; index += 1) {\n const danmu = danmuArr[index];\n if (danmu.right < minRight) {\n minRight = danmu.right;\n }\n }\n\n if (minRight > maxRight) {\n maxRight = minRight;\n [{ top }] = danmuArr;\n }\n }\n }\n\n if (top === 0) {\n [top] = topMapKeys\n .filter((item, index) => {\n return index !== 0 && index !== topMapKeys.length - 1;\n })\n .sort((prev, next) => {\n return topMap[prev].length - topMap[next].length;\n });\n }\n\n return top;\n}\n\nexport default function getDanmuTop(ins, danmu) {\n const [marginTop, marginBottom] = ins.option.margin;\n const playerData = getRect(ins.art.template.$player);\n const danmus = ins.queue\n .filter(\n item =>\n item.mode === danmu.mode &&\n item.$state === 'emit' &&\n item.$ref &&\n item.$ref.style.fontSize === danmu.$ref.style.fontSize &&\n parseFloat(item.$ref.style.top) <= playerData.height - marginBottom,\n )\n .map(item => {\n const danmuData = getRect(item.$ref);\n const { width, height } = danmuData;\n const top = danmuData.top - playerData.top;\n const left = danmuData.left - playerData.left;\n const right = playerData.width - left - width;\n return { top, left, height, width, right };\n })\n .sort((prev, next) => prev.top - next.top);\n\n if (danmus.length === 0) {\n return marginTop;\n }\n\n danmus.unshift({\n top: 0,\n left: 0,\n right: 0,\n height: marginTop,\n width: playerData.width,\n });\n\n danmus.push({\n top: playerData.height - marginBottom,\n left: 0,\n right: 0,\n height: marginBottom,\n width: playerData.width,\n });\n\n return calculatedTop(danmus);\n}\n","import i18n from './i18n';\nimport { opacity, size, speed, synchronousPlayback } from './setting';\nimport { filter, getRect, getDanmuRef } from './utils';\nimport { bilibiliDanmuParseFromUrl } from './bilibili';\nimport getDanmuTop from './getDanmuTop';\n\nexport default class Danmuku {\n constructor(art, option) {\n art.i18n.update(i18n);\n art.setting.add(opacity);\n art.setting.add(size);\n art.setting.add(speed);\n art.setting.add(synchronousPlayback);\n this.art = art;\n this.queue = [];\n this.option = {};\n this.config(option);\n this.isStop = false;\n this.isHide = false;\n this.animationFrameTimer = null;\n this.$danmuku = art.template.$danmuku;\n art.on('video:play', this.start.bind(this));\n art.on('video:playing', this.start.bind(this));\n art.on('video:pause', this.stop.bind(this));\n art.on('video:waiting', this.stop.bind(this));\n art.on('resize', this.resize.bind(this));\n art.on('destroy', this.stop.bind(this));\n if (typeof this.option.danmuku === 'function') {\n this.option.danmuku().then(danmus => {\n danmus.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n });\n } else if (typeof this.option.danmuku === 'string') {\n bilibiliDanmuParseFromUrl(this.option.danmuku).then(danmus => {\n danmus.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n });\n } else {\n this.option.danmuku.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n }\n }\n\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n maxlength: 50,\n margin: [10, 100],\n opacity: 1,\n fontSize: 25,\n synchronousPlayback: false,\n };\n }\n\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n maxlength: 'number',\n margin: 'array',\n opacity: 'number',\n fontSize: 'number',\n synchronousPlayback: 'boolean',\n };\n }\n\n config(option) {\n const {\n utils: { clamp },\n validator,\n } = this.art.constructor;\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n validator(this.option, Danmuku.scheme);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.maxlength = clamp(this.option.maxlength, 10, 100);\n this.option.margin[0] = clamp(this.option.margin[0], 0, 100);\n this.option.margin[1] = clamp(this.option.margin[1], 0, 100);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.fontSize = clamp(this.option.fontSize, 12, 30);\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n }\n\n continue() {\n filter(this.queue, 'stop', danmu => {\n danmu.$state = 'emit';\n danmu.$lastStartTime = Date.now();\n switch (danmu.mode) {\n case 0:\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n default:\n break;\n }\n });\n }\n\n suspend() {\n const { $player } = this.art.template;\n filter(this.queue, 'emit', danmu => {\n danmu.$state = 'stop';\n switch (danmu.mode) {\n case 0: {\n const { left: playerLeft, width: playerWidth } = getRect($player);\n const { left: danmuLeft } = getRect(danmu.$ref);\n const translateX = playerWidth - (danmuLeft - playerLeft) + 5;\n danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n }\n\n resize() {\n const { $player } = this.art.template;\n const danmuLeft = getRect($player, 'width');\n filter(this.queue, 'wait', danmu => {\n if (danmu.$ref) {\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n }\n });\n }\n\n update() {\n const {\n player,\n template: { $player },\n } = this.art;\n this.animationFrameTimer = window.requestAnimationFrame(() => {\n if (player.playing && !this.isHide) {\n const danmuLeft = getRect($player, 'width');\n\n filter(this.queue, 'emit', danmu => {\n danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$lastStartTime = Date.now();\n if (danmu.$restTime <= 0) {\n danmu.$state = 'wait';\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n }\n });\n\n this.queue\n .filter(\n danmu =>\n player.currentTime + 0.1 >= danmu.time &&\n danmu.time >= player.currentTime - 0.1 &&\n danmu.$state === 'wait',\n )\n .forEach(danmu => {\n danmu.$ref = getDanmuRef(this.queue);\n this.$danmuku.appendChild(danmu.$ref);\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.option.fontSize}px`;\n danmu.$ref.innerText = danmu.text;\n danmu.$ref.style.color = danmu.color;\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : 'none';\n danmu.$restTime =\n this.option.synchronousPlayback && player.playbackRate\n ? this.option.speed / Number(player.playbackRate)\n : this.option.speed;\n danmu.$lastStartTime = Date.now();\n const danmuWidth = getRect(danmu.$ref, 'width');\n const danmuTop = getDanmuTop(this, danmu);\n danmu.$state = 'emit';\n switch (danmu.mode) {\n case 0: {\n danmu.$restWidth = danmuLeft + danmuWidth + 5;\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.top = `${danmuTop}px`;\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n case 1:\n danmu.$ref.style.top = `${danmuTop}px`;\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmuWidth / 2}px`;\n break;\n default:\n break;\n }\n });\n }\n\n if (!this.isStop) {\n this.update();\n }\n });\n }\n\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.animationFrameTimer);\n this.art.emit('artplayerPluginDanmuku:stop');\n }\n\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n }\n\n show() {\n this.isHide = false;\n this.$danmuku.style.display = 'block';\n this.art.emit('artplayerPluginDanmuku:show');\n }\n\n hide() {\n this.isHide = true;\n this.$danmuku.style.display = 'none';\n this.art.emit('artplayerPluginDanmuku:hide');\n }\n\n emit(danmu) {\n const { notice, player, i18n } = this.art;\n if (!danmu.text.trim()) {\n notice.show = i18n.get('Danmu text cannot be empty');\n return;\n }\n\n if (danmu.text.length > this.option.maxlength) {\n notice.show = `${i18n.get('The length of the danmu does not exceed')} ${this.option.maxlength}`;\n return;\n }\n\n if (typeof danmu.time !== 'number') {\n danmu.time = player.currentTime;\n }\n\n this.queue.push({\n mode: 0,\n ...danmu,\n $state: 'wait',\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0,\n $restWidth: 0,\n });\n }\n}\n","import Danmuku from './danmuku';\n\nexport default function artplayerPluginDanmuku(option) {\n return art => {\n const danmuku = new Danmuku(art, option);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n };\n };\n}"],"names":["opacity","art","i18n","proxy","events","name","index","html","get","mounted","$setting","$range","querySelector","$value","value","innerText","Number","plugins","artplayerPluginDanmuku","config","on","size","fontSize","speed","synchronousPlayback","$checkbox","checked","filter","queue","state","callback","danmu","$state","map","getRect","ref","key","result","getBoundingClientRect","getDanmuRef","find","$ref","document","createElement","style","cssText","getMode","bilibiliDanmuParseFromXml","xmlString","srtList","match","length","item","attrStr","text","attr","split","trim","time","mode","color","toString","timestamp","pool","userID","rowID","bilibiliDanmuParseFromUrl","url","fetch","then","res","calculatedTop","danmus","top","topMap","push","topMapKeys","Object","keys","maxDiff","prev","prevTop","height","diff","maxRight","minRight","width","topKey","danmuArr","right","sort","next","getDanmuTop","ins","option","margin","marginTop","marginBottom","playerData","template","$player","parseFloat","danmuData","left","unshift","Danmuku","update","setting","add","isStop","isHide","animationFrameTimer","$danmuku","start","bind","stop","resize","danmuku","forEach","emit","constructor","clamp","utils","validator","assign","scheme","maxlength","$lastStartTime","Date","now","transform","$restWidth","transition","$restTime","playerLeft","playerWidth","danmuLeft","translateX","border","marginLeft","player","window","requestAnimationFrame","playing","currentTime","appendChild","playbackRate","danmuWidth","danmuTop","suspend","cancelAnimationFrame","continue","display","notice","show","hide"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"artplayer-plugin-danmuku.js","sources":["../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../packages/artplayer-plugin-danmuku/src/i18n.js","../../packages/artplayer-plugin-danmuku/src/setting.js","../../packages/artplayer-plugin-danmuku/src/utils.js","../../node_modules/@babel/runtime/helpers/arrayWithHoles.js","../../node_modules/@babel/runtime/helpers/iterableToArrayLimit.js","../../node_modules/@babel/runtime/helpers/nonIterableRest.js","../../node_modules/@babel/runtime/helpers/slicedToArray.js","../../packages/artplayer-plugin-danmuku/src/bilibili.js","../../packages/artplayer-plugin-danmuku/src/getDanmuTop.js","../../packages/artplayer-plugin-danmuku/src/danmuku.js","../../packages/artplayer-plugin-danmuku/src/index.js"],"sourcesContent":["function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}\n\nmodule.exports = _defineProperty;","function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}\n\nmodule.exports = _classCallCheck;","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nfunction _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}\n\nmodule.exports = _createClass;","export default {\n 'zh-cn': {\n 'Danmu opacity': '弹幕透明度',\n 'Danmu speed': '弹幕速度',\n 'Danmu size': '弹幕大小',\n 'Danmu text cannot be empty': '弹幕文本不能为空',\n 'The length of the danmu does not exceed': '弹幕文本字数不能超过',\n 'Danmu speed synchronous playback multiple': '弹幕速度同步播放倍数',\n },\n 'zh-tw': {\n 'Danmu opacity': '彈幕透明度',\n 'Danmu speed': '彈幕速度',\n 'Danmu size': '弹幕大小',\n 'Danmu text cannot be empty': '彈幕文本不能為空',\n 'The length of the danmu does not exceed': '彈幕文本字數不能超過',\n 'Danmu speed synchronous playback multiple': '彈幕速度同步播放倍數',\n },\n};","export function opacity(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-opacity',\n index: 10,\n html: `\n
\n ${i18n.get('Danmu opacity')}: 100%\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = Number(value) * 100;\n\n art.plugins.artplayerPluginDanmuku.config({\n opacity: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.opacity) {\n $range.value = config.opacity;\n $value.innerText = config.opacity * 100;\n }\n });\n },\n };\n}\n\nexport function size(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-size',\n index: 11,\n html: `\n
\n ${i18n.get('Danmu size')}: 25px\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = value;\n\n art.plugins.artplayerPluginDanmuku.config({\n fontSize: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.fontSize) {\n $range.value = config.fontSize;\n $value.innerText = config.fontSize;\n }\n });\n },\n };\n}\n\nexport function speed(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n\n return {\n name: 'danmuku-speed',\n index: 12,\n html: `\n
\n ${i18n.get('Danmu speed')}: 5s\n
\n
\n \n
\n `,\n mounted: $setting => {\n const $range = $setting.querySelector('input[type=range]');\n const $value = $setting.querySelector('.art-value');\n proxy($range, 'change', () => {\n const { value } = $range;\n $value.innerText = value;\n\n art.plugins.artplayerPluginDanmuku.config({\n speed: Number(value),\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($range.value !== config.speed) {\n $range.value = config.speed;\n $value.innerText = config.speed;\n }\n });\n },\n };\n}\n\nexport function synchronousPlayback(art) {\n const {\n i18n,\n events: { proxy },\n } = art;\n return {\n name: 'danmuku-synchronousPlayback',\n index: 13,\n html: `\n \n `,\n mounted: $setting => {\n const $checkbox = $setting.querySelector('input[type=checkbox]');\n proxy($checkbox, 'change', () => {\n art.plugins.artplayerPluginDanmuku.config({\n synchronousPlayback: $checkbox.checked,\n });\n });\n\n art.on('artplayerPluginDanmuku:config', config => {\n if ($checkbox.checked !== config.synchronousPlayback) {\n $checkbox.checked = config.synchronousPlayback;\n }\n });\n },\n };\n}\n","export function filter(queue, state, callback) {\n return queue.filter(danmu => danmu.$state === state).map(callback);\n}\n\nexport function getRect(ref, key) {\n const result = ref.getBoundingClientRect();\n return key ? result[key] : result;\n}\n\nexport function getDanmuRef(queue) {\n const result = queue.find(danmu => {\n return danmu.$ref && danmu.$state === 'wait';\n });\n\n if (result) {\n const { $ref } = result;\n result.$ref = null;\n return $ref;\n }\n\n const $ref = document.createElement('div');\n $ref.style.cssText = `\n user-select: none;\n position: absolute;\n white-space: pre;\n pointer-events: none;\n perspective: 500px;\n display: inline-block;\n will-change: transform;\n font-family: SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif;\n font-weight: normal;\n line-height: 1.125;\n text-shadow: rgb(0, 0, 0) 1px 0px 1px, rgb(0, 0, 0) 0px 1px 1px, rgb(0, 0, 0) 0px -1px 1px, rgb(0, 0, 0) -1px 0px 1px;\n `;\n\n return $ref;\n}","function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}\n\nmodule.exports = _iterableToArrayLimit;","function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}\n\nmodule.exports = _nonIterableRest;","var arrayWithHoles = require(\"./arrayWithHoles\");\n\nvar iterableToArrayLimit = require(\"./iterableToArrayLimit\");\n\nvar nonIterableRest = require(\"./nonIterableRest\");\n\nfunction _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}\n\nmodule.exports = _slicedToArray;","export function getMode(key) {\n switch (key) {\n case 1:\n case 2:\n case 3:\n return 0;\n case 4:\n case 5:\n return 1;\n default:\n return 0;\n }\n}\n\nexport function bilibiliDanmuParseFromXml(xmlString) {\n if (typeof xmlString !== 'string') return [];\n const srtList = xmlString.match(/[\\S ]*?)<\\/d>/gi);\n return srtList.length\n ? srtList.map(item => {\n const [, attrStr, text] = item.match(/(.+)<\\/d>/);\n const attr = attrStr.split(',');\n return attr.length === 8 && text.trim()\n ? {\n text,\n time: Number(attr[0]),\n mode: getMode(Number(attr[1])),\n fontSize: Number(attr[2]),\n color: `#${Number(attr[3]).toString(16)}`,\n timestamp: Number(attr[4]),\n pool: Number(attr[5]),\n userID: attr[6],\n rowID: Number(attr[7]),\n }\n : null;\n })\n : [];\n}\n\nexport function bilibiliDanmuParseFromUrl(url) {\n return fetch(url)\n .then(res => res.text())\n .then(xmlString => bilibiliDanmuParseFromXml(xmlString));\n}\n","import { getRect } from './utils';\n\nfunction calculatedTop(danmus) {\n let top = 0;\n const topMap = {};\n for (let index = 0; index < danmus.length; index += 1) {\n const item = danmus[index];\n if (topMap[item.top]) {\n topMap[item.top].push(item);\n } else {\n topMap[item.top] = [item];\n }\n }\n const topMapKeys = Object.keys(topMap);\n\n let maxDiff = 0;\n for (let index = 1; index < danmus.length; index += 1) {\n const item = danmus[index];\n const prev = danmus[index - 1];\n const prevTop = prev.top + prev.height;\n const diff = item.top - prevTop;\n if (diff > maxDiff) {\n top = prevTop;\n maxDiff = diff;\n }\n }\n\n if (top === 0) {\n let maxRight = 0;\n for (let index = 0; index < topMapKeys.length; index += 1) {\n let minRight = danmus[0].width;\n const topKey = topMapKeys[index];\n const danmuArr = topMap[topKey];\n for (let index = 0; index < danmuArr.length; index += 1) {\n const danmu = danmuArr[index];\n if (danmu.right < minRight) {\n minRight = danmu.right;\n }\n }\n\n if (minRight > maxRight) {\n maxRight = minRight;\n [{ top }] = danmuArr;\n }\n }\n }\n\n if (top === 0) {\n [top] = topMapKeys\n .filter((item, index) => {\n return index !== 0 && index !== topMapKeys.length - 1;\n })\n .sort((prev, next) => {\n return topMap[prev].length - topMap[next].length;\n });\n }\n\n return top;\n}\n\nexport default function getDanmuTop(ins, danmu) {\n const [marginTop, marginBottom] = ins.option.margin;\n const playerData = getRect(ins.art.template.$player);\n const danmus = ins.queue\n .filter(\n item =>\n item.mode === danmu.mode &&\n item.$state === 'emit' &&\n item.$ref &&\n item.$ref.style.fontSize === danmu.$ref.style.fontSize &&\n parseFloat(item.$ref.style.top) <= playerData.height - marginBottom,\n )\n .map(item => {\n const danmuData = getRect(item.$ref);\n const { width, height } = danmuData;\n const top = danmuData.top - playerData.top;\n const left = danmuData.left - playerData.left;\n const right = playerData.width - left - width;\n return { top, left, height, width, right };\n })\n .sort((prev, next) => prev.top - next.top);\n\n if (danmus.length === 0) {\n return marginTop;\n }\n\n danmus.unshift({\n top: 0,\n left: 0,\n right: 0,\n height: marginTop,\n width: playerData.width,\n });\n\n danmus.push({\n top: playerData.height - marginBottom,\n left: 0,\n right: 0,\n height: marginBottom,\n width: playerData.width,\n });\n\n return calculatedTop(danmus);\n}\n","import i18n from './i18n';\nimport { opacity, size, speed, synchronousPlayback } from './setting';\nimport { filter, getRect, getDanmuRef } from './utils';\nimport { bilibiliDanmuParseFromUrl } from './bilibili';\nimport getDanmuTop from './getDanmuTop';\n\nexport default class Danmuku {\n constructor(art, option) {\n art.i18n.update(i18n);\n art.setting.add(opacity);\n art.setting.add(size);\n art.setting.add(speed);\n art.setting.add(synchronousPlayback);\n this.art = art;\n this.queue = [];\n this.option = {};\n this.config(option);\n this.isStop = false;\n this.isHide = false;\n this.animationFrameTimer = null;\n this.$danmuku = art.template.$danmuku;\n art.on('video:play', this.start.bind(this));\n art.on('video:playing', this.start.bind(this));\n art.on('video:pause', this.stop.bind(this));\n art.on('video:waiting', this.stop.bind(this));\n art.on('resize', this.resize.bind(this));\n art.on('destroy', this.stop.bind(this));\n if (typeof this.option.danmuku === 'function') {\n this.option.danmuku().then((danmus) => {\n danmus.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n });\n } else if (typeof this.option.danmuku === 'string') {\n bilibiliDanmuParseFromUrl(this.option.danmuku).then((danmus) => {\n danmus.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n });\n } else {\n this.option.danmuku.forEach(this.emit.bind(this));\n art.emit('artplayerPluginDanmuku:loaded');\n }\n }\n\n static get option() {\n return {\n danmuku: [],\n speed: 5,\n maxlength: 50,\n margin: [10, 100],\n opacity: 1,\n fontSize: 25,\n synchronousPlayback: false,\n };\n }\n\n static get scheme() {\n return {\n danmuku: 'array|function|string',\n speed: 'number',\n maxlength: 'number',\n margin: 'array',\n opacity: 'number',\n fontSize: 'number',\n synchronousPlayback: 'boolean',\n };\n }\n\n config(option) {\n const {\n utils: { clamp },\n validator,\n } = this.art.constructor;\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n validator(this.option, Danmuku.scheme);\n this.option.speed = clamp(this.option.speed, 1, 10);\n this.option.maxlength = clamp(this.option.maxlength, 10, 100);\n this.option.margin[0] = clamp(this.option.margin[0], 0, 100);\n this.option.margin[1] = clamp(this.option.margin[1], 0, 100);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.fontSize = clamp(this.option.fontSize, 12, 30);\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n }\n\n continue() {\n filter(this.queue, 'stop', (danmu) => {\n danmu.$state = 'emit';\n danmu.$lastStartTime = Date.now();\n switch (danmu.mode) {\n case 0:\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n default:\n break;\n }\n });\n }\n\n suspend() {\n const { $player } = this.art.template;\n filter(this.queue, 'emit', (danmu) => {\n danmu.$state = 'stop';\n switch (danmu.mode) {\n case 0: {\n const { left: playerLeft, width: playerWidth } = getRect($player);\n const { left: danmuLeft } = getRect(danmu.$ref);\n const translateX = playerWidth - (danmuLeft - playerLeft) + 5;\n danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n break;\n }\n default:\n break;\n }\n });\n }\n\n resize() {\n const { $player } = this.art.template;\n const danmuLeft = getRect($player, 'width');\n filter(this.queue, 'wait', (danmu) => {\n if (danmu.$ref) {\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n }\n });\n }\n\n update() {\n const {\n player,\n template: { $player },\n } = this.art;\n this.animationFrameTimer = window.requestAnimationFrame(() => {\n if (player.playing && !this.isHide) {\n const danmuLeft = getRect($player, 'width');\n\n filter(this.queue, 'emit', (danmu) => {\n danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$lastStartTime = Date.now();\n if (danmu.$restTime <= 0) {\n danmu.$state = 'wait';\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.marginLeft = '0px';\n danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n danmu.$ref.style.transition = 'transform 0s linear 0s';\n }\n });\n\n this.queue\n .filter(\n (danmu) =>\n player.currentTime + 0.1 >= danmu.time &&\n danmu.time >= player.currentTime - 0.1 &&\n danmu.$state === 'wait',\n )\n .forEach((danmu) => {\n danmu.$ref = getDanmuRef(this.queue);\n this.$danmuku.appendChild(danmu.$ref);\n danmu.$ref.style.opacity = this.option.opacity;\n danmu.$ref.style.fontSize = `${this.option.fontSize}px`;\n danmu.$ref.innerText = danmu.text;\n danmu.$ref.style.color = danmu.color || '#fff';\n danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color || '#fff'}` : 'none';\n danmu.$restTime =\n this.option.synchronousPlayback && player.playbackRate\n ? this.option.speed / Number(player.playbackRate)\n : this.option.speed;\n danmu.$lastStartTime = Date.now();\n const danmuWidth = getRect(danmu.$ref, 'width');\n const danmuTop = getDanmuTop(this, danmu);\n danmu.$state = 'emit';\n switch (danmu.mode) {\n case 0: {\n danmu.$restWidth = danmuLeft + danmuWidth + 5;\n danmu.$ref.style.left = `${danmuLeft}px`;\n danmu.$ref.style.top = `${danmuTop}px`;\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n case 1:\n danmu.$ref.style.top = `${danmuTop}px`;\n danmu.$ref.style.left = '50%';\n danmu.$ref.style.marginLeft = `-${danmuWidth / 2}px`;\n break;\n default:\n break;\n }\n });\n }\n\n if (!this.isStop) {\n this.update();\n }\n });\n }\n\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.animationFrameTimer);\n this.art.emit('artplayerPluginDanmuku:stop');\n }\n\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n }\n\n show() {\n this.isHide = false;\n this.$danmuku.style.display = 'block';\n this.art.emit('artplayerPluginDanmuku:show');\n }\n\n hide() {\n this.isHide = true;\n this.$danmuku.style.display = 'none';\n this.art.emit('artplayerPluginDanmuku:hide');\n }\n\n emit(danmu) {\n const { notice, player, i18n } = this.art;\n const {\n utils: { clamp },\n validator,\n } = this.art.constructor;\n\n validator(danmu, {\n text: 'string',\n mode: 'number|undefined',\n color: 'string|undefined',\n time: 'number|undefined',\n border: 'boolean|undefined',\n });\n\n if (!danmu.text.trim()) {\n notice.show = i18n.get('Danmu text cannot be empty');\n return;\n }\n\n if (danmu.text.length > this.option.maxlength) {\n notice.show = `${i18n.get('The length of the danmu does not exceed')} ${this.option.maxlength}`;\n return;\n }\n\n if (danmu.time) {\n danmu.time = clamp(danmu.time, 0, Infinity);\n } else {\n danmu.time = player.currentTime + 0.5;\n }\n\n this.queue.push({\n mode: 0,\n ...danmu,\n $state: 'wait',\n $ref: null,\n $restTime: 0,\n $lastStartTime: 0,\n $restWidth: 0,\n });\n }\n}\n","import Danmuku from './danmuku';\n\nexport default function artplayerPluginDanmuku(option) {\n return art => {\n const danmuku = new Danmuku(art, option);\n return {\n name: 'artplayerPluginDanmuku',\n emit: danmuku.emit.bind(danmuku),\n config: danmuku.config.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n };\n };\n}"],"names":["opacity","art","i18n","proxy","events","name","index","html","get","mounted","$setting","$range","querySelector","$value","value","innerText","Number","plugins","artplayerPluginDanmuku","config","on","size","fontSize","speed","synchronousPlayback","$checkbox","checked","filter","queue","state","callback","danmu","$state","map","getRect","ref","key","result","getBoundingClientRect","getDanmuRef","find","$ref","document","createElement","style","cssText","getMode","bilibiliDanmuParseFromXml","xmlString","srtList","match","length","item","attrStr","text","attr","split","trim","time","mode","color","toString","timestamp","pool","userID","rowID","bilibiliDanmuParseFromUrl","url","fetch","then","res","calculatedTop","danmus","top","topMap","push","topMapKeys","Object","keys","maxDiff","prev","prevTop","height","diff","maxRight","minRight","width","topKey","danmuArr","right","sort","next","getDanmuTop","ins","option","margin","marginTop","marginBottom","playerData","template","$player","parseFloat","danmuData","left","unshift","Danmuku","update","setting","add","isStop","isHide","animationFrameTimer","$danmuku","start","bind","stop","resize","danmuku","forEach","emit","constructor","clamp","utils","validator","assign","scheme","maxlength","$lastStartTime","Date","now","transform","$restWidth","transition","$restTime","playerLeft","playerWidth","danmuLeft","translateX","border","marginLeft","player","window","requestAnimationFrame","playing","currentTime","appendChild","playbackRate","danmuWidth","danmuTop","suspend","cancelAnimationFrame","continue","display","notice","show","Infinity","hide"],"mappings":"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"} \ No newline at end of file diff --git a/packages/artplayer-plugin-danmuku/src/danmuku.js b/packages/artplayer-plugin-danmuku/src/danmuku.js index b5f9bb10a..7535c4e0f 100644 --- a/packages/artplayer-plugin-danmuku/src/danmuku.js +++ b/packages/artplayer-plugin-danmuku/src/danmuku.js @@ -26,12 +26,12 @@ export default class Danmuku { art.on('resize', this.resize.bind(this)); art.on('destroy', this.stop.bind(this)); if (typeof this.option.danmuku === 'function') { - this.option.danmuku().then(danmus => { + this.option.danmuku().then((danmus) => { danmus.forEach(this.emit.bind(this)); art.emit('artplayerPluginDanmuku:loaded'); }); } else if (typeof this.option.danmuku === 'string') { - bilibiliDanmuParseFromUrl(this.option.danmuku).then(danmus => { + bilibiliDanmuParseFromUrl(this.option.danmuku).then((danmus) => { danmus.forEach(this.emit.bind(this)); art.emit('artplayerPluginDanmuku:loaded'); }); @@ -82,7 +82,7 @@ export default class Danmuku { } continue() { - filter(this.queue, 'stop', danmu => { + filter(this.queue, 'stop', (danmu) => { danmu.$state = 'emit'; danmu.$lastStartTime = Date.now(); switch (danmu.mode) { @@ -98,7 +98,7 @@ export default class Danmuku { suspend() { const { $player } = this.art.template; - filter(this.queue, 'emit', danmu => { + filter(this.queue, 'emit', (danmu) => { danmu.$state = 'stop'; switch (danmu.mode) { case 0: { @@ -118,7 +118,7 @@ export default class Danmuku { resize() { const { $player } = this.art.template; const danmuLeft = getRect($player, 'width'); - filter(this.queue, 'wait', danmu => { + filter(this.queue, 'wait', (danmu) => { if (danmu.$ref) { danmu.$ref.style.border = 'none'; danmu.$ref.style.left = `${danmuLeft}px`; @@ -138,7 +138,7 @@ export default class Danmuku { if (player.playing && !this.isHide) { const danmuLeft = getRect($player, 'width'); - filter(this.queue, 'emit', danmu => { + filter(this.queue, 'emit', (danmu) => { danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000; danmu.$lastStartTime = Date.now(); if (danmu.$restTime <= 0) { @@ -153,19 +153,19 @@ export default class Danmuku { this.queue .filter( - danmu => + (danmu) => player.currentTime + 0.1 >= danmu.time && danmu.time >= player.currentTime - 0.1 && danmu.$state === 'wait', ) - .forEach(danmu => { + .forEach((danmu) => { danmu.$ref = getDanmuRef(this.queue); this.$danmuku.appendChild(danmu.$ref); danmu.$ref.style.opacity = this.option.opacity; danmu.$ref.style.fontSize = `${this.option.fontSize}px`; danmu.$ref.innerText = danmu.text; - danmu.$ref.style.color = danmu.color; - danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color}` : 'none'; + danmu.$ref.style.color = danmu.color || '#fff'; + danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color || '#fff'}` : 'none'; danmu.$restTime = this.option.synchronousPlayback && player.playbackRate ? this.option.speed / Number(player.playbackRate) @@ -228,6 +228,19 @@ export default class Danmuku { emit(danmu) { const { notice, player, i18n } = this.art; + const { + utils: { clamp }, + validator, + } = this.art.constructor; + + validator(danmu, { + text: 'string', + mode: 'number|undefined', + color: 'string|undefined', + time: 'number|undefined', + border: 'boolean|undefined', + }); + if (!danmu.text.trim()) { notice.show = i18n.get('Danmu text cannot be empty'); return; @@ -238,8 +251,10 @@ export default class Danmuku { return; } - if (typeof danmu.time !== 'number') { - danmu.time = player.currentTime; + if (danmu.time) { + danmu.time = clamp(danmu.time, 0, Infinity); + } else { + danmu.time = player.currentTime + 0.5; } this.queue.push({ diff --git a/packages/artplayer/src/index.js b/packages/artplayer/src/index.js index ad563cefa..d88fb45a1 100644 --- a/packages/artplayer/src/index.js +++ b/packages/artplayer/src/index.js @@ -25,6 +25,7 @@ import Plugins from './plugins'; import Mobile from './mobile'; let id = 0; +const instances = []; class Artplayer extends Emitter { constructor(option) { super(); @@ -56,7 +57,11 @@ class Artplayer extends Emitter { id += 1; this.id = id; - Artplayer.instances.push(this); + instances.push(this); + } + + static get instances() { + return instances; } static get version() { @@ -158,10 +163,6 @@ class Artplayer extends Emitter { } } -utils.def(Artplayer, 'instances', { - value: [], -}); - // eslint-disable-next-line no-console console.log( '%c ArtPlayer %c __VERSION__ %c https://artplayer.org',