Javascript 带scrollTop的错误箭头键导航

Javascript 带scrollTop的错误箭头键导航,javascript,jquery,html,Javascript,Jquery,Html,首先,我不熟悉JavaScript/jQuery,英语不是我的母语 在这种情况下,我只能使用jQuery/JavaScript(我的意思是没有其他插件/库,任何我自己没有编写过的东西) 我想用箭头键导航,使用overflow:hidden on my body和scrollTop创建一个网站 以下是我已经拥有的: var state:包含在用于scrollTop的数组值中(目前每个值的高度为1200px) var slidestate:在数组中包含我的选择器(显示用户所在位置的对象)的值marg

首先,我不熟悉JavaScript/jQuery,英语不是我的母语

在这种情况下,我只能使用jQuery/JavaScript(我的意思是没有其他插件/库,任何我自己没有编写过的东西)

我想用箭头键导航,使用overflow:hidden on my body和scrollTop创建一个网站

以下是我已经拥有的: var state:包含在用于scrollTop的数组值中(目前每个值的高度为1200px) var slidestate:在数组中包含我的选择器(显示用户所在位置的对象)的值margin(以%)

获取密钥码: 我不认为我必须在这里解释任何事情,我使用n作为数组的索引,其中包含每个状态所需的值。动画持续时间为1秒

使用var n滚动(.click event): 与下面相同,但使用my和onClick事件

问题 下面的代码正在运行。但有些事情我无法解决。这一切似乎都很滞后,有时scrollTop似乎不起作用

案例1:我处于第四种状态,我按一次“向下”箭头键,然后按一次“向上”箭头键。它应该跳转到状态3,但它没有。我必须再次按下“向上”,然后它跳到状态2。怎么回事

案例2:我不知道为什么,但有时,当我浏览网站时,选择器会移动,但scrollTop不会做任何事情。所以我的选择器进入状态3,我只在状态1上。又是什么鬼东西?scrollTop和selector的值应该是相同的n,我不明白为什么会出现这样的错误


有人对此有任何想法吗?

好的,所以我无法清楚地理解您在极端情况下,即n>3和n>0)要做什么 n=n-1; 而不是

if (e.keyCode == 40 || e.keyCode == 39) {
    n++;
    if (n>3){n--;}
}
else if (e.keyCode == 37 || e.keyCode == 38){
    n--;
    if (n<0){n++;}
}
if(e.keyCode==40 | | e.keyCode==39){
n++;
如果(n>3){n--;}
}
else if(e.keyCode==37 | | e.keyCode==38){
n--;

如果(NU可能用键码检测来解决问题,考虑只有<代码>如果语句而不是递增和转发递减<代码> N< /代码>一个接着一个。在第一个HTML代码片段中,您打开的div比您关闭的要多。@ AlelOne:是的,对不起,我正在编辑,这是在我删除了一些内容时发生的。代码没有被无用的东西污染。@ShafiqJetha我尝试了你的解决方案,使用了scrollTop:scroll,当我按下向下/向右键时scroll+=1200,当我按下向上或向左键时scroll-=1200。我使用了if(scroll>3600){scroll-=1200}但是当我到达最后一个状态并再次按下(甚至一次)时,我无法返回到以前的状态(即使我多次按向上或向左)。我不知道为什么它不起作用。嗨,shoaib,对不起,我没有快速阅读。谢谢你的回答,它确实帮助我找出了一些初学者的错误。我会尝试一下!
var pressedKeys = {};
var state = [0,1200,2400,3600];
var slidestate = [0, 25, 50, 75];
var n = 0;
$(document).keyup(function(e) {
if (e.keyCode == 40 || e.keyCode == 39) {
    n++;
    if (n>3){n--;}
}
else if (e.keyCode == 37 || e.keyCode == 38){
    n--;
    if (n<0){n++;}
    }
$("html:not(:animated),body:not(:animated),#basmontagne:not(:animated)").animate({

     scrollTop:state[n]
     },1000);

$(" #selector ").animate({left:slidestate[n]+'%'},1000);

});
$("#state1").click(function() {
        n=0;

        $("html:not(:animated),body:not(:animated),#basmontagne:not(:animated)").animate({
        scrollTop:state[n] },1000); 

    $(" #selector ").animate({left:slidestate[n]+'%'},1000);
});
if ((e.keyCode == 40 || e.keyCode == 39) && (n < 3))
    n = n + 1;
else if ((e.keyCode == 37 || e.keyCode == 38) && (n > 0))
    n = n - 1;
if (e.keyCode == 40 || e.keyCode == 39) {
    n++;
    if (n>3){n--;}
}
else if (e.keyCode == 37 || e.keyCode == 38){
    n--;
    if (n<0){n++;}
}