Zawsze można napisać niektóre z rodzimych (JavaScript) kod siebie:
public class CssAnimation {
public static native void registerCssCallback(
Element elem, AsyncCallback<Void> callback) /*-{
elem.addEventListener("webkitAnimationEnd", function() {
$entry(@CssAnimation::cssCallback(Lcom/google/gwt/user/client/rpc/AsyncCallback;)(callback));
}, false);
}-*/;
protected static void cssCallback(AsyncCallback<Void> callback) {
callback.onSuccess(null);
}
}
nie próbowałem powyższy kod. Daj mi znać, jeśli działa zgodnie z oczekiwaniami.
Możesz użyć klasy GWT Animation, aby uzyskać ten sam efekt. Na przykład,
new com.google.gwt.animation.client.Animation() {
final com.google.gwt.dom.client.Style es = widget.getElement().getStyle();
@Override
protected void onUpdate(double progress) {
setOpacity(1 - interpolate(progress));
}
private void setOpacity(double opacity) {
es.setProperty("opacity", Double.toString(opacity));
es.setProperty("filter", "alpha(opacity=" + 100 * opacity + ")");
}
@Override
protected void onComplete() {
/* ... run some code when animation completes ... */
}
}.run(2000, 5000);
Ciekawe, nie wiedziałem o tym. Ale zrobienie tego w ten sposób spowoduje animację skryptową, a nie animację CSS, prawda? GWT wciąż nie zna tego wydarzenia. Skryptowane animacje mają pewne wady, jeśli chodzi o płynność działania przy dużym obciążeniu lub na niektórych urządzeniach mobilnych. –
Tak, spowoduje to skryptową animację, która może nie być tak wydajna jak CPU, jak czysta animacja CSS. –
@Kev Byłoby lepiej zachować te dwie odpowiedzi osobno ... Powyższe komentarze odnoszą się do sekcji poniżej linii (rozwiązanie skryptowe). Przyjęta odpowiedź to tylko górna część powyżej linii, która opisuje zupełnie inne podejście. –