2015-10-13 27 views
1

我正在使用jquery的scrollTop函数,并无法弄清楚为什么它在同一项目上多次调用时跳转。当在同一项目上多次调用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

这是因为你得到的印性质和偏移回报相对元素位置记录的项目,当你对你的UL滚动里有8类,这意味着偏移量改变,并在这种情况下,你必须使用位置:

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

为了使其正常工作,家长应该有相对位置,你可以检查此琴:http://jsfiddle.net/wgqoh1b3/28/

+0

当我测试这一点,产生相同的结果 – Jess

+0

@Jess你必须做出相对父UL位置。 – Burimi

+0

@Jess检查这个小提琴http://jsfiddle.net/wgqoh1b3/28/ – Burimi

2

要让它停止跳动,你可以试试下面的代码:

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

非常感谢您的建议,当与上面使用position()而不是offset()的建议结合使用时,这对我最有效。 跳回到顶部之前跳下来似乎有点破解,任何其他建议,让这个工作正常? – Jess

+0

为了解决这个问题,你需要找出如何获得“li.8”相对于容器'.items'的位置(例如,容器/顶部距离你想要的元素的位置有多远,计数就好像它是一个平面设计)。 –

相关问题