2016-08-08 142 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

相關問題