Javascript 模拟单击某个键不起作用

Javascript 模拟单击某个键不起作用,javascript,keydown,Javascript,Keydown,我尝试在智能手机上模拟WASD的运动。当我单击智能手机上的按钮时,它会启动该按钮,但不会停止 释放按钮时,如何告知程序停止?是否需要像keyup这样的东西,或者有谁有更好的主意 function fireKey(el, key) { if (document.createEventObject) { var eventObj = document.createEventObject(); eventObj.keyCode = key; el

我尝试在智能手机上模拟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>



我无法确定HTML需要如何更改,因为您没有包含关于on-down属性如何连接到事件处理程序的信息-看起来这一定是某种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>
<!-- ... -->
功能按键(el,按键){
fireKeyEvent(el、键、“键控关闭”);
}
功能释放键(el,键){
fireKeyEvent(el,键,“keyup”
}
函数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(“事件”);
initEvent(eventName,true,true);
eventObj.which=键;
eventObj.keyCode=key;
el.调度事件(eventObj);
}
}

因此,这假设您的框架支持与on down相同的on up属性。按下按钮时会触发keydown事件,再次释放按钮时会触发keyup事件。

释放按钮时是否尝试添加onkeyup事件?您使用什么事件触发
fireKey()
?您从未告诉它停止。请尝试使用“keyPress”事件。只需将上面的“onkeydown”和“keydown”替换为“onkeypress”和“keyPress”。@AmericanUmlaut onkeyup可以工作,但我不知道如何编码。我编辑了顶部的按钮。@AllNodeComs它不再对keydown和onkeydown作出反应。