GWT 动画在从 websocket 调用时是否运行

Do GWT Animations operate when they are called from a websocket?

本文关键字:是否 运行 调用 websocket 动画 GWT      更新时间:2023-09-26

我试图让 GWT 动画从大气 websocket 回调中工作,但动画似乎从未开始。

这是我的动画代码。

public class SearchViewAnimation extends Animation
{
    private final Element element;
    private int startX;
    private int startY;
    private int finalX;
    private int finalY;
    public SearchViewAnimation(Element element)
    {
        this.element = element;
    }
    public void scrollTo(int x, int y, int milliseconds)
    {
        this.finalX = x;
        this.finalY = y;
        startX = element.getOffsetLeft();
        startY = element.getOffsetTop();
        run(milliseconds);
    }
    @Override
    protected void onUpdate(double progress)
    {
        double positionX = startX + (progress * (this.finalX - startX));
        double positionY = startY + (progress * (this.finalY - startY));
        this.element.getStyle().setLeft(positionX, Style.Unit.PX);
        this.element.getStyle().setTop(positionY, Style.Unit.PX);
    }
    @Override
    protected void onComplete()
    {
        super.onComplete();
        this.element.getStyle().setLeft(this.finalX, Style.Unit.PX);
        this.element.getStyle().setTop(this.finalY, Style.Unit.PX);
    }
}

这是我用来调用它的代码...

public class SearchViewImpl extends Composite implements ISearchView {
    private static SearchViewImplUiBinder uiBinder = GWT
            .create(SearchViewImplUiBinder.class);
    @UiField AbsolutePanel Panel;
    interface SearchViewImplUiBinder extends UiBinder<Widget, SearchViewImpl> {
    }
    public SearchViewImpl() {
        initWidget(uiBinder.createAndBindUi(this));
    }
    @Override
    public void setNewUser(IUser user) {
        SearchElementImpl elem = new SearchElementImpl();
        elem.setUser(user);
        Panel.add(elem);
        SearchViewAnimation animation = new SearchViewAnimation(elem.getElement());
        animation.scrollTo(500, 500, 5000); 
    }
}

fn setNewUser 是从大气 websocket 回调中调用的,大约每十秒左右执行一次,但是动画似乎从未真正在页面上移动,正如我希望它也通过 scrollTo fn 移动一样。 我已经在一个小型 GWT 测试项目中对其进行了测试,动画似乎在没有 websocket 的情况下工作正常。 Web 套接字是否会影响 GWT 代码中动画的使用,如果是这样,有谁知道如何让 websocket 实际影响某些动画?

所以事实证明,出于某种原因,你需要有

        Panel.setSize("500px", "500px");
        Panel.addStyleName("absolutePanel");

设置动画工作的位置。

有谁知道..A. 如何将绝对面板的大小设置为其包含面板的大小b.为什么需要在绝对面板上设置样式才能使动画工作?