Dart DocumentationstagexlTransitionFunction

TransitionFunction class

The TransitionFunction class provides common transition functions used by the Transition and Tween classes. The signature of those functions is declared in EaseFunction.

Overview of all available transition types: https://www.stagexl.org/docs/transitions.html

class TransitionFunction {

 // Standard

 static Random _random = new Random();

 static num linear(num ratio) {
   return ratio;
 }

 static num sine(num ratio) {
   return 0.5 - 0.5 * cos(ratio * 2.0 * PI) ;
 }

 static num cosine(num ratio) {
   return 0.5 + 0.5 * cos(ratio * 2.0 * PI);
 }

 static num random(num ratio) {
   if (ratio == 0.0 || ratio == 1.0) return ratio;
   return _random.nextDouble();
 }

 static EaseFunction custom(num amount) {
   if (amount < -1) amount = -1;
   if (amount > 1) amount = 1;

   num easing(num t) {
     if (amount==0) return t;
     if (amount<0) return t*(t*-amount+1+amount);
     return t*((2-t)*amount+(1-amount));
   }
   return easing;
 }

 // Quadratic

 static num easeInQuadratic(num ratio) {
   return ratio * ratio;
 }

 static num easeOutQuadratic(num ratio) {
   ratio = 1.0 - ratio;
   return 1.0 - ratio * ratio;
 }

 static num easeInOutQuadratic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInQuadratic(ratio) : 0.5 * easeOutQuadratic(ratio - 1.0) + 0.5;
 }

 static num easeOutInQuadratic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutQuadratic(ratio) : 0.5 * easeInQuadratic(ratio - 1.0) + 0.5;
 }

 // Cubic

 static num easeInCubic(num ratio) {
   return ratio * ratio * ratio;
 }

 static num easeOutCubic(num ratio) {
   ratio = 1.0 - ratio;
   return 1.0 - ratio * ratio * ratio;
 }

 static num easeInOutCubic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInCubic(ratio) : 0.5 * easeOutCubic(ratio - 1.0) + 0.5;
 }

 static num easeOutInCubic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutCubic(ratio) : 0.5 * easeInCubic(ratio - 1.0) + 0.5;
 }

 // Quartic

 static num easeInQuartic(num ratio) {
   return ratio * ratio * ratio * ratio;
 }

 static num easeOutQuartic(num ratio) {
   ratio = 1.0 - ratio;
   return 1.0 - ratio * ratio * ratio * ratio;
 }

 static num easeInOutQuartic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInQuartic(ratio) : 0.5 * easeOutQuartic(ratio - 1.0) + 0.5;
 }

 static num easeOutInQuartic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutQuartic(ratio) : 0.5 * easeInQuartic(ratio - 1.0) + 0.5;
 }

 // Quintic

 static num easeInQuintic(num ratio) {
   return ratio * ratio * ratio * ratio * ratio;
 }

 static num easeOutQuintic(num ratio) {
   ratio = 1.0 - ratio;
   return 1.0 - ratio * ratio * ratio * ratio * ratio;
 }

 static num easeInOutQuintic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInQuintic(ratio) : 0.5 * easeOutQuintic(ratio - 1.0) + 0.5;
 }

 static num easeOutInQuintic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutQuintic(ratio) : 0.5 * easeInQuintic(ratio - 1.0) + 0.5;
 }

 // Circular

 static num easeInCircular(num ratio) {
   return 1.0 - sqrt(1.0 - ratio * ratio);
 }

 static num easeOutCircular(num ratio) {
   ratio = 1.0 - ratio;
   return sqrt(1.0 - ratio * ratio);
 }

 static num easeInOutCircular(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInCircular(ratio) : 0.5 * easeOutCircular(ratio - 1.0) + 0.5;
 }

 static num easeOutInCircular(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutCircular(ratio) : 0.5 * easeInCircular(ratio - 1.0) + 0.5;
 }

 // Sine

 static num easeInSine(num ratio) {
   return 1.0 - cos(ratio * (PI / 2.0));
 }

 static num easeOutSine(num ratio) {
   return sin(ratio * (PI / 2.0));
 }

 static num easeInOutSine(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInSine(ratio) : 0.5 * easeOutSine(ratio - 1.0) + 0.5;
 }

 static num easeOutInSine(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutSine(ratio) : 0.5 * easeInSine(ratio - 1.0) + 0.5;
 }

 // Exponential

 static num easeInExponential(num ratio) {
   if (ratio == 0.0) return 0.0;
   return pow(2.0, 10.0 * (ratio - 1.0));
 }

 static num easeOutExponential(num ratio) {
   if (ratio == 1.0) return 1.0;
   return 1.0 - pow(2.0, - 10.0 * ratio);
 }

 static num easeInOutExponential(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInExponential(ratio) : 0.5 * easeOutExponential(ratio - 1.0) + 0.5;
 }

 static num easeOutInExponential(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutExponential(ratio) : 0.5 * easeInExponential(ratio - 1.0) + 0.5;
 }

 // Back

 static num easeInBack(num ratio) {
   num s = 1.70158;
   return ratio * ratio * ((s + 1.0) * ratio - s);
 }

 static num easeOutBack(num ratio) {
   num s = 1.70158;
   ratio = ratio - 1.0;
   return ratio * ratio * ((s + 1.0) * ratio + s) + 1.0;
 }

 static num easeInOutBack(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInBack(ratio) : 0.5 * easeOutBack(ratio - 1.0) + 0.5;
 }

 static num easeOutInBack(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutBack(ratio) : 0.5 * easeInBack(ratio - 1.0) + 0.5;
 }

 // Elastic

 static num easeInElastic(num ratio) {
   if (ratio == 0.0 || ratio == 1.0) return ratio;
   ratio = ratio - 1.0;
   return - pow(2.0, 10.0 * ratio) * sin((ratio - 0.3 / 4.0) * (2.0 * PI) / 0.3) ;
 }

 static num easeOutElastic(num ratio) {
   if (ratio == 0.0 || ratio == 1.0) return ratio;
   return pow(2.0, - 10.0 * ratio) * sin((ratio - 0.3 / 4.0) * (2.0 * PI) / 0.3) + 1;
 }

 static num easeInOutElastic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInElastic(ratio) : 0.5 * easeOutElastic(ratio - 1.0) + 0.5;
 }

 static num easeOutInElastic(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutElastic(ratio) : 0.5 * easeInElastic(ratio - 1.0) + 0.5;
 }

 // Bounce

 static num easeInBounce(num ratio) {
   return 1.0 - easeOutBounce(1.0 - ratio);
 }

 static num easeOutBounce(num ratio) {
   if (ratio < 1 / 2.75) {
     return 7.5625 * ratio * ratio;
   } else if (ratio < 2 / 2.75) {
     ratio = ratio - 1.5 / 2.75;
     return 7.5625 * ratio * ratio + 0.75;
   } else if (ratio < 2.5 / 2.75) {
     ratio = ratio - 2.25 / 2.75;
     return 7.5625 * ratio * ratio + 0.9375;
   } else {
     ratio = ratio - 2.625 / 2.75;
     return 7.5625 * ratio * ratio + 0.984375;
   }
 }

 static num easeInOutBounce(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeInBounce(ratio) : 0.5 * easeOutBounce(ratio - 1.0) + 0.5;
 }

 static num easeOutInBounce(num ratio) {
   ratio = ratio * 2.0;
   return (ratio < 1.0) ? 0.5 * easeOutBounce(ratio) : 0.5 * easeInBounce(ratio - 1.0) + 0.5;
 }

}

Static Methods

num linear(num ratio) #

static num linear(num ratio) {
 return ratio;
}

num sine(num ratio) #

static num sine(num ratio) {
 return 0.5 - 0.5 * cos(ratio * 2.0 * PI) ;
}

num cosine(num ratio) #

static num cosine(num ratio) {
 return 0.5 + 0.5 * cos(ratio * 2.0 * PI);
}

num random(num ratio) #

static num random(num ratio) {
 if (ratio == 0.0 || ratio == 1.0) return ratio;
 return _random.nextDouble();
}

EaseFunction custom(num amount) #

static EaseFunction custom(num amount) {
 if (amount < -1) amount = -1;
 if (amount > 1) amount = 1;

 num easing(num t) {
   if (amount==0) return t;
   if (amount<0) return t*(t*-amount+1+amount);
   return t*((2-t)*amount+(1-amount));
 }
 return easing;
}

num easeInQuadratic(num ratio) #

static num easeInQuadratic(num ratio) {
 return ratio * ratio;
}

num easeOutQuadratic(num ratio) #

static num easeOutQuadratic(num ratio) {
 ratio = 1.0 - ratio;
 return 1.0 - ratio * ratio;
}

num easeInOutQuadratic(num ratio) #

static num easeInOutQuadratic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInQuadratic(ratio) : 0.5 * easeOutQuadratic(ratio - 1.0) + 0.5;
}

num easeOutInQuadratic(num ratio) #

static num easeOutInQuadratic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutQuadratic(ratio) : 0.5 * easeInQuadratic(ratio - 1.0) + 0.5;
}

num easeInCubic(num ratio) #

static num easeInCubic(num ratio) {
 return ratio * ratio * ratio;
}

num easeOutCubic(num ratio) #

static num easeOutCubic(num ratio) {
 ratio = 1.0 - ratio;
 return 1.0 - ratio * ratio * ratio;
}

num easeInOutCubic(num ratio) #

static num easeInOutCubic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInCubic(ratio) : 0.5 * easeOutCubic(ratio - 1.0) + 0.5;
}

num easeOutInCubic(num ratio) #

static num easeOutInCubic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutCubic(ratio) : 0.5 * easeInCubic(ratio - 1.0) + 0.5;
}

num easeInQuartic(num ratio) #

static num easeInQuartic(num ratio) {
 return ratio * ratio * ratio * ratio;
}

num easeOutQuartic(num ratio) #

static num easeOutQuartic(num ratio) {
 ratio = 1.0 - ratio;
 return 1.0 - ratio * ratio * ratio * ratio;
}

num easeInOutQuartic(num ratio) #

static num easeInOutQuartic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInQuartic(ratio) : 0.5 * easeOutQuartic(ratio - 1.0) + 0.5;
}

num easeOutInQuartic(num ratio) #

static num easeOutInQuartic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutQuartic(ratio) : 0.5 * easeInQuartic(ratio - 1.0) + 0.5;
}

num easeInQuintic(num ratio) #

static num easeInQuintic(num ratio) {
 return ratio * ratio * ratio * ratio * ratio;
}

num easeOutQuintic(num ratio) #

static num easeOutQuintic(num ratio) {
 ratio = 1.0 - ratio;
 return 1.0 - ratio * ratio * ratio * ratio * ratio;
}

num easeInOutQuintic(num ratio) #

static num easeInOutQuintic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInQuintic(ratio) : 0.5 * easeOutQuintic(ratio - 1.0) + 0.5;
}

num easeOutInQuintic(num ratio) #

static num easeOutInQuintic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutQuintic(ratio) : 0.5 * easeInQuintic(ratio - 1.0) + 0.5;
}

num easeInCircular(num ratio) #

static num easeInCircular(num ratio) {
 return 1.0 - sqrt(1.0 - ratio * ratio);
}

num easeOutCircular(num ratio) #

static num easeOutCircular(num ratio) {
 ratio = 1.0 - ratio;
 return sqrt(1.0 - ratio * ratio);
}

num easeInOutCircular(num ratio) #

static num easeInOutCircular(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInCircular(ratio) : 0.5 * easeOutCircular(ratio - 1.0) + 0.5;
}

num easeOutInCircular(num ratio) #

static num easeOutInCircular(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutCircular(ratio) : 0.5 * easeInCircular(ratio - 1.0) + 0.5;
}

num easeInSine(num ratio) #

static num easeInSine(num ratio) {
 return 1.0 - cos(ratio * (PI / 2.0));
}

num easeOutSine(num ratio) #

static num easeOutSine(num ratio) {
 return sin(ratio * (PI / 2.0));
}

num easeInOutSine(num ratio) #

static num easeInOutSine(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInSine(ratio) : 0.5 * easeOutSine(ratio - 1.0) + 0.5;
}

num easeOutInSine(num ratio) #

static num easeOutInSine(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutSine(ratio) : 0.5 * easeInSine(ratio - 1.0) + 0.5;
}

num easeInExponential(num ratio) #

static num easeInExponential(num ratio) {
 if (ratio == 0.0) return 0.0;
 return pow(2.0, 10.0 * (ratio - 1.0));
}

num easeOutExponential(num ratio) #

static num easeOutExponential(num ratio) {
 if (ratio == 1.0) return 1.0;
 return 1.0 - pow(2.0, - 10.0 * ratio);
}

num easeInOutExponential(num ratio) #

static num easeInOutExponential(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInExponential(ratio) : 0.5 * easeOutExponential(ratio - 1.0) + 0.5;
}

num easeOutInExponential(num ratio) #

static num easeOutInExponential(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutExponential(ratio) : 0.5 * easeInExponential(ratio - 1.0) + 0.5;
}

num easeInBack(num ratio) #

static num easeInBack(num ratio) {
 num s = 1.70158;
 return ratio * ratio * ((s + 1.0) * ratio - s);
}

num easeOutBack(num ratio) #

static num easeOutBack(num ratio) {
 num s = 1.70158;
 ratio = ratio - 1.0;
 return ratio * ratio * ((s + 1.0) * ratio + s) + 1.0;
}

num easeInOutBack(num ratio) #

static num easeInOutBack(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInBack(ratio) : 0.5 * easeOutBack(ratio - 1.0) + 0.5;
}

num easeOutInBack(num ratio) #

static num easeOutInBack(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutBack(ratio) : 0.5 * easeInBack(ratio - 1.0) + 0.5;
}

num easeInElastic(num ratio) #

static num easeInElastic(num ratio) {
 if (ratio == 0.0 || ratio == 1.0) return ratio;
 ratio = ratio - 1.0;
 return - pow(2.0, 10.0 * ratio) * sin((ratio - 0.3 / 4.0) * (2.0 * PI) / 0.3) ;
}

num easeOutElastic(num ratio) #

static num easeOutElastic(num ratio) {
 if (ratio == 0.0 || ratio == 1.0) return ratio;
 return pow(2.0, - 10.0 * ratio) * sin((ratio - 0.3 / 4.0) * (2.0 * PI) / 0.3) + 1;
}

num easeInOutElastic(num ratio) #

static num easeInOutElastic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInElastic(ratio) : 0.5 * easeOutElastic(ratio - 1.0) + 0.5;
}

num easeOutInElastic(num ratio) #

static num easeOutInElastic(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutElastic(ratio) : 0.5 * easeInElastic(ratio - 1.0) + 0.5;
}

num easeInBounce(num ratio) #

static num easeInBounce(num ratio) {
 return 1.0 - easeOutBounce(1.0 - ratio);
}

num easeOutBounce(num ratio) #

static num easeOutBounce(num ratio) {
 if (ratio < 1 / 2.75) {
   return 7.5625 * ratio * ratio;
 } else if (ratio < 2 / 2.75) {
   ratio = ratio - 1.5 / 2.75;
   return 7.5625 * ratio * ratio + 0.75;
 } else if (ratio < 2.5 / 2.75) {
   ratio = ratio - 2.25 / 2.75;
   return 7.5625 * ratio * ratio + 0.9375;
 } else {
   ratio = ratio - 2.625 / 2.75;
   return 7.5625 * ratio * ratio + 0.984375;
 }
}

num easeInOutBounce(num ratio) #

static num easeInOutBounce(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeInBounce(ratio) : 0.5 * easeOutBounce(ratio - 1.0) + 0.5;
}

num easeOutInBounce(num ratio) #

static num easeOutInBounce(num ratio) {
 ratio = ratio * 2.0;
 return (ratio < 1.0) ? 0.5 * easeOutBounce(ratio) : 0.5 * easeInBounce(ratio - 1.0) + 0.5;
}