Javascript 组件可在一帧webVR中同时(单击)播放多个音频文件

Javascript 组件可在一帧webVR中同时(单击)播放多个音频文件,javascript,html,arrays,aframe,webvr,Javascript,Html,Arrays,Aframe,Webvr,我试图找到一种方法,在加载场景后,在a-frame vr项目中自动播放我的所有声音文件,但具有窗口单击功能,以便它们能够在不允许自动播放/需要用户交互的浏览器上工作 我确信解决方案非常简单,但我已经尝试了好几个小时,似乎无法在网上找到包括stack anywhere在内的解决方案。当我尝试遵循类似这样的教程时,我无法让它们正常工作: 在我的html中,我有类似的内容(但总共有大约10个声音文件和10个模型): 编辑 我一直收到这个错误消息 Uncaught TypeError: Cannot

我试图找到一种方法,在加载场景后,在a-frame vr项目中自动播放我的所有声音文件,但具有窗口单击功能,以便它们能够在不允许自动播放/需要用户交互的浏览器上工作

我确信解决方案非常简单,但我已经尝试了好几个小时,似乎无法在网上找到包括stack anywhere在内的解决方案。当我尝试遵循类似这样的教程时,我无法让它们正常工作:

在我的html中,我有类似的内容(但总共有大约10个声音文件和10个模型):

编辑

我一直收到这个错误消息

Uncaught TypeError: Cannot read property 'sound' of undefined
    at i.onClick (audiohandler.js:109)
    at HTMLElement.emit (a-node.js:263)
    at i.twoWayEmit (cursor.js:415)
    at i.onCursorUp (cursor.js:271)
    at HTMLCanvasElement.<anonymous> (bind.js:12)

如果要获取包含
声音
组件的所有节点,则需要将选择器从
声音
更改为
声音
-
文档。查询选择器all(“[sound]”)

还将返回元素列表,因此您必须遍历它们:

for (let item of list) {
  item.components.sound.playSound()
}

如果要获取包含
声音
组件的所有节点,则需要将选择器从
声音
更改为
声音
-
文档。查询选择器all(“[sound]”)

还将返回元素列表,因此您必须遍历它们:

for (let item of list) {
  item.components.sound.playSound()
}

这真是太棒了,这是我一直想弄明白的。我们如何调整此组件,使您必须单击一次声音实体才能启动它(而不是单击场景中的任何位置?

这太棒了,这是我一直在尝试解决的问题。我们如何调整此组件,使您必须单击一次声音实体才能启动它(而不是单击场景中的任何位置?

非常感谢!我将我的最终解决方案添加到页面的编辑中,供大家查看。非常感谢!我将我的最终解决方案添加到页面上的编辑中,供大家查看
  
AFRAME.registerComponent('play-audio', {
  init: function () {
    this.onClick = this.onClick.bind(this);
  },
  play: function () {
    window.addEventListener('click', this.onClick);
  },
  pause: function () {
    window.removeEventListener('click', this.onClick);
  },
  onClick: function (evt) {
   let entity = document.querySelectorAll('[sound]');
    for (let item of entity) {
      item.components.sound.playSound();
   }
  }
}); 
for (let item of list) {
  item.components.sound.playSound()
}