【发布时间】:2011-01-03 09:50:31
【问题描述】:
我有一个“ul”,其中包含很多“li”(几百个),ul 的固定高度约为 400px,css 属性溢出:滚动,每个 li 的高度为 40px,所以在每个给定的时刻没有超过 10 个可见的 li(其余的需要滚动到)。 如何将 ul 的滚动位置(使用 jquery)更改为特定的 li?
有什么想法吗?
【问题讨论】:
标签: javascript jquery html
我有一个“ul”,其中包含很多“li”(几百个),ul 的固定高度约为 400px,css 属性溢出:滚动,每个 li 的高度为 40px,所以在每个给定的时刻没有超过 10 个可见的 li(其余的需要滚动到)。 如何将 ul 的滚动位置(使用 jquery)更改为特定的 li?
有什么想法吗?
【问题讨论】:
标签: javascript jquery html
你需要做这样的事情:
$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top);
如果你想动画化它,做
$('#yourUL').animate({
scrollTop: $('#yourUL li:nth-child(14)').position().top
}, 'slow');
显然针对不同的lis 调整14。
【讨论】:
$('#yourUL').scrollTop(0).scrollTop($('#yourUL li:nth-child(14)').position().top); 这样我们总是从顶部获得位置。
$('#yourUL').scrollTop($('#yourUL').top + $('#yourUL li:nth-child(14)').position().top);,因为它不涉及奇怪的跳转到顶部
$('#yourUL').scrollLeft($('#yourUL li:nth-child(14)').position().left);
我使用@lonesomeday 的答案接近了,但我发现我必须从第一个li 计算特定li 的相对位置,因为它根据包含ul 的当前滚动位置而改变。
$('#yourUL').scrollTop($('#yourUL li:nth-child(14)').position().top - $('#yourUL li:first').position().top)
【讨论】:
你可以这样做:
$('html, body').animate({
scrollTop:$('#ulID li:eq(1)').offset().top
}, 1000);
对于特定的li,您需要将值调整为eq,或者您甚至可以自定义选择器。
【讨论】:
#ulID li:eq(1) :)
$('html, body')改成$('#your-UL')
position() 而不是offset(),因为我们在这里不是在谈论元素的绝对位置,而是与元素相比.
如果有人需要香草 JS 版本,以下对我来说效果很好,50 的值只是为了让我在靠近列表顶部时显示整个项目。你可以调整它。
function updateListSelection(liID) {
var list = document.getElementById("id Tag Of The <UL> element"),
targetLi = document.getElementById(liID); // id tag of the <li> element
list.scrollTop = (targetLi.offsetTop - 50);
};
【讨论】: