Javascript/jQuery scrollTop 滚动时上下跳动

标签 javascript jquery

我有一个函数,每次调用 gonext() 时都会在类的每个实例(“突出显示”)之间跳转。

完整代码如下:

var currentPos = 0;
function gonext() {
  var pos = $(".highlighted").eq(currentPos).position();
  console.log(Math.round(pos.top));
  $(".highlighted").eq(currentPos).css("color", "red");
  currentPos++;
  $(".main").scrollTop(pos.top);
}

    
.main {
  height: 100px;
  border:1px solid grey;
  padding: 10px 20px;
  overflow: scroll;
}
<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<hr>
<button onclick="gonext()">Got to Next</button>
<hr>

<div class="main">
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
</div>
    
   

问题是,一旦它滚动到下一个位置,它就会向上滚动然后向下滚动。

有关更多信息,请参阅控制台日志位置。

我怎样才能解决这个问题,让它只滚动到下一个等等......没有向上/向下跳转?

最佳答案

您必须添加一些 .main top 和 scrollTop 的计算。不要忘记添加条件以检查 .main 容器中的最后一个 .highlighted 元素。否则它会抛出错误。

var currentPos = 0;
function gonext() {
  if($(".highlighted").eq(currentPos).length > 0){
    
    var mainTop = $(".main").position().top;
    var mainScrlTop = $(".main").scrollTop();
    
    var pos = $(".highlighted").eq(currentPos).position();
    $(".highlighted").eq(currentPos).css("color", "red");
    $(".main").scrollTop(pos.top - mainTop + mainScrlTop);
    
    currentPos++;
  }
}
    .main {
      height: 100px;
      border:1px solid grey;
      padding: 10px 20px;
      overflow: scroll;
    }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<hr>
<button onclick="gonext()">Got to Next</button>
<hr>

<div class="main">
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
    <div><span class="highlighted">a</span></div>
    <div><span class="highlighted">s</span></div>
    <div><span class="highlighted">v</span></div>
</div>

关于Javascript/jQuery scrollTop 滚动时上下跳动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58450237/

相关文章:

javascript - 以不可变的方式过滤2层数组对象

javascript - 异步/等待 Vuex 调度

jQuery slideToggle(); Bootstrap 3 动画不流畅

javascript - 如何根据是否存在更新的文档来删除 Mongodb 中的文档

javascript - 字符串模板 - 新行不显示

javascript - 如何将可拖动的 div 与 jsPlumb 连接?

javascript - 为什么我的 jQuery 函数 getJSON 没有调用我的函数回调?

javascript - 根据其属性访问javascript对象

javascript - 如何为剑道网格列设置自定义模板

javascript - 如何在按键时获取 html 表集中的行特定列数据