当在同一个项目上多次调用时,scrollTop会跳转

时间:2015-10-13 22:56:12

标签: javascript jquery html scrolltop

我正在使用jquery的scrollTop函数,并且无法弄清楚为什么它会在同一项目上多次调用时跳转。

我把这个example放在一起来说明问题。单击测试按钮时,它会在滚动到指定项目和列表中的其他位置之间切换。

$('#button').click(function () {
$('.items').scrollTop($('li.8').offset().top);  // scroll to item 8
});
.items{
    max-height: 80px;
    overflow: auto;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="items large-8 columns end">
<ul class="list">
<li class="0">Almy, Joannie </li><li class="1">Auclair, Donnette </li><li class="2">Auerbach, Trinh </li><li class="3">Bement, Margeret </li><li class="4">Bryan, Willian </li><li class="5">Bullen, Tempie </li><li class="6">Coppa, Ozella </li><li class="7">Dahlin, Clementina</li><li class="8">Dahlman, Sasha </li><li class="9">Dorfman, Josef </li><li class="10">Heckert, Whitney </li><li class="11">Hendershott, Lida </li><li class="12">Holmes, Ellsworth </li><li class="13">Jaffee, Karlyn </li><li class="14">Joslyn, Nora </li><li class="15">Kiley, Patrica </li><li class="16">Lakes, Mickie </li><li class="17">Leiker, Enola</li><li class="18">Lemaire, Shanel, </li><li class="19">Lingerfelt, Graham </li><li class="20">Mangum, Maile </li><li class="21">Marcinkowski, Monica </li><li class="22">Mcraney, Allyson </li><li class="23">Meyerson, Lura </li><li class="24">Mole, Eboni </li><li class="25">Paulsen, Merrie </li><li class="26">Preble, Rivka </li><li class="27">Privette, Vonnie </li><li class="28">Quinones, Tilda </li><li class="29">Rojo, Eloy </li><li class="30">Semple, Dwana </li><li class="31">Sifuentes, Tyron </li><li class="32">Sloat, Dante </li><li class="33">Slocum, Shanna </li><li class="34">Sly, Ellamae </li><li class="35">Stolp, Courtney </li><li class="36">Till, Lucien </li><li class="37">Ulman, Jennifer </li><li class="38">Wadlow, Cassandra </li><li class="39">Zellars, Marty </li>
</ul>
</div>
<button id="button">test</button>

2 个答案:

答案 0 :(得分:2)

这是因为您获得偏移属性的项目和偏移量返回相对于文档的元素位置,这意味着当您滚动UL时,类别8偏移的li会发生变化,在这种情况下您必须使用职位:

$('#button').click(function () {
$('.items').scrollTop($('li.8').position().top);  // scroll to item 8
});

为了使其正常工作,父母应该有相对位置,你可以检查这个小提琴:http://jsfiddle.net/wgqoh1b3/28/

答案 1 :(得分:2)

要使其停止跳跃,您可以尝试以下代码:

$('#button').click(function () {
   $('.items').scrollTop(0);
   $('.items').scrollTop($("li.8").position().top);
});