JQuery - 从一个点循环遍历每个类的情况

时间:2015-09-23 11:52:04

标签: javascript jquery ajax jquery.visible

我正在创建一个自动滚动,自动更新表,需要从某个点搜索一个类的元素。 我的代码目前是这样的:

var nextScroll;
setInterval(function() {
  if ($(window).scrollTop() + $(window).height() > $(document).height() - 100) {
    $('.seen').removeClass('seen');
    $('html, body').animate({
      scrollTop: 0
    }, 2000);
  } else {
    $('.job-item:not(.seen)').each(function() {
      var visible = $(this).visible();
      if (!visible) {
        nextScroll = $(this).offset().top;
        $(this).addClass("current-scroll");
        return false;
      } else {
        $(this).addClass('seen');
      }
    });
    $('html, body').animate({
      scrollTop: nextScroll
    }, 2000);
  }
}, 7000);

setInterval(function() {
  $.ajax({
    type: 'POST',
    url: 'dashboard-table.php',
    success: function(msg) {
      $("#table-container").html(msg);
      console.log("loaded");
    }
  });
}, 5000);

它基本上使用jquery.visible插件向下滚动到屏幕上没有完全显示的下一个.job-item。问题是,当页面通过ajax更新时,“看到”的元素会丢失看到的类,这意味着我想存储哪个元素最后可见并从那里搜索行。

除非有人有任何其他选择,否则我将非常感激。

FIDDLE:http://jsfiddle.net/yn4wxsej/

1 个答案:

答案 0 :(得分:0)

您可以使用看到的帖子ID填充看到的数组(或jQuery数据或localstorage),然后当您获取数据时应用看到所见元素的类,但重要的是您的行有一个唯一身份或属性。

出于演示目的,我使用了行的假设id,但它可以是一切。

代码:

var seen=[];
你在setTimeout函数中的

$(this).addClass('seen');
if(seen.indexOf($(this).id) == -1){
   seen.push($(this).id);
}

并在您的成功函数中:

success: function(msg) {
    $("#table-container").html(tabledata);
    $.each(seen, function(i,e){
        $('#'+e).addClass('seen');                            
    });
},