用javascript / html中的touchevent模拟空格键

时间:2016-08-19 22:02:38

标签: javascript html events touch simulate

我试图在Android上移植游戏,在游戏中玩家按空间跳转,当用户触摸屏幕时,我找不到任何可用的解决方案来模拟空格键事件

这是我迄今为止找到的代码:

/**
 * Keep track of the spacebar events
 */
var KEY_CODES = {
  32: 'space'
};
var KEY_STATUS = {};
for (var code in KEY_CODES) {
  if (KEY_CODES.hasOwnProperty(code)) {
     KEY_STATUS[KEY_CODES[code]] = false;
  }
}
document.onkeydown = function(e) {
  var keyCode = (e.keyCode) ? e.keyCode : e.charCode;
  if (KEY_CODES[keyCode]) {
    e.preventDefault();
    KEY_STATUS[KEY_CODES[keyCode]] = true;
  }
};
document.onkeyup = function(e) {
  var keyCode = (e.keyCode) ? e.keyCode : e.charCode;
  if (KEY_CODES[keyCode]) {
    e.preventDefault();
    KEY_STATUS[KEY_CODES[keyCode]] = false;
  }
};
document.addEventListener("touchstart", function(e) {
  document.onkeydown({ keyCode: 32 });
});
document.addEventListener("touchend", function(e) {
  document.onkeyup({ keyCode: 32 });
});

我不明白为什么这不起作用......

然后这个:

// jump higher if the space bar is continually pressed
if (KEY_STATUS.space && jumpCounter) {
  player.dy = player.jumpDy;
}

以上是使用空格键事件的所有代码

Full Game code

2 个答案:

答案 0 :(得分:1)

您需要从事件中获取keyCode,尝试编写 ({ e.keyCode: 32});

答案 1 :(得分:1)

你可以定义一个处理程序然后包装跳转函数。用所需的事件解雇它。例如:

function jump(keyEvent) { /* code to jump*/}

这是一个坏主意,但它可以为你工作。这样你就不必担心preventDefault方法了。

function jumpHandler(e) { e.keyCode = 32; jump(e) /*object to simulate the keydown event object*/ }

为了避免操纵事件对象,你可以传递一个空函数,就像你传递keyCode属性一样。但是你将失去preventDefault功能。

function jumpHandler() { jump({keyCode:32, preventDefault: function(){}}) /*object to simulate the keydown event object*/ }

document.addEventListener('touchstart', jumpHandler);
document.onKeydown = jump // here just the reference to the handler

有些时候,函数结尾处的returnig false可能具有相同的preventDefault行为,我告诉你这是否要返回false而不是调用preventDefault。

:)