在 K-Frame (VR) 中模拟 CSS 关键帧动画

Mocking CSS key frame animation in K-Frame (VR)

我想在单个实体(例如:a-circle) which would run one after another, using K-Frame)的单个 属性(例如:比例)上创建动画。这可能吗?

例如,这是一个简单的案例:

<a-scene>
  <a-circle 
    position="0 1.25 -5" 
    color="#F55" 
    radius="1" 
    scale=".1 .1 1"
    animation__scale="property: scale; dir: normal; dur: 500; easing: easeInSine; loop: true; to: 1 1 1"
  >
  </a-circle>
</a-scene>

比如说,我想在前 500 毫秒内从 .1 .1 1 缩放到 .5 .5 1,然后再保持 .5 .5 1 500 毫秒,然后返回到 .1 .1 1在接下来的 200 毫秒内,然后无限地循环整个过程。

这可能吗?

您可以在一个组件内以菊花链方式连接动画,检查哪个动画结束并开始下一个动画。
在您的情况下,这将是

动画 1 结束 -> 等待 500 毫秒并开始动画 2 -> 动画 2 结束 -> 等待 200 毫秒并开始动画 1。


您可以通过简单地监听 animation__[ID]-complete 事件并发出另一个事件来实现这一点。
如果你只是链接它们,你可以在开始事件列表上映射多个监听器。
但是你想给他们一些自定义的等待时间,可以包含在映射函数中,或者手动完成:

  el.addEventListener('animation__scale1-complete', function() {
    setTimeout(function(){
    el.emit('secondAnimation');
    },500);
  })
   el.addEventListener('animation__scale2-complete', function() {
    setTimeout(function(){
    el.emit('firstAnimation');
    },200);
  })

在这里 fiddle 工作:https://jsfiddle.net/gftruj/2qoz8b75/2/
请注意,我也会在 loaded 事件上触发第一个动画,以防它在加载之前触发。