使用jQuery在列表中导航的箭头键

使用jQuery在列表中导航的箭头键,jquery,Jquery,我正在尝试使用箭头键使我的网站滚动。因为这是一个网站,每个页面都覆盖了100%的宽度和高度,所以我把它放在了李的网站上。请注意,页面内容中也有李的内容,因此我试图限制自己只浏览李的内容,因为李是身体的孩子 我可以让我的脚本使用硬编码的id标签为li的工作,但由于我的一个页面将是一个博客,这并不是一个真正的选择,我可以消除做一点html每次我更新这个 有人能找出我的剧本有什么问题吗?下面是我到目前为止所做的+一个JSFIDLE重新创建我的问题 var count = $("body li").le

我正在尝试使用箭头键使我的网站滚动。因为这是一个网站,每个页面都覆盖了100%的宽度和高度,所以我把它放在了李的网站上。请注意,页面内容中也有李的内容,因此我试图限制自己只浏览李的内容,因为李是身体的孩子

我可以让我的脚本使用硬编码的id标签为li的工作,但由于我的一个页面将是一个博客,这并不是一个真正的选择,我可以消除做一点html每次我更新这个

有人能找出我的剧本有什么问题吗?下面是我到目前为止所做的+一个JSFIDLE重新创建我的问题

var count = $("body li").length;
var position = 0;
var moveToElement = function() {

var elementTop = $(count[position]).offset().top;

$("html:not(:animated),body:not(:animated)").delay( 0 ).animate({ scrollTop: elementTop-20}, 400 );
    }

    $(document).keydown(function(e) {
        switch (e.which) {
            case 38:
                // Go up
                if(position > 0)
                    position--;
                break;
            case 40:
                // Go down
                if(position < count.length - 1)
                    position++;
                break;
            default:

                return;
        }

        moveToElement();
    });
var count=$(“body li”).length;
var位置=0;
var moveToElement=函数(){
var elementTop=$(计数[位置]).offset().top;
$((html:not(:animated),body:not(:animated)”).delay(0).animate({scrollTop:elementTop-20},400);
}
$(文档).keydown(函数(e){
开关(e.which){
案例38:
//上升
如果(位置>0)
位置--;
打破
案例40:
//下降
如果(位置<计数长度-1)
位置++;
打破
违约:
返回;
}
moveToElement();
});

您得到的是集合的长度,而不是项目列表。应该是:

var count = $("body li");
不是

当您使用
$(count[position])

由于“count”已经是一个JQuery集合,您可以改为使用该集合为其编制索引:

var elementTop = count.eq(position).offset().top;
由于
count
是JQuery对象的一个误导性变量名,建议您将其更改为类似
$elements
(前缀
$
是JQuery对象的一个命名标准):


*请注意:在
UL
UL
元素之外有
LI
s是无效的HTML。这只是因为浏览器具有很强的容错性,所以它可以正常工作。

我花了一段时间才弄清楚您想要它做什么(在每个按键上的项目之间滚动)。这是一个很小的bug,您称之为
count
,但实际上将其用作元素的JQuery集合。建议您将其称为
$elements
或更有意义的名称。+1用于提供JSFIDLE。不过,你需要更清楚地说明你的目标,因为预期的操作从你的描述中并不明显。这就像一种魅力。想想看,我不知道我在想什么,加上.lengh;添加到count变量。关于李点,你说得很对。我想这也可以防止我将li-child-li计算到$elements中,因为我可以使用var$elements=$(“ol-li”);非常感谢你的帮助!你认为有没有办法让它在采取行动之前发现你在干什么?目前的情况是,如果我从1开始,滚动2和3,然后按向下键,应该会将我带到4,但会将我带回到2?您可以计算每个项目的当前位置并与scrolltop进行比较。从这一点,你可以计算出你想要的指数是+1还是-1。你可能会完全忘记索引方法(只需滚动到下一个/上一个元素)。@heyimblomblom:如果你想再问一个问题,我已经有了一个有效的答案!我已经摆弄它有一段时间了,但我似乎无法将偏移量转换为我的li位置。
var elementTop = count.eq(position).offset().top;