【问题标题】:jQuery Infinite Page ScrolljQuery 无限页面滚动
【发布时间】:2014-06-28 22:04:36
【问题描述】:

我正在尝试在页面滚动时完成 ajax 内容加载并在某些部分卡住。

这是我的 PHP 代码:

//Fetch Total Record
$objDB = new DB;
$fetchCount = $objDB
   ->setStoredProc( 'petContestFetchImagesCount' )
   ->execStoredProc()
   ->parseXML();
 $fetchCount = $fetchCount->data;

 //Total number of results
 $totalResults = $fetchCount->totalRecords; 

 //Records per page
 $limit = 5; 

 //Total number of pages / calls we will make based on the results
 $pages = ceil($totalResults/$limit);

//What page are we currently on?
$page = min($pages, filter_input(INPUT_GET, 'page', FILTER_VALIDATE_INT, array(
    'options' => array(
        'default'   => 1,
        'min_range' => 1,
    ),
)));

$offset = ($page - 1)  * $limit;

// Some information to display to the user
$start = $offset + 1;
$end = min(($offset + $limit), $total); 

$nextlink = ($page < $pages) ? '<nav id="page_nav"><a href="?page=' . ($page + 1) . '"></a></nav>' : '';

//Fetch Entries
$objDB = new DB;
$submissions = $objDB
   ->setStoredProc( 'petContestFetchImages' )
   ->setParam("offset", $offset )
   ->setParam("rows", $limit )
   ->execStoredProc()
   ->parseXML(); 

从这一点上,它知道它需要的帖子数量,创建分页等。

我现在使用一个 infinateScroll 插件并像这样设置它:

    var $container = $('[name=posts]')

    $($container).isotope({
    itemSelector: '.item',
    layoutMode: 'masonry',
    masonry: {
        columnWidth: 10

    }
})

    $container.infinitescroll({
    navSelector: '#page_nav',
    nextSelector: '#page_nav a',
    itemSelector: '.item',
    pixelsFromNavToBottom: -Math.round($(window).height() * 0.9),
    bufferPx: Math.round($(window).height() * 0.9),
    loading: {
        msgText: $container.attr("data-loading-message"),
        finishedMsg: $container.attr("data-no-more-translators")
        }
}, function(newElements) {
    $container.isotope('appended', $(newElements))
    })

})

当我向下滚动页面时,它正在加载内容。但是,它会到达最后一条记录,并且每次都只加载最后一条记录。如果我向上再向下滚动,它只会加载最后一条记录。

我测试了我的存储过程,当我说从记录 11(最后一个结果)开始并再给我 5 个时,它甚至没有输出结果,它没有返回任何数据。

不确定我在这里遗漏了什么,但在点击最后一个记录后它不应该加载任何更多记录。

我用这个作为参考: http://blog.lingohub.com/developers/2013/09/endless-pages-scrolling-masonry/

编辑:

此客户端更改有效,但它不会阻止 ajax 调用触发,只是附加它可以正常工作的任何结果。

var tmp = 1;
var pages = '<?php echo $pages; ?>

$container.infinitescroll({
    navSelector: '#page_nav',
    nextSelector: '#page_nav a',
    itemSelector: '.item',
    pixelsFromNavToBottom: -Math.round($(window).height() * 0.9),
    bufferPx: Math.round($(window).height() * 0.9),
    loading: {
        msgText: $container.attr("data-loading-message"),
        finishedMsg: $container.attr("data-no-more-translators")
        }
}, function(newElements) {
    if(tmp < pages){
        $container.isotope('appended', $(newElements))
    }
    tmp++;
    })

})

【问题讨论】:

  • 我认为解决方法是你能得到的最好的。原因根据插件文档。 “目前没有办法取消或退出该行为”。也许只是放一个警报('你已经到了尽头')让用户有某种反馈,或者创建一个你 $('#yourdiv').show() if (tmp!
  • 非常感谢您的帮助!我可能不得不研究另一种方法来完成这个或另一个插件

标签: javascript php jquery ajax


【解决方案1】:

我认为您只需检查一下您是否已达到最大页数?

  if($page<$pages){
       //Fetch Entries
       $objDB = new DB;
       $submissions = $objDB
        ->setStoredProc( 'petContestFetchImages' )
        ->setParam("offset", $offset )
        ->setParam("rows", $limit )
        ->execStoredProc()
        ->parseXML(); 
    }

然后更改 nextlink 以回显一个高于 $pages 变量的额外链接。就这样……

    $nextlink = ($page <= $pages) ? '<nav id="page_nav"><a href="?page=' . ($page + 1) . '"></a></nav>' : '';

【讨论】:

  • 这有点用,每次都停止显示相同的记录,但现在根本不显示最后一条记录。我有 11 条记录,每页 5 条记录。所以总共有 3 页。它加载了 3 页,但最后一页没有任何内容,因为永远不会执行此数据库调用来提取内容
  • hmm....好吧,如果你把 ($page
  • 是的,我尝试了
  • 试试我的编辑 :) 这可能会做到。只需使用 $nextlink = ($page 回显一个高于 $pages 的额外链接
  • 奇怪,同样的问题!我明白你的想法了。它使页面 3 ajax 调用,但它不在那里加载内容。它总是在加载index.php,但它在上面添加了页码,所以我认为它点击了index.php?page=3,然后因为if($page&lt;$pages){ 不是真的,它不会拉第 3 页内容
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-11
  • 2023-03-08
  • 2019-11-26
  • 1970-01-01
  • 2016-01-18
  • 2021-02-09
相关资源
最近更新 更多