从 AFrame 中的 js 动态发出事件

Dynamically emit event from js in AFrame

差不多就是标题。我希望能够从 Javascript 脚本中调用 emit。这是我的设置(为简洁起见进行了编辑):

<a-video 
   animation__begin="property: scale; to: 20 20 20; dur: 200; startEvents: startplay"
   animation__rewind="property: scale; to: 1 1 1; dur: 200; startEvents: endplay"
   src="#myvid" id="avideo"
   onclick="this.emit('startplay'); playvideo('myvid');"></a-video> <!-- this.emit works, but calling the defined emit function won't work -->
<a-image src="#pause"
   onclick="pausevideo('myvid'); /*works: document.getElementById('v-cadrage').emit('endplay')*/ emit(this, 'avideo', 'endplay')"></a-image> <!-- emit() doesn't work here -->

..

<script>
    function emit(from, id, eventname) {
      document.getElementById(id).emit.bind(from)(eventname);
    }
</script>

emit 函数 有效 当从控制台调用时。但是,当从内联 javascript 调用时,我无法让它工作。如果我内联重写整个 document.getElement... 代码,它也可以工作。我在没有 .bind() "hack" 的情况下观察到相同的结果。

我错过了什么吗?我怎样才能让它发挥作用?你能重现这种情况吗?

谢谢

当您单击这样的元素时:

<a-box onclick="emit('something');"></a-box>

emit 正在当前范围内调用 - 即框。所以它有点像 document.querySelector("a-box").emit('something').

要使用您的函数,只需更改其名称即可。


顺便说一句,我真的建议将所有逻辑移动到 custom component. It should simplify managing events (like ) - 只是 node.emit(event-name).