2017-09-01 30 views
3

也許這是一個非常愚蠢的問題,但我無法弄清楚。是否可以使用標準HTML按鈕發出事件?

基本上所有我想要做的是觸摸屏幕時發出一個事件(使用我們訂購的谷歌紙板模型上的物理按鈕)。無法弄清楚如何進行'全屏觸摸',所以我在a場景之外製作了一個按鈕元素。這是絕對定位在按鈕點擊屏幕,點擊控制檯日誌(通過鼠標) - 所以我知道該按鈕的作品。但是,試圖發出一個事件或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'); 
      } 
     }); 
    }, 
}); 

使用一個實體作爲順便說一下按鈕時,此工作,但我也不能找出如何使那作爲一個物理按鈕!?

感謝您的任何幫助或建議!

+0

@AaronTomlinson謝謝!這很方便知道(和簡單.. omg,不能相信我不得不問) - 但不能幫助排除不幸:/ – Harry

+0

爲getAttribute()工作,你不應該瞄準那個元素。我確定你的控制檯日誌會返回'undefined',如果有的話......似乎在它前面缺少'btnEls [i] .'。這是第一個突出我的源代碼,也是'btnEls [i] .emit('menuFade');'因爲'btnEls'不過是一個節點列表? – NewToJS

+0

@NewToJS哎呀,對不起,我應該讀通過我發佈的更好一點。我的代碼是一個混亂的不同嘗試得到這個工作......這個'getAttribute'是我嘗試的其他東西剩下的剩餘部分,我之前用[i]試過,但是同樣的處理:/ – Harry

回答

2

如果您關心的是何時在Google Cardboard上按下物理按鈕,那麼您甚至不需要按鈕元素。附上「點擊」或「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裏面的東西的對象,但它應該工作。

+0

非常感謝你!這正是我所追求的 - 真正感謝它的伴侶。 – Harry

相關問題