是否可以使用标准HTML按钮发出事件?

时间:2017-09-01 01:11:39

标签: javascript aframe

也许这是一个非常愚蠢的问题,但我无法弄清楚。

基本上我想要做的就是在触摸屏幕时发出一个事件(使用我们订购的谷歌纸板模型上的物理按钮)。无法弄清楚如何触摸整个屏幕'所以我在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作为按钮时,这是有效的,但我也无法找到如何将其作为物理按钮的工作!?

感谢您提供任何帮助或建议!

1 个答案:

答案 0 :(得分:2)

如果您想知道何时在Google Cardboard上按下物理按钮,那么您甚至不需要按钮元素。将“click”或“touchstart”处理程序附加到window,您应该很好:

window.addEventListener('touchstart', function(evt) {
  console.log('there we go')
})

请注意emit不是一种发送事件的香草JS方式,而是一种特定于A帧的功能,这就是为什么它不能用于按钮的原因。

您可以使用dispatchEventCustomEvent代替:

window.addEventListener('touchstart', function(evt) {
  console.log('there we go')
  window.dispatchEvent(new CustomEvent('menuFade'))
})

您可能需要将发出事件的对象更改为a-scene内的某个对象,但它应该可以正常工作。