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