0

请帮忙!我花了一个星期来完成这个游戏,这是我几天来一直坚持的最后一次聚会。我知道那里的一些技术人员可能会瞥一眼并轻弹一些东西。但我对 javascript 不是很熟练,因此需要一些帮助。

 $(document).keydown(function(e){
    // left arrow
    if (e.keyCode == 37 && currentCell > 0) { 
       currentCell--;
       ChangeCurrentCell();
       return false;
    }
    // up arrow
    if (e.keyCode == 38 && currentRow > 0) { 
       currentRow--;
       ChangeCurrentCell();
       return false;
    }
    // right arrow
    if (e.keyCode == 39 && currentCell < MAX_CELL) { 
       currentCell++;
       ChangeCurrentCell();
       return false;
    }
    //down arrow
    if (e.keyCode == 40 && currentRow < MAX_ROW) { 
       currentRow++;
       ChangeCurrentCell();
       return false;
    }
    // enter key
    if (e.keyCode == 13) {

    }
     });


 function ChangeCurrentCell()
 {

    document.getElementById(Boxes[currentRow + currentCell]).focus();
    SimulateMouseOver(document.getElementById(Boxes[currentRow + currentCell]));

 }


 // function will trigger event of selecting current focus.
 function selectElement()
 {

 }

 $(document).ready(function(){

    loadDivs()

// will give initial focus to top left element paving way for key navigation
   ChangeCurrentCell();
  // above gives first element in Boxes the focus when loading. 

尽管获取并调用了焦点方法,但 div 元素不会聚焦,我试图在元素上触发鼠标悬停但没有运气。请帮助我,我把我的硕士论文放在一边,尽管我已经在紧张的时间里做这个游戏,这是一个工作职位的要求。我已经完成了整个游戏逻辑并且一切正常,如果我按原样发送代码,它肯定会被丢弃,因为它不符合关键导航要求......我很绝望,如果我需要我什至会付钱——沮丧的学生

4

3 回答 3

1

看看这个

这是我的测试解决方案,也许是一样的......也许可以帮助你:)如果是,请使用它作为提示,不要复制我所有的代码:D

问候,

L.

于 2013-09-30T14:06:51.920 回答
0

您可以绑定到document.keydown事件以捕获击键。然后您可以使用event.which(由 jQuery 标准化)来确定按下了哪个键。

$(document).on("keydown", function (event) {
    if (event.which === 37) {
        //code for left arrow
    } else if (event.which === 38) {
        //code for up arrow
    } else if (event.which === 39) {
        //code for right arrow
    } else if (event.which === 40) {
        //code for down arrow
    }
});

更新

我刚刚注意到你没有用 jQuery 标记你的问题。要使用本机 JS,您必须更改绑定到document.keydown事件的方式以及确定按下的键的方式(不同的浏览器实现将信息存储在event对象的不同索引下)。

于 2013-09-25T22:27:02.087 回答
0

使它更方便 () 没有必要:

`var LEFT = 37, UP = 38, RIGHT = 39, DOWN = 40, SPACE = 32;`

然后绑定到keydown,keypress不会捕获箭头键并执行以下操作:

$(document).bind("keydown", function (e){
    var which = e.which;
    var navigationKeyWasPressed = which !== undefined && which >= 39 && which <= 40; 
    //do nothing if no significant key was pressed
    if (!navigationKeyWasPressed ) {
        return;
    }
    if ($(".selectedWithKey").length === 1){
        switch (which) {
            case LEFT:
                //...
                break;
            case UP:
                //...
                break;
            case RIGHT:
                //...
                break;
            case DOWN:
                //...
                break;
            case SPACE:
                //turn card
                break;
            default: //non arrow pressed
            //...
        }
    } else {
        // if no card is selected, select one to start arrow navigation
        $(".sponsor:first").addClass("selectedWithKey")
    }
});
于 2013-09-25T22:34:39.537 回答