1

一些示例js代码:

var $ = jQuery,
    $container = $('#gridcontainer');
    done_loading = false;

$container.infinitescroll({
    navSelector  : '#navi',
    nextSelector : '#navi a',
    itemSelector : '.grid-item',
    errorCallback : function () { 
        done_loading = true;
        console.log(done_loading);
    },
    // call Isotope as a callback
    function( newElements ) {
        $container.isotope( 'insert', $( newElements ) ); 
    }
);  

$('a.my_test_button').click(function(event){
    event.preventDefault();
    if ( $('#gridcontainer div.isotope-item:not(.isotope-hidden)').size() < 15 && done_loading == false ) {
        $container.infinitescroll('retrieve');
        console.log('loaded');
    }
}

此代码使用同位素设置无限滚动,并在用户滚动到底部时加载更多元素。现在,当使用同位素过滤器时,一些元素被隐藏了,所以当我在某些页面上加载更多元素时,可能没有过滤类型的元素。所以这就是我a.my_test_button应该发挥作用并加载更多项目的地方,直到无限errorCallback滚动触发并设置done_loading为true(所有页面都已加载,因此没有更多要加载的内容)或未隐藏元素的数量超过15。

但是上面的代码只做了一次,我希望这部分循环直到满足上述条件。

我应该如何更改此代码才能进行描述的循环?

4

1 回答 1

0
if ( $('#gridcontainer div.isotope-item:not(.isotope-hidden)').size() < 15 && done_loading == false ) {
    $container.infinitescroll('retrieve');
    console.log('loaded');
}

改成

while ( $('#gridcontainer div.isotope-item:not(.isotope-hidden)').size() < 15 && done_loading == false ) {
    $container.infinitescroll('retrieve');
    console.log('loaded');
}

你可以试试这个。

do{ 
   $container.infinitescroll('retrieve');
   console.log('loaded');
  }while( $('#gridcontainer div.isotope-item:not(.isotope-hidden)').size() < 15 && done_loading == true );
于 2013-04-24T12:47:21.580 回答