2017-01-13 7 views
0

Ich versuche WAS für Bewegung auf einem Smartphone zu simulieren. Wenn ich auf die Schaltfläche auf einem Smartphone klicke, feuert diese Schaltfläche, aber hört nie auf.Simulieren Klicken auf eine Taste funktioniert nicht

Wie kann ich dem Programm sagen, dass es beim Loslassen der Taste anhalten soll? Ist etwas wie Keyup nötig oder hat jemand eine bessere Idee?

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); 
    } 
} 


Dies löst die Tasten:

  <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

Haben Sie versucht, ein Onkeyup-Ereignis hinzuzufügen, wenn die Schaltfläche losgelassen wird? – AmericanUmlaut

+1

Welches Ereignis verwenden Sie, um 'FireKey()' auszulösen? –

+0

Sie sagen es nie zu stoppen. Versuchen Sie stattdessen mit dem 'keyPress'-Ereignis. Ersetzen Sie einfach 'onkeydown' und 'keydown' oben durch 'onkeypress' und 'keypress'. – allnodcoms

Antwort

0

ich nicht sicher sein können, wie Sie Ihre HTML geändert werden muss, weil Sie nicht enthalten Informationen darüber, wie Ihr On-Down-Attribut angehängt ist t o Ihr Event-Handler - es scheint, dass dies eine Art Javascript-Framework sein muss.

Das Problem ist allerdings, deutlich, dass Sie ein Ereignis haben, dass Ihr Schlüssel gedrückt werden erzählt, aber Sie haben nicht einen der Schlüssel zu sagen wieder freigegeben werden, so dass, sobald Sie die gedrückte haben Knopf, sobald Ihr Browser im Grunde nur denkt, dass die Taste für immer gedrückt wird.

Eine Lösung wäre in etwa so aussehen, wenn auch wieder kann ich nicht testen:

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> 
<!-- ... --> 

So dies setzt voraus, dass Ihr Framework unterstützt ein On-up-Attribut, das auf die gleiche Weise wie auf dem nach unten funktioniert. Es würde ein Keydown-Ereignis auslösen, wenn die Taste gedrückt wird, und ein Tastenereignis, wenn die Taste wieder losgelassen wird.