For example, by using camera rig, I want to move from A to B then B to C in just one single click. I normally write “to 0 0 0” in the event “onclick”.
I want trigger both animations “1” and “1_1”. At the moment it is only the “1_1” that is triggered by a click. I’m using a timeline from https://www.npmjs.com/package/aframe-animation-timeline-component
My code can be found in https://glitch.com/edit/#!/winter-deserted-topaz
Advertisement
Answer
The topic is general, so I’ll split it into separate cases:
Firing two simultaneous animations
If the animation components within an entity share an event ( defined in startEvents ) they will all fire at once:
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script> <a-scene cursor="rayOrigin: mouse"> <a-box position="0 1 -3" rotation="0 45 0" scale="0.25 0.25 0.25" color="#4CC3D9" animation__rotation="property: rotation; from: 0 45 0; to: 0 405 0; dur: 4000; easing: linear; startEvents: click" animation__scale="property: scale; from: 0.25 0.25 0.25; to: 1.5 1.5 1.5; dur: 2000; dir: alternate; easing: linear; loop: 2; startEvents: click"> </a-box> </a-scene>
Starting an animation after another one is finished
You can wait for one animation to finish and start another one with a bit of javascript.
You can determine if an animation has ended with the animationcomplete__(ID is the ‘name’ string after the animation__ bit) event.
Then you can emit a signal, which starts the second animation:
<script src="https://aframe.io/releases/1.2.0/aframe.min.js"></script> <script> AFRAME.registerComponent("animation-manager", { init: function() { // wait for the first animation to finish this.el.addEventListener("animationcomplete__first", e => { // start the second animation this.el.emit("second") }) } }) </script> <a-scene cursor="rayOrigin: mouse"> <a-box position="0 1 -3" rotation="0 45 0" scale="0.25 0.25 0.25" animation-manager color="#4CC3D9" animation__first="property: rotation; from: 0 45 0; to: 0 405 0; dur: 2000; easing: linear; startEvents: click" animation__second="property: scale; from: 0.25 0.25 0.25; to: 1.5 1.5 1.5; dur: 2000; dir: alternate; easing: linear; loop: 2; startEvents: second"> </a-box> </a-scene>