jabbany / CommentCoreLibrary

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

想要实现单条弹幕的停止怎么做 #84

Closed yshmore closed 6 years ago

yshmore commented 6 years ago

看了下CoreComment.prototype.stop的实现是空

jabbany commented 6 years ago

对的,CoreComment和其子类的stop()并不保证能单独停止弹幕,因为不同的后端实现有不同的停止需求(如果是基于主event timer,比如定位动画,由于共享timer所以不能设计单独停止。如果是基于CSS动画则这个会按照预期工作)。

如果需要可停止的定位弹幕,最好的方法是创造新的子类,然后实现另一个函数。CoreComment是动画弹幕,其位置由ttl和dur决定。所以停止的方法是创造一个flag让 time 函数有时无视其输入。

class StoppableCoreComment extends CoreComment {
    private _stopped = false;
    public stop() {
        //注意不要实现在这里因为 stop() 会被 cm.stop() 调用
        //那样的话,等cm.start() 时,不会重新自动启动
    }

    public detachStop() {
        this._stopped = true;
    }

    public detachStart() {
        this._stopped = false;
    }

    public time(t) {
        if (!this._stopped) {
            super.time(t);
        }
    }
}

注意:

jabbany commented 6 years ago

hmm,看起来没有回复就先关掉这个了。如果有问题欢迎再开。