Как программно отложить или загрузить сцену A-Frame?

У меня есть сцена A-Frame, которую я хочу разместить на странице, но я хочу, чтобы она загружалась только тогда, когда я скажу. Это означает, что он не должен выполняться или выполняться до тех пор, пока я не создам событие или не вызову метод.

<body>
  <!-- Don't play yet. -->
  <a-scene>
  </a-scene>
</body>

person ngokevin    schedule 08.08.2016    source источник


Ответы (1)


В настоящее время нет встроенного + задокументированного способа, но позже будет возможность для этого. Однако есть несколько способов сделать это вручную:

Создать <a-node>

Узлы (от которых наследует каждый <a-entity>) будут блокировать загрузку сцены, пока она не вызовет событие .load().

Создайте фиктивный узел в сцене. и позвоните .load(), когда будете готовы.

<a-node id="dummy"></a-node>

document.getElementById('dummy').load();

Использование системы активов

Вы можете создать актив, который никогда не будет загружаться, пока вы не скажете ему об этом, и установить тайм-аут на неопределенный срок (позже мы добавим функцию, чтобы не тайм-аут).

<a-scene>
  <a-assets timeout="999999999">
    <a-asset-item id="trigger" src="NEVERLOADUNTILITELLITTO.whatever"></a-asset-item>
  </a-assets>
</a-scene>

Затем триггер.

document.querySelector('#trigger').load();

Внедряйте сцену только тогда, когда она готова

Вы можете сохранить свою сцену в отдельном файле, шаблоне или в виде строки, или использовать фреймворк с концепцией представлений. Вставляйте сцену в DOM только тогда, когда вы готовы к ее рендерингу. Это самый рабочий, но в настоящее время самый герметичный метод.

sceneEl.appendChild(document.createRange().createContextualFragment(str));

Приостановите сцену, как только сможете

Это приостановит рендеринг сцены. Однако сцена, вероятно, уже инициализировала некоторые компоненты и отрендерила несколько кадров. Так что он не герметичен.

document.querySelector('a-scene').pause();
person ngokevin    schedule 08.08.2016
comment
Я только что попробовал третий способ, и он работал отлично. Спасибо! - person Tushar Arora; 08.08.2016
comment
Что вы имеете в виду под воздухонепроницаемостью? - person JMA; 30.05.2019
comment
Re: Использование системы активов, я не понимаю, почему актив никогда не загружается. Это тайм-аут? почему большой тайм-аут может привести к тому, что вы никогда не загрузитесь? - person ishahak; 03.06.2021