Jquery 如何使用键盘控制div类块

Jquery 如何使用键盘控制div类块,jquery,Jquery,我正在使用div类的块来使用键盘上下箭头按钮控制它们。我有一个区块列表,其中7个区块显示,而其他区块隐藏。我有从第1块到第17块的文本块。当我按下向下箭头按钮从块1到块17时,块将使用“rowheight”向上移动,这看起来很好,但有一个问题。当我在第7块后按下向上箭头按钮和向下箭头按钮时,这些块应该保持在原来的位置,但当黄色块位于第8块、第9块、第10块、第11块、第12块、第13块、第14块、第15块、第16块和第17块时,它们会向上移动 我认为问题出在代码的某个地方: if (event.

我正在使用div类的块来使用键盘上下箭头按钮控制它们。我有一个区块列表,其中7个区块显示,而其他区块隐藏。我有从第1块到第17块的文本块。当我按下向下箭头按钮从块1到块17时,块将使用“rowheight”向上移动,这看起来很好,但有一个问题。当我在第7块后按下向上箭头按钮和向下箭头按钮时,这些块应该保持在原来的位置,但当黄色块位于第8块、第9块、第10块、第11块、第12块、第13块、第14块、第15块、第16块和第17块时,它们会向上移动

我认为问题出在代码的某个地方:

if (event.keyCode == 40) 
  {    //down
    if(current_col < totalrowcount && current_row == 1)
    {
      if(current_col >= displayrowcount)
      {
        var currentrowtop = $(".mainWrap div.row:first-child").css( "margin-top");
        currentrowtop = parseInt(currentrowtop)-rowheight;
        var rowtop = currentrowtop+="px";
        $(".mainWrap div.row:first-child").css( "margin-top", rowtop );
      }
      current_col++;
    }
  }
if(event.keyCode==40)
{//down
如果(当前列=displayrowcount)
{
var currentrowtop=$(“.mainWrap div.row:first child”).css(“页边空白顶部”);
currentrowtop=parseInt(currentrowtop)-行高;
var rowtop=currentrowtop+=“px”;
$(.mainWrap div.row:first child”).css(“页边空白顶部”,rowtop);
}
当前_col++;
}
}
在这种情况下,当我按下从块1到块7的向下箭头按钮时,如果我按下向上箭头按钮,块将不会向上移动。当我按下块7后的向下箭头按钮时,如果我按下向上箭头按钮,然后按下向下箭头按钮,块将向上移动。其他街区的情况也一样。我希望只有当我在块隐藏的块的末尾之后时,块才会向上移动,例如:我在块7上,而块7后面的其他块都隐藏,所以我可以向上移动它们。当我不是街区的尽头时,我不想把街区向上移动

有人知道当我不在块的末尾,而其他块隐藏时,如何阻止块向上移动吗

如果您需要查看,这里是我的示例站点:

试试这个提琴:

在第51行,我添加了一个if语句:

if(current_col > displayrowcount){
    $(".mainWrap div.row:first-child").css( "margin-top", "+="+rowheight);
}

我也改变了一些其他的事情,但它们与你的问题无关。可读性,以及真正精心设计的代码

坦率地说,您的许多代码都显示出对js基础知识的理解不足。代码中充斥着
parseInt()
,很多时候它完全没有必要

例如,这让我的内心有点死亡:

for(var i=1; i<=(parseInt(current_row)+parseInt(1)); i++ )
// current_row is already an int...
for(var i=1; i<=current_row+1; i++ )
我甚至无法想象有一种不那么清晰的方式来编写代码

您不需要本地
currentrowtop
在其范围内的任何其他地方。减去
行高
,然后在
if
中添加两次,然后使用它,但如果从未处理
if
,则将永远不会使用减去的
当前行顶
。最后,
var rowtop=currentrowtop+=px+=
操作符的工作吗

在开始这样的项目之前,我会认真地花时间研究JavaScript/jQuery的基本原理

祝你好运。

试试这把小提琴:

在第51行,我添加了一个if语句:

if(current_col > displayrowcount){
    $(".mainWrap div.row:first-child").css( "margin-top", "+="+rowheight);
}

我也改变了一些其他的事情,但它们与你的问题无关。可读性,以及真正精心设计的代码

坦率地说,您的许多代码都显示出对js基础知识的理解不足。代码中充斥着
parseInt()
,很多时候它完全没有必要

例如,这让我的内心有点死亡:

for(var i=1; i<=(parseInt(current_row)+parseInt(1)); i++ )
// current_row is already an int...
for(var i=1; i<=current_row+1; i++ )
我甚至无法想象有一种不那么清晰的方式来编写代码

您不需要本地
currentrowtop
在其范围内的任何其他地方。减去
行高
,然后在
if
中添加两次,然后使用它,但如果从未处理
if
,则将永远不会使用减去的
当前行顶
。最后,
var rowtop=currentrowtop+=px+=
操作符的工作吗

在开始这样的项目之前,我会认真地花时间研究JavaScript/jQuery的基本原理


祝你好运。

有人知道我不在街区尽头,而其他街区都藏起来的时候,我如何阻止街区向上移动吗?就像我在聊天室说的,如果你能拉小提琴,我可以帮你。如果你在做小提琴时遇到困难,我也可以帮你。学习拉小提琴将是一次很好的经历(;有人知道当我不在街区尽头,而其他街区都躲起来的时候,我如何阻止街区向上移动吗?就像我在聊天室里说的,如果你能拉小提琴,我可以帮你。如果你被困在拉小提琴上,我也可以帮你。学习拉小提琴将是一次很好的经历(;