jQuery滚动到滚动div卡住循环中的元素顶部

时间:2018-05-15 12:58:43

标签: javascript jquery

我正在忙着建立一个页面,当评审员为每个参赛作品评分时,比赛的评分室将能够看到实时结果。

enter image description here

除此之外(每10秒检查一次更新),还有一个功能可以检查舞台上的当前条目(标记为绿色),这将滚动评分室的块以始终显示当前条目位于顶部页面。

然而,这会在整个时间内上下滚动创建无限循环。

初始滚动工作正常,但是因为当前项目的位置发生了变化,jQuery再次向下滚动,以便项目现在处于新的偏移量。

我的代码目前看起来像这样:

这在需要时调用该函数:

$('#entry_'+curr_entry).scrollView();

执行实际滚动的功能:

$.fn.scrollView = function () {
     var item_top = $(this).offset().top;
     var offset = item_top - 100;

     //check if sure scrolled more than 10 seconds ago
     var new_time = new Date();
     var old_time = new Date(last_scrolled);

     if (new_time - old_time > 10000 || last_scrolled == '') {
         $('.current_section').animate({
         scrollTop: offset
     }, 1000);
 }

使用new_timeold_time,以便当用户手动滚动时,此功能不会自动滚动10秒钟。 这部分有效,因此可以忽略这个问题。

可滚动元素的初始大小非常小: enter image description here

我尝试使用.position()代替.offset(),但我得到的结果相同。

我还试图用

获取包含div的当前滚动位置
$('.current_section').animate.scrollTop();

然后使用舞台上当前条目的当前位置来计算正确的滚动点,但无济于事。

理想情况下,当自动滚动时,我希望滚动项位于包含div顶部的位置100。

这个想法是在活动的电视或大显示器上,只会用来监控分数,检查一切是否正常,这就是为什么必须自动滚动。

如果我错过了一些简单的事情,请告诉我。

提前致谢。

1 个答案:

答案 0 :(得分:1)

我设法让这个工作正常!

我在这个帖子中使用了答案来帮助我找到最终的工作代码:
How do I scroll to an element within an overflowed Div?

我的最终代码如下:

$.fn.scrollView = function () {

    var parentDiv = $('.current_section');
    var innerListItem = $(this);
    var offset = 140;

    //check if sure scrolled more than 10 seconds ago
    var new_time = new Date();
    var old_time = new Date(last_scrolled);

    if (new_time - old_time > 10000 || last_scrolled == '') {
        $('.current_section').animate({
      scrollTop: parentDiv.scrollTop() + innerListItem.position().top - offset
    }, 1000);
  }
}

希望这可以帮助任何有类似问题的人。