mirror of
https://github.com/zhw2590582/ArtPlayer.git
synced 2026-10-25 08:01:20 -08:00
update danmuku.js
This commit is contained in:
1 parent
5667235d8d
commit
58e18c1d60
5 files changed
+91
-87
No files matched your search
+3
-3
@@ -122,11 +122,11 @@
|
|||||||
danmuku: '/assets/sample/danmuku.xml',
|
danmuku: '/assets/sample/danmuku.xml',
|
||||||
speed: 5,
|
speed: 5,
|
||||||
opacity: 1,
|
opacity: 1,
|
||||||
fontSize: 20,
|
fontSize: 14,
|
||||||
maxlength: 50,
|
maxlength: 100,
|
||||||
margin: ['10%', 60],
|
margin: ['10%', 60],
|
||||||
synchronousPlayback: false,
|
synchronousPlayback: false,
|
||||||
filter: (danmu) => danmu.text.length < 20,
|
filter: (danmu) => danmu.text.length < 50,
|
||||||
}),
|
}),
|
||||||
],
|
],
|
||||||
whitelist: ['*'],
|
whitelist: ['*'],
|
||||||
|
|||||||
@@ -192,6 +192,8 @@ class Danmuku {
|
|||||||
art.on('video:waiting', this.stop.bind(this));
|
art.on('video:waiting', this.stop.bind(this));
|
||||||
art.on('resize', this.resize.bind(this));
|
art.on('resize', this.resize.bind(this));
|
||||||
art.on('destroy', this.stop.bind(this));
|
art.on('destroy', this.stop.bind(this));
|
||||||
|
art.on('fullscreen', this.reset.bind(this));
|
||||||
|
art.on('fullscreenWeb', this.reset.bind(this));
|
||||||
this.load();
|
this.load();
|
||||||
}
|
}
|
||||||
static get option() {
|
static get option() {
|
||||||
@@ -394,6 +396,22 @@ class Danmuku {
|
|||||||
});
|
});
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
reset() {
|
||||||
|
const { $player } = this.art.template;
|
||||||
|
const { width: playerWidth } = this.getRect($player);
|
||||||
|
this.filter('emit', (danmu)=>{
|
||||||
|
if (danmu.$ref) {
|
||||||
|
danmu.$state = 'wait';
|
||||||
|
danmu.$ref.dataset.state = 'wait';
|
||||||
|
danmu.$ref.style.border = 'none';
|
||||||
|
danmu.$ref.style.visibility = 'hidden';
|
||||||
|
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';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
update() {
|
update() {
|
||||||
const { $player } = this.art.template;
|
const { $player } = this.art.template;
|
||||||
this.animationFrameTimer = window.requestAnimationFrame(()=>{
|
this.animationFrameTimer = window.requestAnimationFrame(()=>{
|
||||||
@@ -611,49 +629,36 @@ function bilibiliDanmuParseFromUrl(url) {
|
|||||||
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
|
var parcelHelpers = require("@parcel/transformer-js/src/esmodule-helpers.js");
|
||||||
parcelHelpers.defineInteropFlag(exports);
|
parcelHelpers.defineInteropFlag(exports);
|
||||||
function calculatedTop(danmus) {
|
function calculatedTop(danmus) {
|
||||||
let top = 0;
|
// 方法1:两两对比,只要找到间隔能塞进一条弹幕的高度的,则马上插入
|
||||||
const topMap = {};
|
for(let index = 1; index < danmus.length; index += 1){
|
||||||
for(let index3 = 0; index3 < danmus.length; index3 += 1){
|
const item = danmus[index];
|
||||||
const item = danmus[index3];
|
const prev = danmus[index - 1];
|
||||||
if (topMap[item.top]) topMap[item.top].push(item);
|
const prevBottom = prev.top + prev.height;
|
||||||
else topMap[item.top] = [
|
const diff = item.top - prevBottom;
|
||||||
item
|
if (diff >= danmus[1].height) return prevBottom;
|
||||||
];
|
|
||||||
}
|
}
|
||||||
const topMapKeys = Object.keys(topMap);
|
// 方法2:找出所有弹幕的右侧最多空白的的位置插入
|
||||||
let maxDiff = 0;
|
const topMap = [];
|
||||||
for(let index1 = 1; index1 < danmus.length; index1 += 1){
|
for(let index1 = 1; index1 < danmus.length - 1; index1 += 1){
|
||||||
const item = danmus[index1];
|
const item = danmus[index1];
|
||||||
const prev = danmus[index1 - 1];
|
if (topMap.length) {
|
||||||
const prevTop = prev.top + prev.height;
|
const last = topMap[topMap.length - 1];
|
||||||
const diff = item.top - prevTop;
|
if (last[0].top === item.top) last.push(item);
|
||||||
if (diff > maxDiff) {
|
else topMap.push([
|
||||||
top = prevTop;
|
item
|
||||||
maxDiff = diff;
|
]);
|
||||||
}
|
} else topMap.push([
|
||||||
|
item
|
||||||
|
]);
|
||||||
}
|
}
|
||||||
if (top === 0) {
|
topMap.sort((prev, next)=>{
|
||||||
let maxRight = 0;
|
const nextMinRight = Math.min(...next.map((item)=>item.right
|
||||||
for(let index = 0; index < topMapKeys.length; index += 1){
|
));
|
||||||
let minRight = danmus[0].width;
|
const prevMinRight = Math.min(...prev.map((item)=>item.right
|
||||||
const topKey = topMapKeys[index];
|
));
|
||||||
const danmuArr = topMap[topKey];
|
return nextMinRight * next.length - prevMinRight * prev.length;
|
||||||
for(let index2 = 0; index2 < danmuArr.length; index2 += 1){
|
|
||||||
const danmu = danmuArr[index2];
|
|
||||||
if (danmu.right < minRight) minRight = danmu.right;
|
|
||||||
}
|
|
||||||
if (minRight > maxRight) {
|
|
||||||
maxRight = minRight;
|
|
||||||
[{ top }] = danmuArr;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (top === 0) [top] = topMapKeys.filter((item, index)=>{
|
|
||||||
return index !== 0 && index !== topMapKeys.length - 1;
|
|
||||||
}).sort((prev, next)=>{
|
|
||||||
return topMap[prev].length - topMap[next].length;
|
|
||||||
});
|
});
|
||||||
return top;
|
return topMap[0][0].top;
|
||||||
}
|
}
|
||||||
function getDanmuTop(ins, danmu) {
|
function getDanmuTop(ins, danmu) {
|
||||||
const { $player } = ins.art.template;
|
const { $player } = ins.art.template;
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
{"mappings":"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 truncated
|
{"mappings":"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 truncated
|
||||||
@@ -23,6 +23,8 @@ export default class Danmuku {
|
|||||||
art.on('video:waiting', this.stop.bind(this));
|
art.on('video:waiting', this.stop.bind(this));
|
||||||
art.on('resize', this.resize.bind(this));
|
art.on('resize', this.resize.bind(this));
|
||||||
art.on('destroy', this.stop.bind(this));
|
art.on('destroy', this.stop.bind(this));
|
||||||
|
art.on('fullscreen', this.reset.bind(this));
|
||||||
|
art.on('fullscreenWeb', this.reset.bind(this));
|
||||||
|
|
||||||
this.load();
|
this.load();
|
||||||
}
|
}
|
||||||
@@ -268,6 +270,24 @@ export default class Danmuku {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
reset() {
|
||||||
|
const { $player } = this.art.template;
|
||||||
|
const { width: playerWidth } = this.getRect($player);
|
||||||
|
|
||||||
|
this.filter('emit', (danmu) => {
|
||||||
|
if (danmu.$ref) {
|
||||||
|
danmu.$state = 'wait';
|
||||||
|
danmu.$ref.dataset.state = 'wait';
|
||||||
|
danmu.$ref.style.border = 'none';
|
||||||
|
danmu.$ref.style.visibility = 'hidden';
|
||||||
|
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';
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
update() {
|
update() {
|
||||||
const { $player } = this.art.template;
|
const { $player } = this.art.template;
|
||||||
this.animationFrameTimer = window.requestAnimationFrame(() => {
|
this.animationFrameTimer = window.requestAnimationFrame(() => {
|
||||||
|
|||||||
@@ -1,59 +1,38 @@
|
|||||||
function calculatedTop(danmus) {
|
function calculatedTop(danmus) {
|
||||||
let top = 0;
|
// 方法1:两两对比,只要找到间隔能塞进一条弹幕的高度的,则马上插入
|
||||||
const topMap = {};
|
|
||||||
for (let index = 0; index < danmus.length; index += 1) {
|
|
||||||
const item = danmus[index];
|
|
||||||
if (topMap[item.top]) {
|
|
||||||
topMap[item.top].push(item);
|
|
||||||
} else {
|
|
||||||
topMap[item.top] = [item];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
const topMapKeys = Object.keys(topMap);
|
|
||||||
|
|
||||||
let maxDiff = 0;
|
|
||||||
for (let index = 1; index < danmus.length; index += 1) {
|
for (let index = 1; index < danmus.length; index += 1) {
|
||||||
const item = danmus[index];
|
const item = danmus[index];
|
||||||
const prev = danmus[index - 1];
|
const prev = danmus[index - 1];
|
||||||
const prevTop = prev.top + prev.height;
|
const prevBottom = prev.top + prev.height;
|
||||||
const diff = item.top - prevTop;
|
const diff = item.top - prevBottom;
|
||||||
if (diff > maxDiff) {
|
if (diff >= danmus[1].height) {
|
||||||
top = prevTop;
|
return prevBottom;
|
||||||
maxDiff = diff;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (top === 0) {
|
// 方法2:找出所有弹幕的右侧最多空白的的位置插入
|
||||||
let maxRight = 0;
|
const topMap = [];
|
||||||
for (let index = 0; index < topMapKeys.length; index += 1) {
|
for (let index = 1; index < danmus.length - 1; index += 1) {
|
||||||
let minRight = danmus[0].width;
|
const item = danmus[index];
|
||||||
const topKey = topMapKeys[index];
|
if (topMap.length) {
|
||||||
const danmuArr = topMap[topKey];
|
const last = topMap[topMap.length - 1];
|
||||||
for (let index = 0; index < danmuArr.length; index += 1) {
|
if (last[0].top === item.top) {
|
||||||
const danmu = danmuArr[index];
|
last.push(item);
|
||||||
if (danmu.right < minRight) {
|
} else {
|
||||||
minRight = danmu.right;
|
topMap.push([item]);
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (minRight > maxRight) {
|
|
||||||
maxRight = minRight;
|
|
||||||
[{ top }] = danmuArr;
|
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
topMap.push([item]);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (top === 0) {
|
topMap.sort((prev, next) => {
|
||||||
[top] = topMapKeys
|
const nextMinRight = Math.min(...next.map((item) => item.right));
|
||||||
.filter((item, index) => {
|
const prevMinRight = Math.min(...prev.map((item) => item.right));
|
||||||
return index !== 0 && index !== topMapKeys.length - 1;
|
return nextMinRight * next.length - prevMinRight * prev.length;
|
||||||
})
|
});
|
||||||
.sort((prev, next) => {
|
|
||||||
return topMap[prev].length - topMap[next].length;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
return top;
|
return topMap[0][0].top;
|
||||||
}
|
}
|
||||||
|
|
||||||
export default function getDanmuTop(ins, danmu) {
|
export default function getDanmuTop(ins, danmu) {
|
||||||
|
|||||||
Reference in new issue
Block a user