滚动到列表中的元素ID

时间:2016-05-25 09:37:08

标签: javascript jquery

我有一堆包含大量项目的列表。如果有一定数量的项目,则列表成为滚动条,如果用户单击按钮以查看例如位于列表底部的项目,则应自动滚动到该元素。我创建了一个滚动功能,但它似乎无法正常工作。

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 - 有人可以帮助我吗?

非常感谢!

1 个答案:

答案 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;
&#13;
&#13;

https://jsfiddle.net/znwjvtzg/