也许这是一个非常愚蠢的问题,但我无法弄清楚。
基本上我想要做的就是在触摸屏幕时发出一个事件(使用我们订购的谷歌纸板模型上的物理按钮)。无法弄清楚如何触摸整个屏幕'所以我在a-scene之外制作了一个按钮元素。这绝对定位在按钮点击屏幕的位置,点击控制台日志(通过鼠标) - 所以我知道按钮工作。但是,尝试发出事件或setAttribute不会执行任何操作。
我做错了什么,还是只有其他一些方法更适合?
以下是代码:
<body>
<button id="nav-btn" class="btn btn-primary">Menu</button>
<a-scene id="scene">
和
AFRAME.registerComponent('nav', {
schema: {},
init: function () {
var navBtn = document.querySelector('#nav-btn');
var btnEls = document.querySelectorAll('.link');
navBtn.addEventListener('click', function () {
console.log('clicked');
for (var i = 0; i < btnEls.length; i++) {
console.log(btnEls[i]);
btnEls[i].emit('menuFade');
}
});
},
});
顺便使用a-entity作为按钮时,这是有效的,但我也无法找到如何将其作为物理按钮的工作!?
感谢您提供任何帮助或建议!
答案 0 :(得分:2)
如果您想知道何时在Google Cardboard上按下物理按钮,那么您甚至不需要按钮元素。将“click”或“touchstart”处理程序附加到window
,您应该很好:
window.addEventListener('touchstart', function(evt) {
console.log('there we go')
})
请注意emit
不是一种发送事件的香草JS方式,而是一种特定于A帧的功能,这就是为什么它不能用于按钮的原因。
您可以使用dispatchEvent
和CustomEvent
代替:
window.addEventListener('touchstart', function(evt) {
console.log('there we go')
window.dispatchEvent(new CustomEvent('menuFade'))
})
您可能需要将发出事件的对象更改为a-scene
内的某个对象,但它应该可以正常工作。