aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-12-10 15:32:00 +0100
committerManuel Carrasco Moñino <manuel.carrasco.m@gmail.com>2013-12-10 15:32:00 +0100
commit782f2b7f683cbf859d483140744c5852065aae0c (patch)
treea0af32df063c89b209ec3f7845da231a523b0231
parent6b0b5e9f83a81f314b0bf6219eae66294eea20d2 (diff)
downloadgwtquery-782f2b7f683cbf859d483140744c5852065aae0c.tar.gz
gwtquery-782f2b7f683cbf859d483140744c5852065aae0c.zip
Support for animation delays compatible with GQuery queues
-rw-r--r--gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/Transitions.java41
-rwxr-xr-xgwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/TransitionsAnimation.java4
2 files changed, 25 insertions, 20 deletions
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/Transitions.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/Transitions.java
index c7fe0b9b..ab9209dc 100644
--- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/Transitions.java
+++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/Transitions.java
@@ -19,6 +19,7 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map.Entry;
+import com.google.gwt.core.client.Duration;
import com.google.gwt.dom.client.Element;
import com.google.gwt.dom.client.Style;
import com.google.gwt.query.client.Function;
@@ -167,7 +168,7 @@ public class Transitions extends GQuery {
protected static final String transition = getVendorPropertyName("transition");
// passing an invalid transition property in chrome, makes disable all transitions in the element
- private static final RegExp invalidTransitionNamesRegex = RegExp.compile("^(.*transform.*|duration|easing|clip-.*)$");
+ private static final RegExp invalidTransitionNamesRegex = RegExp.compile("^(.*transform.*|duration|easing|delay|clip-.*)$");
private static final String transitionDelay = getVendorPropertyName("transitionDelay");
private static final String transitionEnd = browser.mozilla || browser.msie ? "transitionend" : (prefix + "transitionEnd");
@@ -251,7 +252,7 @@ public class Transitions extends GQuery {
t.setFromString(prop, value);
getStyleImpl().setStyleProperty(e, transform, t.toString());
}
- } else {
+ } else if (!invalidTransitionNamesRegex.test(prop)){
super.css(prop, value);
}
return this;
@@ -303,7 +304,7 @@ public class Transitions extends GQuery {
.transition("{x: +100, width: +40px}", 2000, EasingCurve.easeOut);
* </pre>
*/
- public Transitions transition(Object stringOrProperties, int duration, Easing easing, int delay, final Function... funcs) {
+ public Transitions transition(Object stringOrProperties, final int duration, final Easing easing, final int delay, final Function... funcs) {
if (isEmpty()) {
return this;
}
@@ -312,34 +313,36 @@ public class Transitions extends GQuery {
? $$((String) stringOrProperties)
: (Properties) stringOrProperties;
- if (easing == null) {
- easing = EasingCurve.ease;
- }
-
- String attribs = duration + "ms" + " " + easing.toString() + " " + delay + "ms";
- List<String> props = filterTransitionPropertyNames(p);
- String value = "";
- for (String s : props) {
- value += (value.isEmpty() ? "" : ", ") + s + " " + attribs;
- }
-
- final String transitionValue = value;
+ final String ease = easing == null ? "ease" : easing.toString();
+ final List<String> props = filterTransitionPropertyNames(p);
+ final double queuedAt = delay > 0 ? Duration.currentTimeMillis() : 0;
// Use gQuery queue, so as we can chain transitions, animations etc.
queue(new Function(){
public void f() {
// This is called once per element
- final String old = $(this).css(transition);
+ final String oldTransitionValue = $(this).css(transition);
+ // Recompute delay based on the time spent in the queue
+ double d = Math.max(0, delay - (int)(Duration.currentTimeMillis() - queuedAt));
+ // Generate transition value
+ String attribs = duration + "ms" + " " + ease + " " + d + "ms";
+ String newTransitionValue = "";
+ for (String s : props) {
+ newTransitionValue += (newTransitionValue.isEmpty() ? "" : ", ") + s + " " + attribs;
+ }
+
$(this)
// Configure animation using transition property
- .css(transition, transitionValue)
+ .css(transition, newTransitionValue)
// Set all css properties for this transition using the css method in this class
.as(Transitions).css(p)
// Bind to transitionEnd to unlock the queue and restore old transitions
.bind(transitionEnd, new Function(){
public void f(){
- $(this).dequeue().unbind(transitionEnd);
- $(this).css(transition, old);
+ $(this).dequeue()
+ .unbind(transitionEnd)
+ .css(transition, oldTransitionValue)
+ .each(funcs);
}
});
}
diff --git a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/TransitionsAnimation.java b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/TransitionsAnimation.java
index c93e62bf..74353323 100755
--- a/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/TransitionsAnimation.java
+++ b/gwtquery-core/src/main/java/com/google/gwt/query/client/plugins/effects/TransitionsAnimation.java
@@ -186,6 +186,7 @@ public class TransitionsAnimation extends PropertiesAnimation {
}
protected Transitions g;
+ protected int delay = 0;
public TransitionsAnimation(Element elem, Properties p, Function... funcs) {
this(null, elem, p, funcs);
@@ -193,6 +194,7 @@ public class TransitionsAnimation extends PropertiesAnimation {
public TransitionsAnimation(Easing easing, Element elem, Properties p, Function... funcs) {
super(easing, elem, p, funcs);
+ delay = p.getInt("delay");
g = $(e).as(Transitions.Transitions);
}
@@ -244,7 +246,7 @@ public class TransitionsAnimation extends PropertiesAnimation {
// TODO: Reflow, it seems it is not needed in chrome and FF, check other browsers
// g.css("offsetHeight");
p = getFxProperties(false);
- g.transition(p, duration, easing, 0, new Function(){public void f() {
+ g.transition(p, duration, easing, delay, new Function(){public void f() {
onComplete();
}});
}