2017-01-13 5 views
0

私はスマートフォン上での動きのためにWASDをシミュレートしようとしています。スマートフォンのボタンをクリックすると、そのボタンが起動しますが、決して停止しません。キーをクリックしたシミュレーションが動作しない

ボタンを離すときにプログラムを停止するように指示するにはどうすればよいですか?キーアップが必要なのか、誰かに良いアイデアがありますか?

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'イベントを試してみてください。上の 'onkeydown'と 'keydown'を 'onkeypress'と 'keypress'で置き換えてください。 – allnodcoms

答えて

0

私はあなたのHTMLは、あなたがしなかったため、変更する必要がありますどのように特定することはできませんあなたのオンダウン属性がどのようにフックされているかに関する情報を含むあなたのイベントハンドラ - これは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> 
<!-- ... --> 

だからこれはあなたのフレームワークは上のダウンと同じように動作上のアップ属性をサポートしていることを前提としています。ボタンが押されるとキーダウンイベントがトリガーされ、ボタンが再び離されるとキーアップイベントがトリガーされます。

関連する問題