Skip to content

Commit 5e30309

Browse files
committed
Added relative coordinate support and slightly enhanced AcFun parser
1 parent e5ef822 commit 5e30309

5 files changed

Lines changed: 39 additions & 17 deletions

File tree

build/CommentCoreLibrary.js

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

docs/CommentTypes.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
## 定位弹幕
3535
### 定位弹幕简单模式
3636
可选参量:Array[x,y,opacity,duration,text]
37-
定位弹幕简单模式允许用户对弹幕进行精确定位和透明度渐变,但是本身不包含任何3D排版效果。opacity为形如:```[Float]-[Float]```,分别定义了始末透明度。
37+
定位弹幕简单模式允许用户对弹幕进行精确定位和透明度渐变,但是本身不包含任何3D排版效果。opacity为形如:```[Float]-[Float]```,分别定义了始末透明度。x,y都小于1的时候我们认为是百分比。
3838

3939
### 定位弹幕扩展模式
4040
可选参量:Array[x,y,opacity,duration,text,rotateZ,rotateY]

parsers/AcfunFormat.js

Lines changed: 22 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -26,15 +26,17 @@ function AcfunParser(jsond){
2626
data.color = '#' + fillRGB(parseInt(xc[1]).toString(16));
2727
data.mode = parseInt(xc[2]);
2828
data.size = parseInt(xc[3]);
29+
data.hash = xc[4];
30+
data.date = parseInt(xc[5]);
31+
data.position = "relative";
2932
if(data.mode != 7){
3033
data.text = jsondt[i].m.replace(/(\/n|\\n|\n|\r\n|\\r)/g,"\n");
3134
data.text = data.text.replace(/\r/g,"\n");
3235
data.text = data.text.replace(/\s/g,"\u00a0");
33-
}else
36+
}else{
3437
data.text = jsondt[i].m;
35-
data.hash = xc[4];
36-
data.date = parseInt(xc[5]);
37-
if(data.mode ==7){
38+
}
39+
if(data.mode == 7){
3840
//High level positioned dm
3941
try{
4042
var x = JSON.parse(data.text);
@@ -47,22 +49,31 @@ function AcfunParser(jsond){
4749
data.text = data.text.replace(/\ /g,"\u00a0");
4850
console.log(data.text);
4951
if(x.p != null){
50-
data.x = x.p.x;
51-
data.y = x.p.y;
52+
data.x = x.p.x / 1000; // relative position
53+
data.y = x.p.y / 1000;
5254
}else{
5355
data.x = 0;
5456
data.y = 0;
5557
}
5658
data.shadow = x.b;
5759
data.duration = 4000;
5860
if(x.l != null)
59-
data.duration = x.l* 1000;
60-
if(x.z != null){
61+
data.moveDelay = x.l * 1000;
62+
if(x.z != null && x.z.length > 0){
6163
data.movable = true;
62-
data.toX = x.z[0].x;
63-
data.toY = x.z[0].y;
64+
data.toX = x.z[0].x / 1000;
65+
data.toY = x.z[0].y / 1000;
66+
data.alphaTo = x.z[0].t;
67+
data.colorTo = x.z[0].c;
6468
data.moveDuration = x.z[0].l != null ? (x.z[0].l * 1000) : 500;
65-
data.moveDelay = 0;
69+
data.duration = data.moveDelay + data.moveDuration;
70+
}
71+
if(x.r != null && x.k != null){
72+
data.rX = x.r;
73+
data.rY = x.k;
74+
}
75+
if(x.a){
76+
data.alphaFrom = x.a;
6677
}
6778
}
6879
list.push(data);

parsers/BilibiliFormat.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ function BilibiliParser(xmlDoc){
3030
obj.mode = parseInt(opt[1]);
3131
obj.date = parseInt(opt[4]);
3232
obj.pool = parseInt(opt[5]);
33+
obj.position = "absolute";
3334
if(opt[7] != null)
3435
obj.dbid = parseInt(opt[7]);
3536
obj.hash = opt[6];

src/CommentCoreLibrary.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -220,8 +220,13 @@ CommentManager.prototype.sendComment = function(data){
220220
case 6:{this.csa.reverse.add(cmt);}break;
221221
case 17:
222222
case 7:{
223-
cmt.style.top = data.y + "px";
224-
cmt.style.left = data.x + "px";
223+
if(cmt.data.position !== "relative"){
224+
cmt.style.top = cmt.data.y + "px";
225+
cmt.style.left = cmt.data.x + "px";
226+
}else{
227+
cmt.style.top = cmt.data.y * this.stage.height + "px";
228+
cmt.style.left = cmt.data.x * this.stage.width + "px";
229+
}
225230
cmt.ttl = Math.round(data.duration * this.def.globalScale);
226231
cmt.dur = Math.round(data.duration * this.def.globalScale);
227232
if(data.rY !== 0 || data.rZ !== 0){
@@ -290,8 +295,13 @@ CommentManager.prototype.onTimerEvent = function(timePassed,cmObj){
290295
cmt.style.opacity = (cmt.data.alphaFrom - cmt.data.alphaTo) * (cmt.ttl/cmt.dur) + cmt.data.alphaTo;
291296
}
292297
if(cmt.mode == 7 && cmt.data.movable){
293-
cmt.style.top = ((cmt.data.toY - cmt.data.y) * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + parseInt(cmt.data.y)) + "px";
294-
cmt.style.left = ((cmt.data.toX - cmt.data.x) * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + parseInt(cmt.data.x)) + "px";
298+
if(cmt.data.position !== "relative"){
299+
cmt.style.top = ((cmt.data.toY - cmt.data.y) * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + cmt.data.y) + "px";
300+
cmt.style.left = ((cmt.data.toX - cmt.data.x) * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + cmt.data.x) + "px";
301+
}else{
302+
cmt.style.top = ((cmt.data.toY - cmt.data.y) * cmObj.stage.height * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + cmt.data.y * cmObj.stage.height) + "px";
303+
cmt.style.left = ((cmt.data.toX - cmt.data.x) * cmObj.stage.width * (Math.min(Math.max(cmt.dur - cmt.data.moveDelay - cmt.ttl,0),cmt.data.moveDuration) / cmt.data.moveDuration) + cmt.data.x * cmObj.stage.width) + "px";
304+
}
295305
}
296306
}
297307
if(cmObj.filter != null){

0 commit comments

Comments
 (0)