2017-02-21 32 views
0

我有一个框架的麻烦。 在这里如何从延迟的场景中删除一个组件或基元?像fadeOut在jQuery中?A-frame fadeOut primitives

我应该检查每个滴答的opacity CSS属性或特殊的className或者像那样的吗?

如果我想淡出原始ng-repeat,我应该使用ng-animate并检查.ng-leave类吗?

理想情况下,我想在我的组件或原语的remove()函数中声明algorythm。例如,如果我在remove()函数中返回一个Promise,则在promise解析中删除Object3D。但是,这实现不能以这种方式,我已经卡住了:(

看看例子:http://codepen.io/Disorrder/pen/BWBKpb

+0

你能够在Codepen中创建一个演示,例如默认场景:http://codepen.io/mozvr/pen/BjygdO? –

+0

@JoelCDoyle是的,看看这个codePen:http://codepen.io/Disorrder/pen/BWBKpb – Disorder

回答

0

http://codepen.io/jdoyle/pen/aJoVJj

据我所知道的,不透明的CSS属性会对对象没有影响因为这个原因,我认为你不能使用.ng-leave。动画不透明度的唯一方法是通过动画组件或编程方式。

使用$timeout提供程序,并知道动画持续时间,你可以设置一些事情g up像这样:

<a-box ng-repeat="box in page.getActiveBoxes() track by box.id" 
     ng-class="{animated: page.animate}" 
     position="{{box.position}}" 
     rotation="0 45 0" 
     width="0.6" height="1" depth="0.6" 
     color="{{box.color}}" 
    > 
    <a-animation attribute="opacity" begin="fadeOut" duration="5000" to="0"></a-animation> 
</a-box> 

fadeOut() { 
    var id = this.getRandomInt(0, this.boxes.length-1); 
    document.querySelector('#box-' + id).emit('fadeOut'); 
    this.$timeout(function() { 
    // you can now delete the primitive 
    }, 5000 + 50); // added 50ms for good measure 
} 

getRandomInt(min, max) { 
    min = Math.ceil(min); 
    max = Math.floor(max); 
    return Math.floor(Math.random() * (max - min)) + min; 
} 

这不是最优雅的解决方案,但我真的不能想到另一种方式。

另一个令人失望的情况是角度插值不适用于动画的持续时间属性。持续时间一旦设定,不能改变。这是行不通的:

<a-animation attribute="opacity" duration="{{page.animationDuration}}" begin="fadeOut" to="0"></a-animation> 
+0

后者可能是的问题,因为通过JS设置属性有多个问题。根据凯文的说法,它可能会在将来被弃用,转而采用基于能力的解决方案。 – dirkk0

1

我可能会感到困惑,你是否试图将其删除或只是从视图中淡出它?您可以考虑使用带A帧的内置Animations。这里的例子:https://aframe.io/docs/0.5.0/core/animations.html#begin

这不会删除它,但jQuery(根据你的第二个问题)不会删除fadeOut()上的元素。

+0

那么,我无法直接管理这个ng-repeat过程。我希望当DOM对象从场景中删除时,立方体会随着动画消失。你是对的,fadeOut不删除DOM,但我只想达到同样的效果。看来,我应该每隔一刻度看一下css属性或者类似的东西来实现我想要的。 – Disorder