diff --git a/docs/uncompiled/artplayer-plugin-danmuku/index.js b/docs/uncompiled/artplayer-plugin-danmuku/index.js index f89f6f97e..2b57ac2d7 100644 --- a/docs/uncompiled/artplayer-plugin-danmuku/index.js +++ b/docs/uncompiled/artplayer-plugin-danmuku/index.js @@ -315,15 +315,21 @@ class Danmuku { return this; } continue() { + const { $player } = this.art.template; + const playerWidth = this.getRect($player, 'width'); this.filter('stop', (danmu)=>{ danmu.$state = 'emit'; danmu.$ref.dataset.state = 'emit'; danmu.$lastStartTime = Date.now(); switch(danmu.mode){ case 0: - danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; - danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; - break; + { + const danmuWidth = this.getRect(danmu.$ref, 'width'); + const translateX = playerWidth + danmuWidth; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; + break; + } default: break; } @@ -353,31 +359,60 @@ class Danmuku { } resize() { const { $player } = this.art.template; - const danmuLeft = this.getRect($player, 'width'); + const { left: playerLeft , width: playerWidth } = this.getRect($player); this.filter('wait', (danmu)=>{ if (danmu.$ref) { danmu.$ref.style.border = 'none'; - danmu.$ref.style.left = `${danmuLeft}px`; + danmu.$ref.style.left = `${playerWidth}px`; danmu.$ref.style.marginLeft = '0px'; danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)'; danmu.$ref.style.transition = 'transform 0s linear 0s'; } }); + // this.filter('emit', (danmu) => { + // switch (danmu.mode) { + // case 0: { + // const { left: playerLeft, width: playerWidth } = this.getRect($player); + // const { left: danmuLeft } = this.getRect(danmu.$ref); + // const translateX = playerWidth - (danmuLeft - playerLeft); + // danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + // break; + // } + // default: + // break; + // } + // }); + this.filter('stop', (danmu)=>{ + switch(danmu.mode){ + case 0: + { + const { left: danmuLeft } = this.getRect(danmu.$ref); + const translateX = playerWidth - (danmuLeft - playerLeft); + danmu.$ref.style.left = `${playerWidth}px`; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + break; + } + default: + break; + } + }); return this; } update() { const { $player } = this.art.template; this.animationFrameTimer = window.requestAnimationFrame(()=>{ if (this.art.playing && !this.isHide) { - const danmuLeft = this.getRect($player, 'width'); + const playerWidth = this.getRect($player, 'width'); this.filter('emit', (danmu)=>{ - danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000; + const time = (Date.now() - danmu.$lastStartTime) / 1000; + danmu.$emitTime += time; + danmu.$restTime -= time; danmu.$lastStartTime = Date.now(); if (danmu.$restTime <= 0) { danmu.$state = 'wait'; danmu.$ref.dataset.state = 'wait'; danmu.$ref.style.border = 'none'; - danmu.$ref.style.left = `${danmuLeft}px`; + danmu.$ref.style.left = `${playerWidth}px`; danmu.$ref.style.marginLeft = '0px'; danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)'; danmu.$ref.style.transition = 'transform 0s linear 0s'; @@ -394,19 +429,21 @@ class Danmuku { danmu.$ref.style.color = danmu.color || '#fff'; danmu.$ref.style.border = danmu.border ? `1px solid ${danmu.color || '#fff'}` : 'none'; danmu.$restTime = this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed; - danmu.$lastStartTime = Date.now(); const danmuWidth = this.getRect(danmu.$ref, 'width'); const danmuTop = _getDanmuTopDefault.default(this, danmu); danmu.$state = 'emit'; danmu.$ref.dataset.state = 'emit'; + danmu.$lastStartTime = Date.now(); switch(danmu.mode){ case 0: - danmu.$restWidth = danmuLeft + danmuWidth; - danmu.$ref.style.left = `${danmuLeft}px`; - danmu.$ref.style.top = `${danmuTop}px`; - danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; - danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; - break; + { + danmu.$ref.style.left = `${playerWidth}px`; + danmu.$ref.style.top = `${danmuTop}px`; + const translateX = playerWidth + danmuWidth; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; + break; + } case 1: danmu.$ref.style.top = `${danmuTop}px`; danmu.$ref.style.left = '50%'; @@ -464,9 +501,9 @@ class Danmuku { ...danmu, $state: 'wait', $ref: null, + $emitTime: 0, $restTime: 0, - $lastStartTime: 0, - $restWidth: 0 + $lastStartTime: 0 }); return this; } diff --git a/docs/uncompiled/artplayer-plugin-danmuku/index.js.map b/docs/uncompiled/artplayer-plugin-danmuku/index.js.map index f0ddc04c3..d4a7d8f0a 100644 --- a/docs/uncompiled/artplayer-plugin-danmuku/index.js.map +++ b/docs/uncompiled/artplayer-plugin-danmuku/index.js.map @@ -1 +1 @@ -{"mappings":"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","sources":["packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","packages/artplayer-plugin-danmuku/src/i18n.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/bilibili.js","packages/artplayer-plugin-danmuku/src/getDanmuTop.js"],"sourcesContent":["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 get isHide() {\n return danmuku.isHide;\n },\n };\n };\n}\n\nwindow['artplayerPluginDanmuku'] = artplayerPluginDanmuku;\n","import i18n from './i18n';\nimport { bilibiliDanmuParseFromUrl } from './bilibili';\nimport getDanmuTop from './getDanmuTop';\n\nexport default class Danmuku {\n constructor(art, option) {\n art.i18n.update(i18n);\n this.art = art;\n this.utils = art.constructor.utils;\n this.validator = art.constructor.validator;\n\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\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\n this.load();\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 get isRotate() {\n return this.art.plugins.autoOrientation && this.art.plugins.autoOrientation.state;\n }\n\n filter(state, callback) {\n return this.queue.filter((danmu) => danmu.$state === state).map(callback);\n }\n\n getRect(ref, key) {\n const rect = ref.getBoundingClientRect();\n\n const bottom = rect.bottom;\n const height = rect.height;\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const width = rect.width;\n const x = rect.x;\n const y = rect.y;\n\n const result = {\n bottom,\n height,\n left,\n right,\n top,\n width,\n x,\n y,\n };\n\n if (this.isRotate) {\n result.bottom = left;\n result.left = top;\n result.top = right;\n result.right = bottom;\n result.height = width;\n result.width = height;\n result.x = y;\n result.y = x;\n }\n\n return key ? result[key] : result;\n }\n\n getDanmuRef() {\n const result = this.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 }\n\n async load() {\n this.queue = [];\n this.$danmuku.innerText = '';\n let danmus = [];\n\n try {\n if (typeof this.option.danmuku === 'function') {\n danmus = await this.option.danmuku();\n } else if (typeof this.option.danmuku.then === 'function') {\n danmus = await this.option.danmuku;\n } else if (typeof this.option.danmuku === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(this.option.danmuku);\n } else {\n danmus = this.option.danmuku;\n }\n\n this.utils.errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n this.art.emit('artplayerPluginDanmuku:loaded', danmus);\n danmus.forEach(this.emit.bind(this));\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n\n return this;\n }\n\n config(option) {\n const { clamp } = this.utils;\n\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n\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, 200);\n this.option.margin[1] = clamp(this.option.margin[1], 0, 200);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.fontSize = clamp(this.option.fontSize, 12, 100);\n\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n\n return this;\n }\n\n continue() {\n this.filter('stop', (danmu) => {\n danmu.$state = 'emit';\n danmu.$ref.dataset.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 return this;\n }\n\n suspend() {\n const { $player } = this.art.template;\n this.filter('emit', (danmu) => {\n danmu.$state = 'stop';\n danmu.$ref.dataset.state = 'stop';\n switch (danmu.mode) {\n case 0: {\n const { left: playerLeft, width: playerWidth } = this.getRect($player);\n const { left: danmuLeft } = this.getRect(danmu.$ref);\n const translateX = playerWidth - (danmuLeft - playerLeft);\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 return this;\n }\n\n resize() {\n const { $player } = this.art.template;\n const danmuLeft = this.getRect($player, 'width');\n this.filter('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 return this;\n }\n\n update() {\n const { $player } = this.art.template;\n this.animationFrameTimer = window.requestAnimationFrame(() => {\n if (this.art.playing && !this.isHide) {\n const danmuLeft = this.getRect($player, 'width');\n\n this.filter('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.dataset.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 this.art.currentTime + 0.1 >= danmu.time &&\n danmu.time >= this.art.currentTime - 0.1 &&\n danmu.$state === 'wait',\n )\n .forEach((danmu) => {\n danmu.$ref = this.getDanmuRef(this.queue);\n danmu.$ref.__danmu__ = danmu;\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 && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed;\n danmu.$lastStartTime = Date.now();\n const danmuWidth = this.getRect(danmu.$ref, 'width');\n const danmuTop = getDanmuTop(this, danmu);\n danmu.$state = 'emit';\n danmu.$ref.dataset.state = 'emit';\n switch (danmu.mode) {\n case 0: {\n danmu.$restWidth = danmuLeft + danmuWidth;\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 return this;\n }\n\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.animationFrameTimer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n\n show() {\n this.isHide = false;\n this.$danmuku.style.display = 'block';\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n\n hide() {\n this.isHide = true;\n this.$danmuku.style.display = 'none';\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n\n emit(danmu) {\n this.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()) return this;\n if (danmu.text.length > this.option.maxlength) return this;\n\n if (danmu.time) {\n danmu.time = this.utils.clamp(danmu.time, 0, Infinity);\n } else {\n danmu.time = this.art.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 return this;\n }\n}\n","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};","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","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 && 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","function 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 = ins.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 = ins.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"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ No newline at end of file +{"mappings":"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","sources":["packages/artplayer-plugin-danmuku/src/index.js","packages/artplayer-plugin-danmuku/src/danmuku.js","packages/artplayer-plugin-danmuku/src/i18n.js","node_modules/@parcel/transformer-js/src/esmodule-helpers.js","packages/artplayer-plugin-danmuku/src/bilibili.js","packages/artplayer-plugin-danmuku/src/getDanmuTop.js"],"sourcesContent":["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 get isHide() {\n return danmuku.isHide;\n },\n };\n };\n}\n\nwindow['artplayerPluginDanmuku'] = artplayerPluginDanmuku;\n","import i18n from './i18n';\nimport { bilibiliDanmuParseFromUrl } from './bilibili';\nimport getDanmuTop from './getDanmuTop';\n\nexport default class Danmuku {\n constructor(art, option) {\n art.i18n.update(i18n);\n this.art = art;\n this.utils = art.constructor.utils;\n this.validator = art.constructor.validator;\n\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\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\n this.load();\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 get isRotate() {\n return this.art.plugins.autoOrientation && this.art.plugins.autoOrientation.state;\n }\n\n filter(state, callback) {\n return this.queue.filter((danmu) => danmu.$state === state).map(callback);\n }\n\n getRect(ref, key) {\n const rect = ref.getBoundingClientRect();\n\n const bottom = rect.bottom;\n const height = rect.height;\n const left = rect.left;\n const right = rect.right;\n const top = rect.top;\n const width = rect.width;\n const x = rect.x;\n const y = rect.y;\n\n const result = {\n bottom,\n height,\n left,\n right,\n top,\n width,\n x,\n y,\n };\n\n if (this.isRotate) {\n result.bottom = left;\n result.left = top;\n result.top = right;\n result.right = bottom;\n result.height = width;\n result.width = height;\n result.x = y;\n result.y = x;\n }\n\n return key ? result[key] : result;\n }\n\n getDanmuRef() {\n const result = this.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 }\n\n async load() {\n this.queue = [];\n this.$danmuku.innerText = '';\n let danmus = [];\n\n try {\n if (typeof this.option.danmuku === 'function') {\n danmus = await this.option.danmuku();\n } else if (typeof this.option.danmuku.then === 'function') {\n danmus = await this.option.danmuku;\n } else if (typeof this.option.danmuku === 'string') {\n danmus = await bilibiliDanmuParseFromUrl(this.option.danmuku);\n } else {\n danmus = this.option.danmuku;\n }\n\n this.utils.errorHandle(Array.isArray(danmus), 'Danmuku need return an array as result');\n this.art.emit('artplayerPluginDanmuku:loaded', danmus);\n danmus.forEach(this.emit.bind(this));\n } catch (error) {\n this.art.emit('artplayerPluginDanmuku:error', error);\n throw error;\n }\n\n return this;\n }\n\n config(option) {\n const { clamp } = this.utils;\n\n this.option = Object.assign({}, Danmuku.option, this.option, option);\n this.validator(this.option, Danmuku.scheme);\n\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, 200);\n this.option.margin[1] = clamp(this.option.margin[1], 0, 200);\n this.option.opacity = clamp(this.option.opacity, 0, 1);\n this.option.fontSize = clamp(this.option.fontSize, 12, 100);\n\n this.art.emit('artplayerPluginDanmuku:config', this.option);\n\n return this;\n }\n\n continue() {\n const { $player } = this.art.template;\n const playerWidth = this.getRect($player, 'width');\n\n this.filter('stop', (danmu) => {\n danmu.$state = 'emit';\n danmu.$ref.dataset.state = 'emit';\n danmu.$lastStartTime = Date.now();\n switch (danmu.mode) {\n case 0: {\n const danmuWidth = this.getRect(danmu.$ref, 'width');\n const translateX = playerWidth + danmuWidth;\n danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`;\n break;\n }\n default:\n break;\n }\n });\n\n return this;\n }\n\n suspend() {\n const { $player } = this.art.template;\n\n this.filter('emit', (danmu) => {\n danmu.$state = 'stop';\n danmu.$ref.dataset.state = 'stop';\n switch (danmu.mode) {\n case 0: {\n const { left: playerLeft, width: playerWidth } = this.getRect($player);\n const { left: danmuLeft } = this.getRect(danmu.$ref);\n const translateX = playerWidth - (danmuLeft - playerLeft);\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 return this;\n }\n\n resize() {\n const { $player } = this.art.template;\n const { left: playerLeft, width: playerWidth } = this.getRect($player);\n\n this.filter('wait', (danmu) => {\n if (danmu.$ref) {\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${playerWidth}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.filter('emit', (danmu) => {\n // switch (danmu.mode) {\n // case 0: {\n // const { left: playerLeft, width: playerWidth } = this.getRect($player);\n // const { left: danmuLeft } = this.getRect(danmu.$ref);\n // const translateX = playerWidth - (danmuLeft - playerLeft);\n // danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n // break;\n // }\n // default:\n // break;\n // }\n // });\n\n this.filter('stop', (danmu) => {\n switch (danmu.mode) {\n case 0: {\n const { left: danmuLeft } = this.getRect(danmu.$ref);\n const translateX = playerWidth - (danmuLeft - playerLeft);\n danmu.$ref.style.left = `${playerWidth}px`;\n danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n break;\n }\n default:\n break;\n }\n });\n\n return this;\n }\n\n update() {\n const { $player } = this.art.template;\n this.animationFrameTimer = window.requestAnimationFrame(() => {\n if (this.art.playing && !this.isHide) {\n const playerWidth = this.getRect($player, 'width');\n\n this.filter('emit', (danmu) => {\n const time = (Date.now() - danmu.$lastStartTime) / 1000;\n danmu.$emitTime += time;\n danmu.$restTime -= time;\n danmu.$lastStartTime = Date.now();\n if (danmu.$restTime <= 0) {\n danmu.$state = 'wait';\n danmu.$ref.dataset.state = 'wait';\n danmu.$ref.style.border = 'none';\n danmu.$ref.style.left = `${playerWidth}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 this.art.currentTime + 0.1 >= danmu.time &&\n danmu.time >= this.art.currentTime - 0.1 &&\n danmu.$state === 'wait',\n )\n .forEach((danmu) => {\n danmu.$ref = this.getDanmuRef(this.queue);\n danmu.$ref.__danmu__ = danmu;\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 && this.art.playbackRate\n ? this.option.speed / Number(this.art.playbackRate)\n : this.option.speed;\n const danmuWidth = this.getRect(danmu.$ref, 'width');\n const danmuTop = getDanmuTop(this, danmu);\n danmu.$state = 'emit';\n danmu.$ref.dataset.state = 'emit';\n danmu.$lastStartTime = Date.now();\n switch (danmu.mode) {\n case 0: {\n danmu.$ref.style.left = `${playerWidth}px`;\n danmu.$ref.style.top = `${danmuTop}px`;\n const translateX = playerWidth + danmuWidth;\n danmu.$ref.style.transform = `translateX(${-translateX}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 return this;\n }\n\n stop() {\n this.isStop = true;\n this.suspend();\n window.cancelAnimationFrame(this.animationFrameTimer);\n this.art.emit('artplayerPluginDanmuku:stop');\n return this;\n }\n\n start() {\n this.isStop = false;\n this.continue();\n this.update();\n this.art.emit('artplayerPluginDanmuku:start');\n return this;\n }\n\n show() {\n this.isHide = false;\n this.$danmuku.style.display = 'block';\n this.art.emit('artplayerPluginDanmuku:show');\n return this;\n }\n\n hide() {\n this.isHide = true;\n this.$danmuku.style.display = 'none';\n this.art.emit('artplayerPluginDanmuku:hide');\n return this;\n }\n\n emit(danmu) {\n this.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()) return this;\n if (danmu.text.length > this.option.maxlength) return this;\n\n if (danmu.time) {\n danmu.time = this.utils.clamp(danmu.time, 0, Infinity);\n } else {\n danmu.time = this.art.currentTime + 0.5;\n }\n\n this.queue.push({\n mode: 0,\n ...danmu,\n $state: 'wait',\n $ref: null,\n $emitTime: 0,\n $restTime: 0,\n $lastStartTime: 0,\n });\n\n return this;\n }\n}\n","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};","exports.interopDefault = function (a) {\n return a && a.__esModule ? a : {default: a};\n};\n\nexports.defineInteropFlag = function (a) {\n Object.defineProperty(a, '__esModule', {value: true});\n};\n\nexports.exportAll = function (source, dest) {\n Object.keys(source).forEach(function (key) {\n if (key === 'default' || key === '__esModule' || dest.hasOwnProperty(key)) {\n return;\n }\n\n Object.defineProperty(dest, key, {\n enumerable: true,\n get: function () {\n return source[key];\n },\n });\n });\n\n return dest;\n};\n\nexports.export = function (dest, destName, get) {\n Object.defineProperty(dest, destName, {\n enumerable: true,\n get: get,\n });\n};\n","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 && 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","function 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 = ins.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 = ins.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"],"names":[],"version":3,"file":"index.js.map","sourceRoot":"../../../"} \ 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 2a76894f2..283fb7300 100644 --- a/packages/artplayer-plugin-danmuku/src/danmuku.js +++ b/packages/artplayer-plugin-danmuku/src/danmuku.js @@ -171,24 +171,32 @@ export default class Danmuku { } continue() { + const { $player } = this.art.template; + const playerWidth = this.getRect($player, 'width'); + this.filter('stop', (danmu) => { danmu.$state = 'emit'; danmu.$ref.dataset.state = 'emit'; danmu.$lastStartTime = Date.now(); switch (danmu.mode) { - case 0: - danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; + case 0: { + const danmuWidth = this.getRect(danmu.$ref, 'width'); + const translateX = playerWidth + danmuWidth; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; break; + } default: break; } }); + return this; } suspend() { const { $player } = this.art.template; + this.filter('emit', (danmu) => { danmu.$state = 'stop'; danmu.$ref.dataset.state = 'stop'; @@ -205,21 +213,52 @@ export default class Danmuku { break; } }); + return this; } resize() { const { $player } = this.art.template; - const danmuLeft = this.getRect($player, 'width'); + const { left: playerLeft, width: playerWidth } = this.getRect($player); + this.filter('wait', (danmu) => { if (danmu.$ref) { danmu.$ref.style.border = 'none'; - danmu.$ref.style.left = `${danmuLeft}px`; + danmu.$ref.style.left = `${playerWidth}px`; danmu.$ref.style.marginLeft = '0px'; danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)'; danmu.$ref.style.transition = 'transform 0s linear 0s'; } }); + + // this.filter('emit', (danmu) => { + // switch (danmu.mode) { + // case 0: { + // const { left: playerLeft, width: playerWidth } = this.getRect($player); + // const { left: danmuLeft } = this.getRect(danmu.$ref); + // const translateX = playerWidth - (danmuLeft - playerLeft); + // danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + // break; + // } + // default: + // break; + // } + // }); + + this.filter('stop', (danmu) => { + switch (danmu.mode) { + case 0: { + const { left: danmuLeft } = this.getRect(danmu.$ref); + const translateX = playerWidth - (danmuLeft - playerLeft); + danmu.$ref.style.left = `${playerWidth}px`; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + break; + } + default: + break; + } + }); + return this; } @@ -227,16 +266,18 @@ export default class Danmuku { const { $player } = this.art.template; this.animationFrameTimer = window.requestAnimationFrame(() => { if (this.art.playing && !this.isHide) { - const danmuLeft = this.getRect($player, 'width'); + const playerWidth = this.getRect($player, 'width'); this.filter('emit', (danmu) => { - danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000; + const time = (Date.now() - danmu.$lastStartTime) / 1000; + danmu.$emitTime += time; + danmu.$restTime -= time; danmu.$lastStartTime = Date.now(); if (danmu.$restTime <= 0) { danmu.$state = 'wait'; danmu.$ref.dataset.state = 'wait'; danmu.$ref.style.border = 'none'; - danmu.$ref.style.left = `${danmuLeft}px`; + danmu.$ref.style.left = `${playerWidth}px`; danmu.$ref.style.marginLeft = '0px'; danmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)'; danmu.$ref.style.transition = 'transform 0s linear 0s'; @@ -263,17 +304,17 @@ export default class Danmuku { this.option.synchronousPlayback && this.art.playbackRate ? this.option.speed / Number(this.art.playbackRate) : this.option.speed; - danmu.$lastStartTime = Date.now(); const danmuWidth = this.getRect(danmu.$ref, 'width'); const danmuTop = getDanmuTop(this, danmu); danmu.$state = 'emit'; danmu.$ref.dataset.state = 'emit'; + danmu.$lastStartTime = Date.now(); switch (danmu.mode) { case 0: { - danmu.$restWidth = danmuLeft + danmuWidth; - danmu.$ref.style.left = `${danmuLeft}px`; + danmu.$ref.style.left = `${playerWidth}px`; danmu.$ref.style.top = `${danmuTop}px`; - danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; + const translateX = playerWidth + danmuWidth; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; danmu.$ref.style.transition = `transform ${danmu.$restTime}s linear 0s`; break; } @@ -348,9 +389,9 @@ export default class Danmuku { ...danmu, $state: 'wait', $ref: null, + $emitTime: 0, $restTime: 0, $lastStartTime: 0, - $restWidth: 0, }); return this;