我有一堆包含大量项目的列表。如果有一定数量的项目,则列表成为滚动条,如果用户单击按钮以查看例如位于列表底部的项目,则应自动滚动到该元素。我创建了一个滚动功能,但它似乎无法正常工作。
javascript看起来像这样:
$('a').on('click', function(e){
var id = $(e.currentTarget).attr('id') // catch the ID of the clicked item
$('#left').animate({ // #left is the container of the list
scrollTop: $('#left ul li#'+id+'').offset().top // scroll to the element which metches the cliced ID
}, 500);
})
我创建了一个简单的JSFIDDLE - 有人可以帮助我吗?
非常感谢!
答案 0 :(得分:1)
问题在于您使用.offset().top
来计算相对于窗口的偏移量而不是容器的偏移量。
解决方案是使用.offsetTop
注意:我真的不知道额外的8个像素来自哪里,但它有效..
$('a').on('click', function(e){
var id = $(this).attr('id')
$('#left').animate({
scrollTop: $('#left ul li#'+id+'')[0].offsetTop - 8
}, 500);
})

#con {
}
#right {
float: right;
}
#right a {
display: block;
}
#left {
float: left;
height: 500px;
overflow: scroll
}
#left ul {
padding: 0;
margin-top:20px;
}
#left ul li {
}
#left ul li div {
height: 100px;
width: 100px;
border: 1px solid red;
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="con">
<div id="left">
<ul>
<li id="1">
<div>
Item 1
</div>
</li>
<li id="2">
<div>
Item 2
</div>
</li>
<li id="3">
<div>
Item 3
</div>
</li>
<li id="4">
<div>
Item 4
</div>
</li>
<li id="5">
<div>
Item 5
</div>
</li>
<li id="6">
<div>
Item 6
</div>
</li>
<li id="7">
<div>
Item 7
</div>
</li>
<li id="8">
<div>
Item 8
</div>
</li>
<li id="9">
<div>
Item 9
</div>
</li>
<li id="10">
<div>
Item 10
</div>
</li>
<li id="11">
<div>
Item 11
</div>
</li>
<li id="12">
<div>
Item 12
</div>
</li>
</ul>
</div>
<div id="right">
<a href="#" id="1">Item1</a>
<a href="#" id="2">Item2</a>
<a href="#" id="3">Item3</a>
<a href="#" id="4">Item4</a>
<a href="#" id="5">Item5</a>
<a href="#" id="6">Item6</a>
<a href="#" id="7">Item7</a>
<a href="#" id="8">Item8</a>
<a href="#" id="9">Item9</a>
<a href="#" id="10">Item10</a>
<a href="#" id="11">Item11</a>
<a href="#" id="12">Item12</a>
</div>
</div>
&#13;