jabbany / CommentCoreLibrary

Javascript Live Comment (Danmaku) Engine Implementation. JS弹幕模块核心,提供从基本骨架到高级弹幕的支持。
http://jabbany.github.io/CommentCoreLibrary/demo
MIT License
1.9k stars 304 forks source link

如何动态设置运行中滚动弹幕的移动速度 #138

Open Ctadas opened 2 years ago

Ctadas commented 2 years ago

这边有个需求是:根据视频的倍速调整弹幕的速度。我调整CommentManager的options.global.scale,未出现的弹幕可以满足效果,但是在runline的弹幕不受这个参数的影响,我尝试直接修改runline弹幕的ttl和dur也没有效果,我需要怎么设置才能调整runline的弹幕的速度一致?

jabbany commented 2 years ago

直接修改runline弹幕的ttl和dur

确实这样实现。。。不过CSS弹幕有一些特殊的坑,因为不是靠CommentManager驱动,所以需要多 call 一下 cmt.stop() 来收动删掉旧的CSS,这样下一个tick就能补回来。

目前版本上,实现此效果的样本代码,可在demo → code里面测试运行:

// 弹幕速度降低到原来的 1/4
cm.options.global.scale *= 4;
cm.runline.forEach(function (cmt) {
   cmt.ttl *= 4;
   cmt.dur *= 4;
   cmt.stop(); // 这个有点hack
});

不过这个应该算是 API 实现的 bug,CssComment.ts 里面应该覆盖 ttl 和 dur 的 setter 来自动刷掉旧的 css。

TODO 需要fix如下:

修复后直接设 ttl / dur 就应该够了

dbFlower commented 2 years ago

已收到