diff --git a/docs/assets/example/danmu.js b/docs/assets/example/danmu.js index 0811f3660..ccd442e38 100644 --- a/docs/assets/example/danmu.js +++ b/docs/assets/example/danmu.js @@ -11,5 +11,11 @@ var art = new Artplayer({ color: '#fff', size: 14, maxlength: 50, + margin: [10, 20], })], +}); + +console.info('弹幕加载中...'); +art.on('artplayerPluginDanmu:loaded', () => { + console.info('弹幕准备就绪'); }); \ No newline at end of file diff --git a/docs/uncompiled/artplayer-plugin-danmu.js b/docs/uncompiled/artplayer-plugin-danmu.js index eeb5c156a..218dc278f 100644 --- a/docs/uncompiled/artplayer-plugin-danmu.js +++ b/docs/uncompiled/artplayer-plugin-danmu.js @@ -168,22 +168,25 @@ this.queue = []; this.layer = null; this.isStop = false; - this.timer = null; + this.animationFrameTimer = null; this.option = Object.assign({}, Danmuku.option, option); art.constructor.validator(this.option, Danmuku.scheme); art.on('video:play', this.start.bind(this)); + art.on('video:playing', this.start.bind(this)); art.on('video:pause', this.stop.bind(this)); + art.on('video:waiting', this.stop.bind(this)); art.on('destroy', this.stop.bind(this)); if (typeof this.option.danmus === 'function') { this.option.danmus().then(function (danmus) { - art.emit('artplayerPluginDanmu:loaded', danmus); danmus.forEach(_this.addToQueue.bind(_this)); _this.init(); + + art.emit('artplayerPluginDanmu:loaded', danmus); }); } else { - this.option.danmus.forEach(this.addToQueue); + this.option.danmus.forEach(this.addToQueue.bind(this)); this.init(); } } @@ -202,49 +205,73 @@ width: '100%', height: '100%', overflow: 'hidden', - pointerEvents: 'none' + pointerEvents: 'none', + opacity: this.option.opacity } }); } }, { key: "emit", value: function emit(danmu) { - var errorHandle = this.art.constructor.utils.errorHandle; - errorHandle(this.layer, 'The danmuku is not ready'); - var _this$art$template$$p = this.art.template.$player, - playerWidth = _this$art$template$$p.clientWidth, - playerHeight = _this$art$template$$p.clientHeight; + var $player = this.art.template.$player; + danmu.$ref = this.getDanmuRef(); danmu.$ref.innerText = danmu.text; danmu.$ref.style.fontSize = "".concat(danmu.size || this.option.size, "px"); - var _danmu$$ref = danmu.$ref, - danmuWidth = _danmu$$ref.clientWidth, - danmuHeight = _danmu$$ref.clientHeight; - danmu.$ref.style.opacity = danmu.opacity || this.option.opacity; + var playerWidth = Danmuku.getRect($player, 'width'); + var danmuWidth = Danmuku.getRect(danmu.$ref, 'width'); + danmu.$restWidth = playerWidth + danmuWidth + 5; + danmu.$restTime = this.option.speed; + danmu.$lastStartTime = Date.now(); danmu.$ref.style.color = danmu.color || this.option.color; - danmu.$ref.style.top = this.getDanmuTop(playerHeight, danmuHeight); danmu.$ref.style.left = "".concat(playerWidth, "px"); - var translateX = -playerWidth - danmuWidth - 10; - danmu.$ref.style.transform = "translateX(".concat(translateX, "px) translateY(0px) translateZ(0px)"); + danmu.$ref.style.top = "".concat(this.getDanmuTop(), "px"); + danmu.$ref.style.transform = "translateX(".concat(-danmu.$restWidth, "px) translateY(0px) translateZ(0px)"); danmu.$ref.style.transition = "-webkit-transform ".concat(danmu.$restTime, "s linear 0s"); + danmu.$state = 'emit'; } }, { - key: "continue", - value: function _continue(danmu) { - danmu.$ref.style.transform = "translateX(".concat(translateX, "px) translateY(0px) translateZ(0px)"); - danmu.$ref.style.transition = "-webkit-transform ".concat(danmu.$restTime, "s linear 0s"); + key: "suspend", + value: function suspend(danmu) { + var $player = this.art.template.$player; + + var _Danmuku$getRect = Danmuku.getRect($player), + playerLeft = _Danmuku$getRect.left, + playerWidth = _Danmuku$getRect.width; + + var _Danmuku$getRect2 = Danmuku.getRect(danmu.$ref), + danmuLeft = _Danmuku$getRect2.left; + + danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000; + var translateX = playerWidth - (danmuLeft - playerLeft) + 5; + danmu.$ref.style.transform = "translateX(".concat(-translateX, "px) translateY(0px) translateZ(0px)"); + danmu.$ref.style.transition = '-webkit-transform 0s linear 0s'; + danmu.$state = 'stop'; } }, { key: "addToQueue", value: function addToQueue(danmu) { - var errorHandle = this.art.constructor.utils.errorHandle; - errorHandle(danmu.text, 'Danmu text cannot be empty'); - errorHandle(typeof danmu.time === 'number', 'Danmu time cannot be empty'); - errorHandle(danmu.text.length <= this.option.maxlength, "The length of the danmu does not exceed ".concat(this.option.maxlength)); + var _this$art = this.art, + notice = _this$art.notice, + player = _this$art.player; + + if (!danmu.text.trim()) { + notice('Danmu text cannot be empty'); + return; + } + + if (danmu.text.length > this.option.maxlength) { + notice("The length of the danmu does not exceed ".concat(this.option.maxlength)); + return; + } + + if (typeof danmu.time !== 'number') { + danmu.time = player.currentTime; + } + this.queue.push(objectSpread({}, danmu, { $state: 'wait', $ref: null, - $restTime: 0, - $lastPlayTime: 0 + $restTime: 0 })); } }, { @@ -254,14 +281,14 @@ var _this$art$constructor = this.art.constructor.utils, setStyles = _this$art$constructor.setStyles, append = _this$art$constructor.append; - var playerLeft = $player.getBoundingClientRect().left; + var playerLeft = Danmuku.getRect($player, 'left'); var waitDanmu = this.queue.find(function (danmu) { if (danmu.$ref) { - var _danmu$$ref$getBoundi = danmu.$ref.getBoundingClientRect(), - left = _danmu$$ref$getBoundi.left, - width = _danmu$$ref$getBoundi.width; + var _Danmuku$getRect3 = Danmuku.getRect(danmu.$ref), + danmuLeft = _Danmuku$getRect3.left, + danmuWidth = _Danmuku$getRect3.width; - return playerLeft >= left + width; + return danmu.$state === 'emit' && playerLeft > danmuLeft + danmuWidth; } return false; @@ -293,18 +320,22 @@ } }, { key: "getDanmuTop", - value: function getDanmuTop(playerHeight, danmuHeight) { - return 0; - } - }, { - key: "changeState", - value: function changeState(before, after) { - return this.queue.filter(function (danmu) { - return danmu.$state === before; - }).map(function (danmu) { - danmu.$state = after; - return danmu; + value: function getDanmuTop() { + var $player = this.art.template.$player; + var playerHeight = Danmuku.getRect($player, 'height'); + var danmus = this.queue.filter(function (danmu) { + return danmu.$state === 'emit'; }); + + if (danmus.length === 0) { + return this.option.margin[0]; + } + + if (danmus.length === 1) { + return this.option.margin[0] + Danmuku.getRect(danmus[0].$ref, 'height'); + } + + return 0; } }, { key: "update", @@ -312,18 +343,14 @@ var _this2 = this; var player = this.art.player; - this.timer = window.requestAnimationFrame(function () { - _this2.queue.filter(function (danmu) { - return player.currentTime + 0.25 >= danmu.time && danmu.time >= player.currentTime - 0.25 && danmu.$state === 'wait'; - }).map(function (danmu) { - danmu.$lastPlayTime = Date.now(); - danmu.$restTime = _this2.option.speed; - danmu.$ref = _this2.getDanmuRef(); - danmu.$state = 'emit'; - return danmu; - }).forEach(function (danmu) { - _this2.emit(danmu); - }); + this.animationFrameTimer = window.requestAnimationFrame(function () { + if (_this2.layer && player.playing) { + _this2.queue.filter(function (danmu) { + return player.currentTime + 0.25 >= danmu.time && danmu.time >= player.currentTime - 0.25 && danmu.$state === 'wait'; + }).forEach(function (danmu) { + _this2.emit(danmu); + }); + } if (!_this2.isStop) { _this2.update(); @@ -333,14 +360,15 @@ }, { key: "stop", value: function stop() { + var _this3 = this; + this.isStop = true; this.queue.filter(function (danmu) { return danmu.$state === 'emit'; }).forEach(function (danmu) { - danmu.$state = 'stop'; - danmu.$restTime -= Date.now() - danmu.$lastPlayTime; + _this3.suspend(danmu); }); - window.cancelAnimationFrame(this.timer); + window.cancelAnimationFrame(this.animationFrameTimer); this.art.emit('artplayerPluginDanmu:stop'); } }, { @@ -350,8 +378,7 @@ this.queue.filter(function (danmu) { return danmu.$state === 'stop'; }).forEach(function (danmu) { - danmu.$state = 'emit'; - danmu.$lastPlayTime = Date.now(); + Danmuku["continue"](danmu); }); this.update(); this.art.emit('artplayerPluginDanmu:start'); @@ -369,6 +396,20 @@ this.art.emit('artplayerPluginDanmu:hide'); } }], [{ + key: "getRect", + value: function getRect(ref, key) { + var result = ref.getBoundingClientRect(); + return key ? result[key] : result; + } + }, { + key: "continue", + value: function _continue(danmu) { + danmu.$lastStartTime = Date.now(); + danmu.$ref.style.transform = "translateX(".concat(-danmu.$restWidth, "px) translateY(0px) translateZ(0px)"); + danmu.$ref.style.transition = "-webkit-transform ".concat(danmu.$restTime, "s linear 0s"); + danmu.$state = 'emit'; + } + }, { key: "option", get: function get() { return { @@ -376,8 +417,9 @@ speed: 5, opacity: 1, color: '#fff', - size: 14, - maxlength: 50 + size: 25, + maxlength: 50, + margin: [10, 20] }; } }, { @@ -389,7 +431,8 @@ opacity: 'number', color: 'string', size: 'number', - maxlength: 'number' + maxlength: 'number', + margin: 'array' }; } }]); diff --git a/docs/uncompiled/artplayer-plugin-danmu.js.map b/docs/uncompiled/artplayer-plugin-danmu.js.map index 77f5737d1..48d0bfaf6 100644 --- a/docs/uncompiled/artplayer-plugin-danmu.js.map +++ b/docs/uncompiled/artplayer-plugin-danmu.js.map @@ -1 +1 @@ -{"version":3,"file":"artplayer-plugin-danmu.js","sources":["../../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-danmu/src/bilibiliDanmuParse.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../packages/artplayer-plugin-danmu/src/danmuku.js","../../packages/artplayer-plugin-danmu/src/index.js"],"sourcesContent":["function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\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 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: Number(attr[1]),\n size: 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 bilibiliDanmuParseFromAv(av) {\n const corsUrl = 'https://cors-anywhere.herokuapp.com/';\n return fetch(`${corsUrl}https://api.bilibili.com/x/web-interface/view?aid=${av}`)\n .then(res => res.json())\n .then(res => {\n if (res.code === 0 && res.data && res.data.cid) {\n return fetch(`${corsUrl}https://api.bilibili.com/x/v1/dm/list.so?oid=${res.data.cid}`)\n .then(res => res.text())\n .then(xmlString => {\n return bilibiliDanmuParseFromXml(xmlString);\n });\n }\n throw new Error(`Unable to get data: ${JSON.stringify(res)}`);\n });\n}","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;","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","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 class Danmuku {\n constructor(art, option = {}) {\n this.art = art;\n this.queue = [];\n this.layer = null;\n this.isStop = false;\n this.timer = null;\n this.option = Object.assign({}, Danmuku.option, option);\n art.constructor.validator(this.option, Danmuku.scheme);\n art.on('video:play', this.start.bind(this));\n art.on('video:pause', this.stop.bind(this));\n art.on('destroy', this.stop.bind(this));\n if (typeof this.option.danmus === 'function') {\n this.option.danmus().then(danmus => {\n art.emit('artplayerPluginDanmu:loaded', danmus);\n danmus.forEach(this.addToQueue.bind(this));\n this.init();\n });\n } else {\n this.option.danmus.forEach(this.addToQueue);\n this.init();\n }\n }\n\n static get option() {\n return {\n danmus: [],\n speed: 5,\n opacity: 1,\n color: '#fff',\n size: 14,\n maxlength: 50,\n };\n }\n\n static get scheme() {\n return {\n danmus: 'array|function',\n speed: 'number',\n opacity: 'number',\n color: 'string',\n size: 'number',\n maxlength: 'number',\n };\n }\n\n init() {\n this.layer = this.art.layers.add({\n name: 'danmu',\n style: {\n position: 'absolute',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n pointerEvents: 'none',\n },\n });\n }\n\n emit(danmu) {\n const { errorHandle } = this.art.constructor.utils;\n errorHandle(this.layer, 'The danmuku is not ready');\n const { clientWidth: playerWidth, clientHeight: playerHeight } = this.art.template.$player;\n danmu.$ref.innerText = danmu.text;\n danmu.$ref.style.fontSize = `${danmu.size || this.option.size}px`;\n const { clientWidth: danmuWidth, clientHeight: danmuHeight } = danmu.$ref;\n danmu.$ref.style.opacity = danmu.opacity || this.option.opacity;\n danmu.$ref.style.color = danmu.color || this.option.color;\n danmu.$ref.style.top = this.getDanmuTop(playerHeight, danmuHeight);\n danmu.$ref.style.left = `${playerWidth}px`;\n const translateX = -playerWidth - danmuWidth - 10;\n danmu.$ref.style.transform = `translateX(${translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`;\n }\n\n continue(danmu) {\n danmu.$ref.style.transform = `translateX(${translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`;\n }\n\n addToQueue(danmu) {\n const { errorHandle } = this.art.constructor.utils;\n errorHandle(danmu.text, 'Danmu text cannot be empty');\n errorHandle(typeof danmu.time === 'number', 'Danmu time cannot be empty');\n errorHandle(\n danmu.text.length <= this.option.maxlength,\n `The length of the danmu does not exceed ${this.option.maxlength}`,\n );\n this.queue.push({\n ...danmu,\n $state: 'wait',\n $ref: null,\n $restTime: 0,\n $lastPlayTime: 0,\n });\n }\n\n getDanmuRef() {\n const { $player } = this.art.template;\n const { setStyles, append } = this.art.constructor.utils;\n const playerLeft = $player.getBoundingClientRect().left;\n\n const waitDanmu = this.queue.find(danmu => {\n if (danmu.$ref) {\n const { left, width } = danmu.$ref.getBoundingClientRect();\n return playerLeft >= left + width;\n }\n return false;\n });\n\n if (waitDanmu) {\n waitDanmu.$state = 'wait';\n waitDanmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n waitDanmu.$ref.style.transition = '-webkit-transform 0s linear 0s';\n return waitDanmu.$ref;\n }\n\n const $ref = document.createElement('div');\n\n setStyles($ref, {\n userSelect: 'none',\n position: 'absolute',\n whiteSpace: 'pre',\n pointerEvents: 'none',\n perspective: '500px',\n display: 'inline-block',\n willChange: 'transform',\n fontFamily: 'SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif',\n fontWeight: 'normal',\n lineHeight: '1.125',\n textShadow:\n '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 append(this.layer.$ref, $ref);\n return $ref;\n }\n\n getDanmuTop(playerHeight, danmuHeight) {\n return 0;\n }\n\n changeState(before, after) {\n return this.queue\n .filter(danmu => danmu.$state === before)\n .map(danmu => {\n danmu.$state = after;\n return danmu;\n });\n }\n\n update() {\n const { player } = this.art;\n this.timer = window.requestAnimationFrame(() => {\n this.queue\n .filter(danmu => {\n return (\n player.currentTime + 0.25 >= danmu.time &&\n danmu.time >= player.currentTime - 0.25 &&\n danmu.$state === 'wait'\n );\n })\n .map(danmu => {\n danmu.$lastPlayTime = Date.now();\n danmu.$restTime = this.option.speed;\n danmu.$ref = this.getDanmuRef();\n danmu.$state = 'emit';\n return danmu;\n })\n .forEach(danmu => {\n this.emit(danmu);\n });\n\n if (!this.isStop) {\n this.update();\n }\n });\n }\n\n stop() {\n this.isStop = true;\n this.queue\n .filter(danmu => danmu.$state === 'emit')\n .forEach(danmu => {\n danmu.$state = 'stop';\n danmu.$restTime -= Date.now() - danmu.$lastPlayTime;\n });\n window.cancelAnimationFrame(this.timer);\n this.art.emit('artplayerPluginDanmu:stop');\n }\n\n start() {\n this.isStop = false;\n this.queue\n .filter(danmu => danmu.$state === 'stop')\n .forEach(danmu => {\n danmu.$state = 'emit';\n danmu.$lastPlayTime = Date.now();\n });\n this.update();\n this.art.emit('artplayerPluginDanmu:start');\n }\n\n show() {\n this.layer.$ref.style = 'none';\n this.art.emit('artplayerPluginDanmu:show');\n }\n\n hide() {\n this.layer.$ref.style = 'block';\n this.art.emit('artplayerPluginDanmu:hide');\n }\n}\n","import { bilibiliDanmuParseFromXml, bilibiliDanmuParseFromAv } from './bilibiliDanmuParse';\nimport Danmuku from './danmuku';\n\nfunction artplayerPluginDanmu(option) {\n return art => {\n const danmuku = new Danmuku(art, option);\n return {\n name: 'artplayerPluginDanmu',\n emit: danmuku.addToQueue.bind(danmuku),\n start: danmuku.start.bind(danmuku),\n stop: danmuku.stop.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n };\n };\n}\n\nartplayerPluginDanmu.bilibiliDanmuParseFromXml = bilibiliDanmuParseFromXml;\nartplayerPluginDanmu.bilibiliDanmuParseFromAv = bilibiliDanmuParseFromAv;\nwindow.artplayerPluginDanmu = artplayerPluginDanmu;\nexport default artplayerPluginDanmu;\n"],"names":["bilibiliDanmuParseFromXml","xmlString","srtList","match","length","map","item","attrStr","text","attr","split","trim","time","Number","mode","size","color","toString","timestamp","pool","userID","rowID","bilibiliDanmuParseFromAv","av","corsUrl","fetch","then","res","json","code","data","cid","Error","JSON","stringify","Danmuku","art","option","queue","layer","isStop","timer","Object","assign","constructor","validator","scheme","on","start","bind","stop","danmus","emit","forEach","addToQueue","init","layers","add","name","style","position","left","top","right","bottom","width","height","overflow","pointerEvents","danmu","errorHandle","utils","template","$player","playerWidth","clientWidth","playerHeight","clientHeight","$ref","innerText","fontSize","danmuWidth","danmuHeight","opacity","getDanmuTop","translateX","transform","transition","$restTime","maxlength","push","$state","$lastPlayTime","setStyles","append","playerLeft","getBoundingClientRect","waitDanmu","find","document","createElement","userSelect","whiteSpace","perspective","display","willChange","fontFamily","fontWeight","lineHeight","textShadow","before","after","filter","player","window","requestAnimationFrame","currentTime","Date","now","speed","getDanmuRef","update","cancelAnimationFrame","artplayerPluginDanmu","danmuku","hide","show"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"artplayer-plugin-danmu.js","sources":["../../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-danmu/src/bilibiliDanmuParse.js","../../node_modules/@babel/runtime/helpers/defineProperty.js","../../node_modules/@babel/runtime/helpers/objectSpread.js","../../node_modules/@babel/runtime/helpers/classCallCheck.js","../../node_modules/@babel/runtime/helpers/createClass.js","../../packages/artplayer-plugin-danmu/src/danmuku.js","../../packages/artplayer-plugin-danmu/src/index.js"],"sourcesContent":["function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}\n\nmodule.exports = _arrayWithHoles;","function _iterableToArrayLimit(arr, i) {\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 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: Number(attr[1]),\n size: 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 bilibiliDanmuParseFromAv(av) {\n const corsUrl = 'https://cors-anywhere.herokuapp.com/';\n return fetch(`${corsUrl}https://api.bilibili.com/x/web-interface/view?aid=${av}`)\n .then(res => res.json())\n .then(res => {\n if (res.code === 0 && res.data && res.data.cid) {\n return fetch(`${corsUrl}https://api.bilibili.com/x/v1/dm/list.so?oid=${res.data.cid}`)\n .then(res => res.text())\n .then(xmlString => {\n return bilibiliDanmuParseFromXml(xmlString);\n });\n }\n throw new Error(`Unable to get data: ${JSON.stringify(res)}`);\n });\n}","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;","var defineProperty = require(\"./defineProperty\");\n\nfunction _objectSpread(target) {\n for (var i = 1; i < arguments.length; i++) {\n var source = arguments[i] != null ? arguments[i] : {};\n var ownKeys = Object.keys(source);\n\n if (typeof Object.getOwnPropertySymbols === 'function') {\n ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) {\n return Object.getOwnPropertyDescriptor(source, sym).enumerable;\n }));\n }\n\n ownKeys.forEach(function (key) {\n defineProperty(target, key, source[key]);\n });\n }\n\n return target;\n}\n\nmodule.exports = _objectSpread;","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 class Danmuku {\n constructor(art, option = {}) {\n this.art = art;\n this.queue = [];\n this.layer = null;\n this.isStop = false;\n this.animationFrameTimer = null;\n this.option = Object.assign({}, Danmuku.option, option);\n art.constructor.validator(this.option, Danmuku.scheme);\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('destroy', this.stop.bind(this));\n if (typeof this.option.danmus === 'function') {\n this.option.danmus().then(danmus => {\n danmus.forEach(this.addToQueue.bind(this));\n this.init();\n art.emit('artplayerPluginDanmu:loaded', danmus);\n });\n } else {\n this.option.danmus.forEach(this.addToQueue.bind(this));\n this.init();\n }\n }\n\n static get option() {\n return {\n danmus: [],\n speed: 5,\n opacity: 1,\n color: '#fff',\n size: 25,\n maxlength: 50,\n margin: [10, 20],\n };\n }\n\n static get scheme() {\n return {\n danmus: 'array|function',\n speed: 'number',\n opacity: 'number',\n color: 'string',\n size: 'number',\n maxlength: 'number',\n margin: 'array',\n };\n }\n\n static getRect(ref, key) {\n const result = ref.getBoundingClientRect();\n return key ? result[key] : result;\n }\n\n init() {\n this.layer = this.art.layers.add({\n name: 'danmu',\n style: {\n position: 'absolute',\n left: 0,\n top: 0,\n right: 0,\n bottom: 0,\n width: '100%',\n height: '100%',\n overflow: 'hidden',\n pointerEvents: 'none',\n opacity: this.option.opacity,\n },\n });\n }\n\n emit(danmu) {\n const { $player } = this.art.template;\n danmu.$ref = this.getDanmuRef();\n danmu.$ref.innerText = danmu.text;\n danmu.$ref.style.fontSize = `${danmu.size || this.option.size}px`;\n const playerWidth = Danmuku.getRect($player, 'width');\n const danmuWidth = Danmuku.getRect(danmu.$ref, 'width');\n danmu.$restWidth = playerWidth + danmuWidth + 5;\n danmu.$restTime = this.option.speed;\n danmu.$lastStartTime = Date.now();\n danmu.$ref.style.color = danmu.color || this.option.color;\n danmu.$ref.style.left = `${playerWidth}px`;\n danmu.$ref.style.top = `${this.getDanmuTop()}px`;\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`;\n danmu.$state = 'emit';\n }\n\n static continue(danmu) {\n danmu.$lastStartTime = Date.now();\n danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`;\n danmu.$state = 'emit';\n }\n\n suspend(danmu) {\n const { $player } = this.art.template;\n const { left: playerLeft, width: playerWidth } = Danmuku.getRect($player);\n const { left: danmuLeft } = Danmuku.getRect(danmu.$ref);\n danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000;\n const translateX = playerWidth - (danmuLeft - playerLeft) + 5;\n danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`;\n danmu.$ref.style.transition = '-webkit-transform 0s linear 0s';\n danmu.$state = 'stop';\n }\n\n addToQueue(danmu) {\n const { notice, player } = this.art;\n if (!danmu.text.trim()) {\n notice('Danmu text cannot be empty');\n return;\n }\n\n if (danmu.text.length > this.option.maxlength) {\n notice(`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 ...danmu,\n $state: 'wait',\n $ref: null,\n $restTime: 0,\n });\n }\n\n getDanmuRef() {\n const { $player } = this.art.template;\n const { setStyles, append } = this.art.constructor.utils;\n const playerLeft = Danmuku.getRect($player, 'left');\n\n const waitDanmu = this.queue.find(danmu => {\n if (danmu.$ref) {\n const { left: danmuLeft, width: danmuWidth } = Danmuku.getRect(danmu.$ref);\n return danmu.$state === 'emit' && playerLeft > danmuLeft + danmuWidth;\n }\n return false;\n });\n\n if (waitDanmu) {\n waitDanmu.$state = 'wait';\n waitDanmu.$ref.style.transform = 'translateX(0px) translateY(0px) translateZ(0px)';\n waitDanmu.$ref.style.transition = '-webkit-transform 0s linear 0s';\n return waitDanmu.$ref;\n }\n\n const $ref = document.createElement('div');\n\n setStyles($ref, {\n userSelect: 'none',\n position: 'absolute',\n whiteSpace: 'pre',\n pointerEvents: 'none',\n perspective: '500px',\n display: 'inline-block',\n willChange: 'transform',\n fontFamily: 'SimHei, \"Microsoft JhengHei\", Arial, Helvetica, sans-serif',\n fontWeight: 'normal',\n lineHeight: '1.125',\n textShadow:\n '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 append(this.layer.$ref, $ref);\n return $ref;\n }\n\n getDanmuTop() {\n const { $player } = this.art.template;\n const playerHeight = Danmuku.getRect($player, 'height');\n const danmus = this.queue.filter(danmu => danmu.$state === 'emit');\n if (danmus.length === 0) {\n return this.option.margin[0];\n }\n\n if (danmus.length === 1) {\n return this.option.margin[0] + Danmuku.getRect(danmus[0].$ref, 'height');\n }\n\n return 0;\n }\n\n update() {\n const { player } = this.art;\n this.animationFrameTimer = window.requestAnimationFrame(() => {\n if (this.layer && player.playing) {\n this.queue\n .filter(danmu => {\n return (\n player.currentTime + 0.25 >= danmu.time &&\n danmu.time >= player.currentTime - 0.25 &&\n danmu.$state === 'wait'\n );\n })\n .forEach(danmu => {\n this.emit(danmu);\n });\n }\n\n if (!this.isStop) {\n this.update();\n }\n });\n }\n\n stop() {\n this.isStop = true;\n this.queue\n .filter(danmu => danmu.$state === 'emit')\n .forEach(danmu => {\n this.suspend(danmu);\n });\n window.cancelAnimationFrame(this.animationFrameTimer);\n this.art.emit('artplayerPluginDanmu:stop');\n }\n\n start() {\n this.isStop = false;\n this.queue\n .filter(danmu => danmu.$state === 'stop')\n .forEach(danmu => {\n Danmuku.continue(danmu);\n });\n this.update();\n this.art.emit('artplayerPluginDanmu:start');\n }\n\n show() {\n this.layer.$ref.style = 'none';\n this.art.emit('artplayerPluginDanmu:show');\n }\n\n hide() {\n this.layer.$ref.style = 'block';\n this.art.emit('artplayerPluginDanmu:hide');\n }\n}\n","import { bilibiliDanmuParseFromXml, bilibiliDanmuParseFromAv } from './bilibiliDanmuParse';\nimport Danmuku from './danmuku';\n\nfunction artplayerPluginDanmu(option) {\n return art => {\n const danmuku = new Danmuku(art, option);\n return {\n name: 'artplayerPluginDanmu',\n emit: danmuku.addToQueue.bind(danmuku),\n start: danmuku.start.bind(danmuku),\n stop: danmuku.stop.bind(danmuku),\n hide: danmuku.hide.bind(danmuku),\n show: danmuku.show.bind(danmuku),\n };\n };\n}\n\nartplayerPluginDanmu.bilibiliDanmuParseFromXml = bilibiliDanmuParseFromXml;\nartplayerPluginDanmu.bilibiliDanmuParseFromAv = bilibiliDanmuParseFromAv;\nwindow.artplayerPluginDanmu = artplayerPluginDanmu;\nexport default artplayerPluginDanmu;\n"],"names":["bilibiliDanmuParseFromXml","xmlString","srtList","match","length","map","item","attrStr","text","attr","split","trim","time","Number","mode","size","color","toString","timestamp","pool","userID","rowID","bilibiliDanmuParseFromAv","av","corsUrl","fetch","then","res","json","code","data","cid","Error","JSON","stringify","Danmuku","art","option","queue","layer","isStop","animationFrameTimer","Object","assign","constructor","validator","scheme","on","start","bind","stop","danmus","forEach","addToQueue","init","emit","layers","add","name","style","position","left","top","right","bottom","width","height","overflow","pointerEvents","opacity","danmu","$player","template","$ref","getDanmuRef","innerText","fontSize","playerWidth","getRect","danmuWidth","$restWidth","$restTime","speed","$lastStartTime","Date","now","getDanmuTop","transform","transition","$state","playerLeft","danmuLeft","translateX","notice","player","maxlength","currentTime","push","utils","setStyles","append","waitDanmu","find","document","createElement","userSelect","whiteSpace","perspective","display","willChange","fontFamily","fontWeight","lineHeight","textShadow","playerHeight","filter","margin","window","requestAnimationFrame","playing","update","suspend","cancelAnimationFrame","ref","key","result","getBoundingClientRect","artplayerPluginDanmu","danmuku","hide","show"],"mappings":"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"} \ No newline at end of file diff --git a/packages/artplayer-plugin-danmu/src/danmuku.js b/packages/artplayer-plugin-danmu/src/danmuku.js index 60215ba56..cbfaeac47 100644 --- a/packages/artplayer-plugin-danmu/src/danmuku.js +++ b/packages/artplayer-plugin-danmu/src/danmuku.js @@ -4,20 +4,22 @@ export default class Danmuku { this.queue = []; this.layer = null; this.isStop = false; - this.timer = null; + this.animationFrameTimer = null; this.option = Object.assign({}, Danmuku.option, option); art.constructor.validator(this.option, Danmuku.scheme); art.on('video:play', this.start.bind(this)); + art.on('video:playing', this.start.bind(this)); art.on('video:pause', this.stop.bind(this)); + art.on('video:waiting', this.stop.bind(this)); art.on('destroy', this.stop.bind(this)); if (typeof this.option.danmus === 'function') { this.option.danmus().then(danmus => { - art.emit('artplayerPluginDanmu:loaded', danmus); danmus.forEach(this.addToQueue.bind(this)); this.init(); + art.emit('artplayerPluginDanmu:loaded', danmus); }); } else { - this.option.danmus.forEach(this.addToQueue); + this.option.danmus.forEach(this.addToQueue.bind(this)); this.init(); } } @@ -28,8 +30,9 @@ export default class Danmuku { speed: 5, opacity: 1, color: '#fff', - size: 14, + size: 25, maxlength: 50, + margin: [10, 20], }; } @@ -41,9 +44,15 @@ export default class Danmuku { color: 'string', size: 'number', maxlength: 'number', + margin: 'array', }; } + static getRect(ref, key) { + const result = ref.getBoundingClientRect(); + return key ? result[key] : result; + } + init() { this.layer = this.art.layers.add({ name: 'danmu', @@ -57,57 +66,80 @@ export default class Danmuku { height: '100%', overflow: 'hidden', pointerEvents: 'none', + opacity: this.option.opacity, }, }); } emit(danmu) { - const { errorHandle } = this.art.constructor.utils; - errorHandle(this.layer, 'The danmuku is not ready'); - const { clientWidth: playerWidth, clientHeight: playerHeight } = this.art.template.$player; + const { $player } = this.art.template; + danmu.$ref = this.getDanmuRef(); danmu.$ref.innerText = danmu.text; danmu.$ref.style.fontSize = `${danmu.size || this.option.size}px`; - const { clientWidth: danmuWidth, clientHeight: danmuHeight } = danmu.$ref; - danmu.$ref.style.opacity = danmu.opacity || this.option.opacity; + const playerWidth = Danmuku.getRect($player, 'width'); + const danmuWidth = Danmuku.getRect(danmu.$ref, 'width'); + danmu.$restWidth = playerWidth + danmuWidth + 5; + danmu.$restTime = this.option.speed; + danmu.$lastStartTime = Date.now(); danmu.$ref.style.color = danmu.color || this.option.color; - danmu.$ref.style.top = this.getDanmuTop(playerHeight, danmuHeight); danmu.$ref.style.left = `${playerWidth}px`; - const translateX = -playerWidth - danmuWidth - 10; - danmu.$ref.style.transform = `translateX(${translateX}px) translateY(0px) translateZ(0px)`; + danmu.$ref.style.top = `${this.getDanmuTop()}px`; + danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`; + danmu.$state = 'emit'; } - continue(danmu) { - danmu.$ref.style.transform = `translateX(${translateX}px) translateY(0px) translateZ(0px)`; + static continue(danmu) { + danmu.$lastStartTime = Date.now(); + danmu.$ref.style.transform = `translateX(${-danmu.$restWidth}px) translateY(0px) translateZ(0px)`; danmu.$ref.style.transition = `-webkit-transform ${danmu.$restTime}s linear 0s`; + danmu.$state = 'emit'; + } + + suspend(danmu) { + const { $player } = this.art.template; + const { left: playerLeft, width: playerWidth } = Danmuku.getRect($player); + const { left: danmuLeft } = Danmuku.getRect(danmu.$ref); + danmu.$restTime -= (Date.now() - danmu.$lastStartTime) / 1000; + const translateX = playerWidth - (danmuLeft - playerLeft) + 5; + danmu.$ref.style.transform = `translateX(${-translateX}px) translateY(0px) translateZ(0px)`; + danmu.$ref.style.transition = '-webkit-transform 0s linear 0s'; + danmu.$state = 'stop'; } addToQueue(danmu) { - const { errorHandle } = this.art.constructor.utils; - errorHandle(danmu.text, 'Danmu text cannot be empty'); - errorHandle(typeof danmu.time === 'number', 'Danmu time cannot be empty'); - errorHandle( - danmu.text.length <= this.option.maxlength, - `The length of the danmu does not exceed ${this.option.maxlength}`, - ); + const { notice, player } = this.art; + if (!danmu.text.trim()) { + notice('Danmu text cannot be empty'); + return; + } + + if (danmu.text.length > this.option.maxlength) { + notice(`The length of the danmu does not exceed ${this.option.maxlength}`); + return; + } + + if (typeof danmu.time !== 'number') { + danmu.time = player.currentTime; + } + this.queue.push({ ...danmu, $state: 'wait', $ref: null, $restTime: 0, - $lastPlayTime: 0, }); } getDanmuRef() { const { $player } = this.art.template; const { setStyles, append } = this.art.constructor.utils; - const playerLeft = $player.getBoundingClientRect().left; + const playerLeft = Danmuku.getRect($player, 'left'); const waitDanmu = this.queue.find(danmu => { if (danmu.$ref) { - const { left, width } = danmu.$ref.getBoundingClientRect(); - return playerLeft >= left + width; + const { left: danmuLeft, width: danmuWidth } = Danmuku.getRect(danmu.$ref); + return danmu.$state === 'emit' && playerLeft > danmuLeft + danmuWidth; } return false; }); @@ -140,40 +172,37 @@ export default class Danmuku { return $ref; } - getDanmuTop(playerHeight, danmuHeight) { - return 0; - } + getDanmuTop() { + const { $player } = this.art.template; + const playerHeight = Danmuku.getRect($player, 'height'); + const danmus = this.queue.filter(danmu => danmu.$state === 'emit'); + if (danmus.length === 0) { + return this.option.margin[0]; + } - changeState(before, after) { - return this.queue - .filter(danmu => danmu.$state === before) - .map(danmu => { - danmu.$state = after; - return danmu; - }); + if (danmus.length === 1) { + return this.option.margin[0] + Danmuku.getRect(danmus[0].$ref, 'height'); + } + + return 0; } update() { const { player } = this.art; - this.timer = window.requestAnimationFrame(() => { - this.queue - .filter(danmu => { - return ( - player.currentTime + 0.25 >= danmu.time && - danmu.time >= player.currentTime - 0.25 && - danmu.$state === 'wait' - ); - }) - .map(danmu => { - danmu.$lastPlayTime = Date.now(); - danmu.$restTime = this.option.speed; - danmu.$ref = this.getDanmuRef(); - danmu.$state = 'emit'; - return danmu; - }) - .forEach(danmu => { - this.emit(danmu); - }); + this.animationFrameTimer = window.requestAnimationFrame(() => { + if (this.layer && player.playing) { + this.queue + .filter(danmu => { + return ( + player.currentTime + 0.25 >= danmu.time && + danmu.time >= player.currentTime - 0.25 && + danmu.$state === 'wait' + ); + }) + .forEach(danmu => { + this.emit(danmu); + }); + } if (!this.isStop) { this.update(); @@ -186,10 +215,9 @@ export default class Danmuku { this.queue .filter(danmu => danmu.$state === 'emit') .forEach(danmu => { - danmu.$state = 'stop'; - danmu.$restTime -= Date.now() - danmu.$lastPlayTime; + this.suspend(danmu); }); - window.cancelAnimationFrame(this.timer); + window.cancelAnimationFrame(this.animationFrameTimer); this.art.emit('artplayerPluginDanmu:stop'); } @@ -198,8 +226,7 @@ export default class Danmuku { this.queue .filter(danmu => danmu.$state === 'stop') .forEach(danmu => { - danmu.$state = 'emit'; - danmu.$lastPlayTime = Date.now(); + Danmuku.continue(danmu); }); this.update(); this.art.emit('artplayerPluginDanmu:start');