Timing of Transitions - taccGL™ Tutorial
Duration and Start
For each transition you can select a duration using the duration method (or its abbeviated name dur)
and a starting time using startTime. Default duration is 1 second and default startTime 0 (or the present
time if an animation is running already).
Two transitions can be done in a sequence (as in the 3rd example below) setting the
start time of the second transition to the start time of the first transition plus its duration.
Two Transition can be done (partially) simultaneously, if the second transition starts
at a time the first transition is running (or vice versa), as in the fourth example below.
taccgl.actor("testimg").to ({el:"eb1"}). dur(0.9). start(); | RUN |
taccgl.actor("testimg").to ({el:"eb1"}). dur(3). start(); | RUN |
taccgl.actor("testimg").to ({el:"eb1"}). dur(0.9). start(); taccgl.actor("testimg").from({el:"eb1"}). to (200,200,0). dur(2). startTime (0.9). start(); taccgl.actor("testimg").from(200,200,0). to ({el:"eb1"}). startTime(2.9). dur(1.3). start(); | RUN |
taccgl.actor("testimg").to ({el:"eb1"}). dur(3). start(); taccgl.actor("logoimg").to ({el:"eb1",ey:1,oy:90}). dur(1.5) . startTime (1.5) .start(); | RUN |
It is well possible to have multiple transitions referring to the same HTML element,
either to make the element perform multiple visual effects sequentially or
to display it multiple times simultanously
taccgl.actor("testimg").to({el:"eb2"}). duration(2). start(); taccgl.actor("testimg"). from({el:"eb2"}). duration(2). startTime(2) .start(); | RUN |
taccgl.actor("testimg") .position({el:"eb2",z:-500}) .duration(2) .start(); taccgl.actor("testimg") .position({el:"eb2",z:-500}) .rotateMiddle(0,1,0) .rotatePart(Math.PI/2,Math.PI/2) .duration(2) .start(); | RUN |
<div id="examplediv2" style="float:right; margin-left:10px; padding:10px; width:150px; height:150px; border:1px solid black; font-size:12px;">
Test DIV with example text.
</div>
In the next sections below and in (Continuations) you will learn easier ways
to connect various transitions rather than explicitly setting startTime as discussed above.
Note that it is also possible to perform multiple visual effects on the same actor
within a single transition, such as a linear motion and a rotation or a motion and a blend.
Start time and duration must be identical for all the simultaneous visual effects.
taccgl.actor("examplediv2").to(0,2000,0). rotateMiddle(0,1,0).start(); | RUN |
taccgl.actor("examplediv2").to(0,2000,1000). rotateMiddle(0,0,1).color("green").start(); | RUN |
taccgl.actor("examplediv2").rotateMiddle(0,1,0). color("white","blue").start(); | RUN |
taccgl.actor("examplediv2").color("white","blue"). to({oz:-5000}).rotateMiddle(0,0,1). dur(5). start(); | RUN |
taccgl.actor("examplediv2").resize(null,null,0,0). blend(1,0).start(); | RUN |
Getting Transitions in a Sequence
Using javaScript you can assign a transition to a variable.
Later on you can use that variable to define a new transition, which starts
immediately after the designated transition.
var mystep=taccgl.actor("testimg"). to({el:'ex2'}). dur(3). start(); mystep.actor("testimg"). from({el:'ex2'}). to({el:'ex2',oy:100}). dur(5). start(); mystep.actor("logoimg"). to({el:'ex2'}). dur(4) . start(); | RUN |
Note that the second and third line of the example use mystep.actor instead of taccgl.actor.
The method mystep.actor (actor) works almost as taccgl.actor but starts
the transition immediately after mystep. The a method works accordingly.
showAfter and showBefore
In the first version of the next example the logoimg
vanishes for a short time after before the end of the animation. The
reason is simply that there is no transition showing it. The only
transition showing the logoimg starts at 1 second and takes
1.5 seconds, while animation starts at time 0 and ends
at 3, because the first transition has a duration of 3. Therefore before 1 second and
after 2.5 seconds the logoimg is not shown. A possible solution
is showAfter that shows a transition in its
end position after the animation itself is finished and
showBefore that makes a transition show in its
begin position even before running.
taccgl.actor("testimg").from ({el:"ex1"}).to ({el:"ex2"}). dur(3). start(); taccgl.actor("logoimg").from ({el:"ex1",ry:-1}).to ({el:"ex2",ry:-1}). dur(1.5) . startTime (1) . start(); | RUN |
taccgl.actor("testimg").from ({el:"ex1"}).to ({el:"ex2"}). dur(3). start(); taccgl.actor("logoimg").from ({el:"ex1",ry:-1}).to ({el:"ex2",ry:-1}). dur(1.5) . startTime (1) . showBefore(). showAfter(). start(); | RUN |
Aligning Transition Duration
var mystep=taccgl.actor("ex1").rotateMiddle(1,0,0). start(); var secondstep=mystep.a("ex1").paint().rotateMiddle(0,1,0). dur(1.5) . start(); taccgl.actor("hl2").rotateMiddle(0,1,0). untilaLEo(secondstep) . start(); | RUN |
This example defines two transitions, mystep and secondstep, rotating
"ex1" in different ways. It uses a as previously described
to perform these two transitions after each other. Then it defines a third
transition, rotating ex2, that is supposed to run during mystep and
secondstep. It uses untilaLEo which runs
the third transition at Least until End of transition
"secondstep", i.e. it increases the duration of the third transition until the
end of the "secondstep".
There are various methods like untilaLEo
to express timing relations among transitions, e.g. untilaLBo to
increase duration until the begin of another transition,
untilaMEo decrease duration to end before another transition ends, or
untilaMBo decrease duration to end before another transition begins.
|