AE markers tweens

Use tweens of properties's layer with markers in After Effect.

Multiples interpolations to a property.

List of tween's transitions

Documentation

Add marker (alt + * ) add properties of marker:

tfs1Value as same dimensions thant the property of the layer:

Script

m = thisLayer.marker;
var tweens = initTweens();


/*

  Add marker (alt + * )
  add properties of marker:

  - tfs1Value    50,50
  - tfs1Time    2
  - tfs1Tween    easeInOutExpo

  tfs1Value as same dimensions thant the property of the layer :

  - opacity: 1 dimension
    tfs1Value    100

  - scale: 2 dimensions
    tfs1Value    100,100

  - position 3d: 3 dimensions
    tfs1Value    600,10,-25

*/

// CALCULATIONS


var depth = ( thisProperty.value == Number(thisProperty.value) ) ? 1 : thisProperty.value.length;

if ( time < m.key(1).time ) thisProperty.value;
else
{

  for( var i=0; i < m.numKeys; i++ )
  {

    var lastValue = getTotalArrayValueByItem( i );
    tTemp = time - (m.key(i+1).time);


    if ( time < ( m.key(i+1).time +
Number(m.key(i+1).parameters["tfs1Time"]) ) )
    {

      var finalValue = [];
      var nextValue = getTotalArrayValueByItem( i+1 );

      for ( j = 0; j < depth; j++ ) finalValue[j] = tweens[m.key(i+1).parameters["tfs1Tween"]]( tTemp, Number(lastValue[j]), Number(nextValue[j]) - Number(lastValue[j]), Number(m.key(i+1).parameters["tfs1Time"]) );


      if (depth < 2)   finalValue[0];
      else       finalValue;


      break;
    }

    nextTime = (i + 1< m.numKeys) ? m.key(i+2).time : outPoint;
    if ( time < nextTime  )
    {
      var finalValue = getTotalArrayValueByItem( i+1 );

      if (depth < 2)   finalValue[0];
      else       finalValue;

      break;
    }

  }
}

function getTotalArrayValueByItem( idItem )
{

  m = thisLayer.marker;


  var depth = ( thisProperty.value == Number(thisProperty.value) ) ? 1 :
thisProperty.value.length;


  var val0 = (depth<2) ? [ thisProperty.value ] : thisProperty.value;
  val1 = new Array();
  for ( var i = 0; i < depth; i++ ) val1[i] = val0[i];


  for ( i = 1; i <= idItem; i++ )
  {
    markVal = (depth<2) ? [ m.key(i).parameters["tfs1Value"] ] : m.key(i).parameters["tfs1Value"].split(",");


    while ( markVal.length < depth ) markVal.push( 0 );



    for ( var j = 0; j < depth; j++ ) val1[j] = markVal[j];    

  }



  return val1;
}




// TWEENS

function initTweens()
{

  var tweens = [];
  tweens["easeNone"] = easeNone;
  tweens["easeInQuad"] = easeInQuad;
  tweens["easeInOutQuad"] = easeInOutQuad;
  tweens["easeInCubic"] = easeInCubic;
  tweens["easeOutCubic"] = easeOutCubic;
  tweens["easeInOutCubic"] = easeInOutCubic;
  tweens["easeOutInCubic"] = easeOutInCubic;
  tweens["easeInQuart"] = easeInQuart;
  tweens["easeOutQuart"] = easeOutQuart;
  tweens["easeInOutQuart"] = easeInOutQuart;
  tweens["easeOutInQuart"] = easeOutInQuart;
  tweens["easeOutQuart"] = easeOutQuart;
  tweens["easeInQuint"] = easeInQuint;
  tweens["easeOutQuint"] = easeOutQuint;
  tweens["easeInOutQuint"] = easeInOutQuint;
  tweens["easeOutInQuint"] = easeOutInQuint;
  tweens["easeInSine"] = easeInSine;
  tweens["easeOutSine"] = easeOutSine;
  tweens["easeInOutSine"] = easeInOutSine;
  tweens["easeOutInSine"] = easeOutInSine;
  tweens["easeInExpo"] = easeInExpo;
  tweens["easeOutExpo"] = easeOutExpo;
  tweens["easeInOutExpo"] = easeInOutExpo;
  tweens["easeOutInExpo"] = easeOutInExpo;
  tweens["easeInCirc"] = easeInCirc;
  tweens["easeOutCirc"] = easeOutCirc;
  tweens["easeInOutCirc"] = easeInOutCirc;
  tweens["easeOutInCirc"] = easeOutInCirc;
  tweens["easeInElastic"] = easeInElastic;
  tweens["easeOutElastic"] = easeOutElastic;
  tweens["easeInOutElastic"] = easeInOutElastic;
  tweens["easeOutInElastic"] = easeOutInElastic;
  tweens["easeInBack"] = easeInBack;
  tweens["easeOutBack"] = easeOutBack;
  tweens["easeInOutBack"] = easeInOutBack;
  tweens["easeOutInBack"] = easeOutInBack;
  tweens["easeInBounce"] = easeInBounce;
  tweens["easeOutBounce"] = easeOutBounce;
  tweens["easeInOutBounce"] = easeInOutBounce;
  tweens["easeOutInBounce"] = easeOutInBounce;
  return tweens;
}


function easeNone(t, b, c, d)
{
  return c*t/d + b;
}  
function easeInQuad(t, b, c, d)
{
  return c*(t/=d)*t + b;
}
function easeOutQuad(t, b, c, d)
{
  return -c *(t/=d)*(t-2) + b;
}
function easeInOutQuad(t, b, c, d)
{
  if((t/=d/2) < 1) return c/2*t*t + b;
  return -c/2 *((--t)*(t-2) - 1) + b;
}  
function easeInCubic(t, b, c, d)
{
  return c*(t/=d)*t*t + b;
}  
function easeOutCubic(t, b, c, d)
{
  return c*((t=t/d-1)*t*t + 1) + b;
}  
function easeInOutCubic(t, b, c, d)
{
  if((t/=d/2) < 1) return c/2*t*t*t + b;
  return c/2*((t-=2)*t*t + 2) + b;
}  
function easeOutInCubic(t, b, c, d)
{
  if(t < d/2) return easeOutCubic(t*2, b, c/2, d);
  return easeInCubic((t*2)-d, b+c/2, c/2, d);
}
function easeInQuart(t, b, c, d)
{
  return c*(t/=d)*t*t*t + b;
}  
function easeOutQuart(t, b, c, d)
{
  return -c *((t=t/d-1)*t*t*t - 1) + b;
}  
function easeInOutQuart(t, b, c, d)
{
  if((t/=d/2) < 1) return c/2*t*t*t*t + b;
  return -c/2 *((t-=2)*t*t*t - 2) + b;
}    
function easeOutInQuart(t, b, c, d)
{
  if(t < d/2) return easeOutQuart(t*2, b, c/2, d);
  return easeInQuart((t*2)-d, b+c/2, c/2, d);
}
function easeInQuint(t, b, c, d)
{
  return c*(t/=d)*t*t*t*t + b;
}    
function easeOutQuint(t, b, c, d)
{
  return c*((t=t/d-1)*t*t*t*t + 1) + b;
}    
function easeInOutQuint(t, b, c, d)
{
  if((t/=d/2) < 1) return c/2*t*t*t*t*t + b;
  return c/2*((t-=2)*t*t*t*t + 2) + b;
}    
function easeOutInQuint(t, b, c, d)
{
  if(t < d/2) return easeOutQuint(t*2, b, c/2, d);
  return easeInQuint((t*2)-d, b+c/2, c/2, d);
}    
function easeInSine(t, b, c, d)
{
  return -c * Math.cos(t/d *(Math.PI/2)) + c + b;
}    
function easeOutSine(t, b, c, d)
{
  return c * Math.sin(t/d *(Math.PI/2)) + b;
}    
function easeInOutSine(t, b, c, d)
{
  return -c/2 *(Math.cos(Math.PI*t/d) - 1) + b;
}    
function easeOutInSine(t, b, c, d)
{
  if(t < d/2) return easeOutSine(t*2, b, c/2, d);
  return easeInSine((t*2)-d, b+c/2, c/2, d);
}    
function easeInExpo(t, b, c, d)
{
  return(t==0) ? b : c * Math.pow(2, 10 *(t/d - 1)) + b - c * 0.001;
}    
function easeOutExpo(t, b, c, d)
{
  return(t==d) ? b+c : c * 1.001 *(-Math.pow(2, -10 * t/d) + 1) + b;
}    
function easeInOutExpo(t, b, c, d)
{
  if(t==0) return b;
  if(t==d) return b+c;
  if((t/=d/2) < 1) return c/2 * Math.pow(2, 10 *(t - 1)) + b - c * 0.0005;
  return c/2 * 1.0005 *(-Math.pow(2, -10 * --t) + 2) + b;
}    
function easeOutInExpo(t, b, c, d)
{
  if(t < d/2) return easeOutExpo(t*2, b, c/2, d);
  return easeInExpo((t*2)-d, b+c/2, c/2, d);
}    
function easeInCirc(t, b, c, d)
{
  return -c *(Math.sqrt(1 -(t/=d)*t) - 1) + b;
}    
function easeOutCirc(t, b, c, d)
{
  return c * Math.sqrt(1 -(t=t/d-1)*t) + b;
}    
function easeInOutCirc(t, b, c, d)
{
  if((t/=d/2) < 1) return -c/2 *(Math.sqrt(1 - t*t) - 1) + b;
  return c/2 *(Math.sqrt(1 -(t-=2)*t) + 1) + b;
}    
function easeOutInCirc(t, b, c, d)
{
  if(t < d/2) return easeOutCirc(t*2, b, c/2, d);
  return easeInCirc((t*2)-d, b+c/2, c/2, d);
}    
function easeInElastic(t, b, c, d, a, p)
{
  var s;
  if(t==0) return b;  if((t/=d)==1) return b+c;  if(!p) p=d*.3;
  if(!a || a < Math.abs(c)) { a=c; s=p/4; } else s = p/(2*Math.PI) *
Math.asin(c/a);
  return -(a*Math.pow(2,10*(t-=1)) * Math.sin((t*d-s)*(2*Math.PI)/p )) + b;
}    
function easeOutElastic(t, b, c, d, a, p)
{
  var s;
  if(t==0) return b;  if((t/=d)==1) return b+c;  if(!p) p=d*.3;
  if(!a || a < Math.abs(c)) { a=c; s=p/4; } else s = p/(2*Math.PI) *
Math.asin(c/a);
  return(a*Math.pow(2,-10*t) * Math.sin((t*d-s)*(2*Math.PI)/p ) + c + b);
}    
function easeInOutElastic(t, b, c, d, a, p)
{
  var s;
  if(t==0) return b;  if((t/=d/2)==2) return b+c;  if(!p) p=d*(.3*1.5);
  if(!a || a < Math.abs(c)) { a=c; s=p/4; }       else s = p/(2*Math.PI) *
Math.asin(c/a);
  if(t < 1) return -.5*(a*Math.pow(2,10*(t-=1)) *
Math.sin((t*d-s)*(2*Math.PI)/p )) + b;
  return a*Math.pow(2,-10*(t-=1)) * Math.sin((t*d-s)*(2*Math.PI)/p )*.5 +
c + b;
}    
function easeOutInElastic(t, b, c, d, a, p)
{
  if(t < d/2) return easeOutElastic(t*2, b, c/2, d, a, p);
  return easeInElastic((t*2)-d, b+c/2, c/2, d, a, p);
}    
function easeInBack(t, b, c, d, s)
{
  if(s == undefined) s = 1.70158;
  return c*(t/=d)*t*((s+1)*t - s) + b;
}    
function easeOutBack(t, b, c, d, s)
{
  if(s == undefined) s = 1.70158;
  return c*((t=t/d-1)*t*((s+1)*t + s) + 1) + b;
}    
function easeInOutBack(t, b, c, d, s)
{
  if(s == undefined) s = 1.70158;
  if((t/=d/2) < 1) return c/2*(t*t*(((s*=(1.525))+1)*t - s)) + b;
  return c/2*((t-=2)*t*(((s*=(1.525))+1)*t + s) + 2) + b;
}    
function easeOutInBack(t, b, c, d, s)
{
  if(t < d/2) return easeOutBack(t*2, b, c/2, d, s);
  return easeInBack((t*2)-d, b+c/2, c/2, d, s);
}    
function easeInBounce(t, b, c, d)
{
  return c - easeOutBounce(d-t, 0, c, d) + b;
}    
function easeOutBounce(t, b, c, d)
{
  if((t/=d) <(1/2.75)) {
    return c*(7.5625*t*t) + b;
  } else if(t <(2/2.75)) {
    return c*(7.5625*(t-=(1.5/2.75))*t + .75) + b;
  } else if(t <(2.5/2.75)) {
    return c*(7.5625*(t-=(2.25/2.75))*t + .9375) + b;
  } else {
    return c*(7.5625*(t-=(2.625/2.75))*t + .984375) + b;
  }
}    
function easeInOutBounce(t, b, c, d)
{
  if(t < d/2) return easeInBounce(t*2, 0, c, d) * .5 + b;
  else return easeOutBounce(t*2-d, 0, c, d) * .5 + c*.5 + b;
}    
function easeOutInBounce(t, b, c, d)
{
  if(t < d/2) return easeOutBounce(t*2, b, c/2, d);
  return easeInBounce((t*2)-d, b+c/2, c/2, d);
}