我有一个 UL 列表,当按下箭头键时,我通过添加一个 .active
类来更改 LI 元素的选择。这很有效,但现在我需要在移动超出可见范围时使 UL 滚动。我有以下代码,我还在一个工作的 jsfiddle 中包含了复制我的问题。任何帮助都将不胜感激。
$(document.documentElement).keyup(function (e) {
var $generatorListItems = $('#genSelectFilter>li');
var code = e.keyCode || e.which;
var $element = $('#genSelectFilter>li.active');
var listLength = $generatorListItems.length;
var index = $element.index();
var childIdx = 0;
if (code == 40) {
// arrow down
if (index < listLength) {
$generatorListItems.removeClass('active');
childIdx = index + 2;
$('#genSelectFilter').find('>li:nth-child(' + childIdx + ')').addClass('active');
$('#genSelectFilter').animate({
scrollTop: $('#genSelectFilter>li:nth-child(' + childIdx + ')').position().top
}, 'slow');
}
} else if (code == 38) {
// arrow up
if (index > 0) {
$generatorListItems.removeClass('active');
$('#genSelectFilter').find('>li:nth-child(' + index + ')').addClass('active');
$('#genSelectFilter').animate({
scrollTop: $('#genSelectFilter>li:nth-child(' + index + ')').position().top
}, 'slow');
}
}
});