编辑2:这是工作代码。非常感谢Piotr的帮助,如果没有你们,我不可能毫不费力地做到这一点。
sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3});
let playing = false;
var el = document.querySelector('a-box');
let audioEl = document.querySelector("a-sound");
var audio = audioEl.components.sound;
el.addEventListener('click', () => {
if (!playing) {
audio.playSound();
} else {
audio.stopSound();
}
playing = !playing;
})
} );
request.send( null );
}
});
编辑:我从动态URL(在我的JSON文件中)播放声音,但我似乎无法使事件监听器功能正确(在点击时播放/暂停)。
sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3});
let audioEl = document.querySelector("a-sound");
let audio = audioEl.components.sound;
sceneEl.querySelector('a-box').addEventListener('click', function () {
if(!playing) {
audio.play();
} else {
audio.pause();
audio.currentTime = 0;
}
playing = !playing;
});
} );
request.send( null );
}
});
原文:我在A-Frame中使用this组件,但我希望从('a-sound')实体中的src播放声音,而不是从资产链接播放声音。原因是因为我从JSON数组动态加载声音文件,因此它们不存在于任何资产列表中。我已经加载了所有文件但是无法将此组件挂钩到我加载的sceneEl.querySelector('a-sound').setAttribute('sound', {src:url3});
代码中。我认为它只是一个小的语法问题,但我不是百分百肯定。有人可以看一下这一分钟,告诉我它是否可行?这是代码(与querySelector中的(a-sound)除外的链接相同。
AFRAME.registerComponent('audiohandler', {
init:function() {
let playing = false;
let audio = document.querySelector('a-sound');
this.el.addEventListener('click', () => {
if(!playing) {
audio.play();
} else {
audio.pause();
audio.currentTime = 0;
}
playing = !playing;
});
}
})
</script>
答案 0 :(得分:1)
使用<a-sound>
你必须处理不同的事情。
播放/停止声音应在sound
component内完成。您需要通过yourEntityName.components.sound
访问它并使用playSound()
和stopSound()
方法。
在glitch上查看。我通过setAttribute()
设置了来源,并制作播放/停止按钮。
<a-sound>
几何图形为按钮,但您可以创建一个<a-sound>
实体,并按照以下方式使用它:
let audioEl = document.querySelector("a-sound");
audioEl.setAttribute("src", "sourceURL");
let audio = audioEl.components.sound;
// play = audio.playSound();
// stop = audio.stopSound():
此外,节点未完全加载存在许多问题。看看这个例子:
<a-entity component></a-entity>
<a-sound></a-sound>
如果组件尝试获取对document.querySelector("a-sound").components.sound
的引用,则可能未定义。如果是这样,您应该尝试等到它发出loaded
信号。