代码之家  ›  专栏  ›  技术社区  ›  framina

如何通过“animationend”javascript函数启动a帧动画?

  •  1
  • framina  · 技术社区  · 8 年前

    我从未使用过html、javascript或a-frame,我想让三个collada文件一个接一个地可见,然后不可见(就像关键帧动画序列),并循环该动画。 除了可以循环动画外,该代码也可以工作。

    <script src="https://aframe.io/releases/0.7.1/aframe.min.js"></script>
    <script src="https://rawgit.com/donmccurdy/aframe-extras/master/dist/aframe- 
    extras.loaders.min.js"></script>
    <script src="play-all-model-animations.js"></script>
    
    <body>
    
    <a-scene>
    
    <a-assets>
    <a-asset-item id="t1" src="1a.gltf"></a-asset-item>
    <a-asset-item id="t2" src="2a.gltf"></a-asset-item>
    <a-asset-item id="t3" src="3a.gltf"></a-asset-item>     
    </a-assets>
    
    
    <a-gltf-model id="model1" src="#t1" visible="false">
    <a-animation id="anim1" attribute="visible" begin="1000"; dur="2000"; 
     to="false">
    </a-animation>  
    </a-gltf-model>
    
    <a-gltf-model id="model2" src="#t2" visible="false">
    <a-animation id="anim2"   attribute="visible" begin="2000"; dur="2000"; 
    to="false">
    </a-animation> 
    </a-gltf-model>
    
    <a-gltf-model id="model3" src="#t3" visible="false">
    <a-animation id="anim3" attribute="visible" begin="3000";  dur="2000"; 
    to="false">
    </a-animation> 
    </a-gltf-model>
    
    
    <script>
    anim1.addEventListener('animationend', function () {
    model1.setAttribute('visible', 'true');
    });
    </script>
    
    <script>
    anim2.addEventListener('animationend', function () {
    model1.setAttribute('visible', 'false');
    model2.setAttribute('visible', 'true');
    });
    </script>
    
    <script>
    anim3.addEventListener('animationend', function () {
    model2.setAttribute('visible', 'false');
    model3.setAttribute('visible', 'true');
    
    });
    </script>
    
    </a-scene>
    
    </body>
    

    我想我必须在“animationend函数”中启动每个动画,而不是在“开始”时间启动动画。 是否有人知道如何通过javascript函数启动动画id=“anim1”? 我会感激任何帮助。

    1 回复  |  直到 8 年前
        1
  •  0
  •   Piotr Adam Milewski    8 年前

    你需要倾听 animationend 事件通过 animation.addEventListener('animationend', function)

    然后启动 begin 事件依据 element.emit('begin') 考虑到此类设置:

    <a-element id="element">
       <a-animation id="animation"></a-animation>
    </a-element>
    

    查看我的 fiddle