HTML5 / canvas:为jquery mobile桥接触摸事件+ keydown事件

时间:2014-05-28 11:10:59

标签: jquery-mobile canvas touch

过去几天我一直在努力解决这个问题。我对javascript和jQuery很新,我对去哪里感到有点困惑。

基本上,我按照教程制作了游戏Snake;在桌面上,我正在使用向上,向下,向左和向右的keydown输入。我正在努力使它在jQuery mobile上也是用户和触摸友好的游戏。我已经下载了一些触摸插件,但我不知道从那里去哪里或者它是否有效。

作为我的game.js文件的一部分,

$(document).keydown(function(e){
    var key = e.which;
    if(key == "37" && d!= "right") d= "left";
    else if (key =="38" && d!= "down" ) d= "up";
    else if (key == "39" && d!="left") d= "right";
    else if (key == "40" && d!="up" ) d=  "down";

我现在遇到的问题是:如何实现触摸输入,以便它能够返回到keydown输入?我会将它作为内联包含在我的index.html中吗? game.js文件的一部分?还是一个新文件?

谢谢!我很感激任何帮助/指导!

1 个答案:

答案 0 :(得分:0)

可能是一个黑客解决方案,但它确实有效。

1)将keydown函数从匿名块移出到命名函数中,该函数将event对象作为参数。

2)使覆盖控件调用函数覆盖默认事件对象,以将e.which分配给控件对应的任何值。

因此...

这:

$(document).keydown(function(e){
    var key = e.which;
    if(key == "37" && d!= "right") d= "left";
    else if (key =="38" && d!= "down" ) d= "up";
    else if (key == "39" && d!="left") d= "right";
    else if (key == "40" && d!="up" ) d=  "down"; 

变为

function handle_keys(e){
    var key = e.which;
    if(key == "37" && d!= "right") d= "left";
    else if (key =="38" && d!= "down" ) d= "up";
    else if (key == "39" && d!="left") d= "right";
    else if (key == "40" && d!="up" ) d=  "down";
}

$(document).keydown(function(e){
  handle_keys(e);
}

对于你刚刚做的触摸事件

$("#left_button").touchstart(function(e){
    e.which = 37;
    handle_keys(e);
})