2017-01-13 115 views
0

我嘗試模擬WASD在智能手機上的移動。當我點擊智能手機上的按鈕時,它會觸發該按鈕,但從不停止。模擬點擊不起作用的鍵

如何讓程序停止釋放按鈕時停止?有沒有像keyup需要或有任何人更好的主意?

function fireKey(el, key) { 
    if (document.createEventObject) { 
     var eventObj = document.createEventObject(); 
     eventObj.keyCode = key; 
     el.fireEvent("onkeydown", eventObj); 
    } else if (document.createEvent) { 
     var eventObj = document.createEvent("Events"); 
     eventObj.initEvent("keydown", true, true); 
     eventObj.which = key; 
     eventObj.keyCode = key; 
     el.dispatchEvent(eventObj); 
    } 
} 


這會觸發按鈕:

  <paper-button data-key="LEFT" on-down="handleButton"> 
       <iron-icon data-key="LEFT" icon="hardware:keyboard-arrow-left" style="color: white;"></iron-icon> 
      </paper-button> 
      <paper-button data-key="RIGHT" on-down="handleButton"> 
       <iron-icon data-key="RIGHT" icon="hardware:keyboard-arrow-right" style="color: white;"></iron-icon> 
      </paper-button> <br/> 

      <paper-button data-key="DOWN" on-down="handleButton"> 
       <iron-icon data-key="DOWN" icon="hardware:keyboard-arrow-down" style="color: white;"></iron-icon> 
      </paper-button> 

It's from this example.

+1

您是否嘗試過在按鈕釋放時添加onkeyup事件? – AmericanUmlaut

+1

你用什麼事件觸發'fireKey()'? –

+0

你永遠不會說它停止。改爲使用'keyPress'事件。只需用'onkeypress'和'keypress'替換上面的'onkeydown'和'keydown'即可。 – allnodcoms

回答

0

你的HTML如何需要我不能肯定,因爲你沒有改變包括關於你的on-down屬性如何掛鉤的信息o你的事件處理程序 - 看起來這必須是某種Javascript框架。

的問題,不過,顯然,你必須告訴你的關鍵是按下的事件,但你沒有一個告訴的關鍵是再次釋放,所以一旦你按下了按鈕,一旦你的瀏覽器基本上會認爲該按鍵被永久按下。

一種解決方案是這個樣子,但我又不能測試:

function pressKey(el, key) { 
    fireKeyEvent(el, key, "keydown"); 
} 

function releaseKey(el, key) { 
    fireKeyEvent(el, key, "keyup" 
} 

function fireKeyEvent(el, key, eventName) { 
    if (document.createEventObject) { 
     var eventObj = document.createEventObject(); 
     eventObj.keyCode = key; 
     el.fireEvent("on" + eventName, eventObj); 
    } else if (document.createEvent) { 
     var eventObj = document.createEvent("Events"); 
     eventObj.initEvent(eventName, true, true); 
     eventObj.which = key; 
     eventObj.keyCode = key; 
     el.dispatchEvent(eventObj); 
    } 
} 

<paper-button data-key="LEFT" on-down="pressKey" on-up="releaseKey"> 
    <iron-icon data-key="LEFT" icon="hardware:keyboard-arrow-left" style="color: white;"></iron-icon> 
</paper-button> 
<!-- ... --> 

所以這個假定你的框架支持的上機的屬性,以同樣的方式作爲降。當按鈕被按下時它會觸發一個keydown事件,而當按鈕被再次釋放時會觸發一個按鍵事件。