2016-08-08 80 views
1

有没有办法倾听src属性的onload事件?我无法使用<a-assets>,因为我使用的是<a-sky>,因为<a-assets>似乎不适用于<a-sky>。并试图同时加载<a-assets><a-sky>的图像,但首先加载一个图像,然后加载另一个图像,这意味着加载时间加倍。有没有办法听到`src`属性的`onload`事件? (A-frame)

倾听src属性的正确方法是什么?所以我可以在其中的图像加载时执行操作?

(我想避免一个空白的场景,而在<a-sky>src图像加载。)

回答

2

我无法找到一个load事件相当于是在这里工作,但<a-assets/>应该工作在这个案例。如果速记<a-sky/>不与资产的工作,你可以使用更长的形式:

<a-scene> 
    <a-assets> 
    <img id="my-asset" src="https://..." crossorigin="anonymous"> 
    </a-assets> 
    <a-entity geometry="primitive: sphere; 
         radius: 5000;" 
      material="src: #asset-id; 
         side: back;"> 
    </a-entity> 
</a-scene> 

注:我不知道为什么crossorigin="anonymous"是必要的。它可能不应该,但它是截至08/07/16。

0

考虑一下:*“如果‘你有什么,有A型架或’不存在的附加层,可以附加一个DOM事件处理程序‘的’属性什么东西?”

答案是“否”:  “DOM 对象”产生和接收事件,但他们的属性没有。

因此,“A-Frame或什么具备的,你,”正在一定建立在这些东西,因此顶部完全依赖于它,通过定义“可以做没有更多的(或更少)。”

3

像Don说的那样,使用资产上的crossorigin标志使其与您的<a-sky>一起工作。

一旦你有了这个,你可以听到img.onload/loaded就像你正常的DOM事件。下面我换一个A字架组件,自动挂接到现场里面的一些代码:

<script> 
    // Do something on asset load. 
    AFRAME.registerComponent('do-on-asset-load', { 
    schema: { 
     src: {type: 'selector'} 
    }, 

    init: function() { 
     var el = this.el; 
     var assetEl = this.data.src; 
     assetEl.addEventListener('load', function() { 
     // Do something with your element. 
     }); 
    } 
    }); 
</script> 

<a-scene> 
    <a-assets> 
    <img id="my-asset" src="https://..." crossorigin="anonymous"> 
    </a-assets> 
    <a-sky src="#my-asset" do-on-asset-load="#my-asset"></a-sky> 
</a-scene> 

如果你没有使用的资产,你必须深入到材料抢内部创建的图像:

document.querySelector('a-sky').components.material.material.map.image

相关问题