javascript - 多次单击后 ScrollTop 到元素不起作用

标签 javascript jquery html

我有一个导航,希望在单击每个 li scrollTop 到元素顶部后,但是在多次单击 li 之后它不会工作正常,我知道为什么,例如滚动已经是 0 然后元素顶部是 50,滚动到 50 然后如果你点击另一个元素顶部偏移 150,滚动应该转到 150,但它转到 200,因为它现在在 50。我尝试了两种逻辑:

A.每次用户点击时滚动到零,但它不起作用。

$('ul').stop().animate({
    scrollTop: 0 }, 0);

B.减法元素偏移当前滚动位置的顶部,但它也不起作用。

var aTop = parseInt($(this).offset().top);
var cTop = parseInt($('ul').scrollTop());
var offset = aTop - cTop;

有什么想法吗?

$('li').click(function() {
  var offset = $(this).offset().top;
  $('ul').animate({
    scrollTop: offset
  }, 500);
});
ul {
  width: 200px;
  height: 300px;
  overflow: scroll;
}

li {
  margin-bottom: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>Sample 1</li>
  <li>Sample 2</li>
  <li>Sample 3</li>
  <li>Sample 4</li>
  <li>Sample 5</li>
  <li>Sample 6</li>
  <li>Sample 7</li>
  <li>Sample 8</li>
  <li>Sample 9</li>
  <li>Sample 10</li>
  <li>Sample 1</li>
  <li>Sample 2</li>
  <li>Sample 3</li>
  <li>Sample 4</li>
  <li>Sample 5</li>
  <li>Sample 6</li>
  <li>Sample 7</li>
  <li>Sample 8</li>
  <li>Sample 9</li>
  <li>Sample 10</li>
</ul>

最佳答案

您需要添加 ul 元素的 scrolltop,而不是减去它:

var offset = $(this).offset().top + $(this).parent().scrollTop();

片段:

$('li').click(function() {
  var offset = $(this).offset().top + $(this).parent().scrollTop();

  $('ul').animate({
    scrollTop: offset
  }, 500);
});
ul {
  width: 200px;
  height: 300px;
  overflow: scroll;
}

li {
  margin-bottom: 10px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li>Sample 1</li>
  <li>Sample 2</li>
  <li>Sample 3</li>
  <li>Sample 4</li>
  <li>Sample 5</li>
  <li>Sample 6</li>
  <li>Sample 7</li>
  <li>Sample 8</li>
  <li>Sample 9</li>
  <li>Sample 10</li>
  <li>Sample 1</li>
  <li>Sample 2</li>
  <li>Sample 3</li>
  <li>Sample 4</li>
  <li>Sample 5</li>
  <li>Sample 6</li>
  <li>Sample 7</li>
  <li>Sample 8</li>
  <li>Sample 9</li>
  <li>Sample 10</li>
</ul>

关于javascript - 多次单击后 ScrollTop 到元素不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48996062/

相关文章:

javascript - jQuery:将参数作为属性传递给动画方法

html - 表格内的单选按钮

html - 如何删除滚动条并显示实线边框?

javascript - 如何在单击按钮时克隆 div 换行?

php - 如何调试 PHP Web 应用程序(特别是 Magento)的安装流程?

javascript - 使用javascript自动滑动轮播而不是内置导航

jquery - 使用 css3 transform-origin 居中和缩放

jquery - $(文档).on ('change' ,'.child-21' ,function(){ });动态类

html - 访问两个特定标题元素之间的所有 li 元素

javascript - 如何创建 Firebase web user.reauthenticateWithCredential() 方法所需的 "credential"对象?