【问题标题】:Load more button for array为数组加载更多按钮
【发布时间】:2017-07-22 18:19:36
【问题描述】:

我有一个数组 $users

$statement = $pdo->prepare("SELECT * FROM activity");
$statement->execute();
$users = $statement->fetchAll();

我就是这样显示的

<?php
foreach ($users as $key => $row) {

    $dist = 0.0;
            $x1 = $lng;
            $x2 = $row['alng'];
            $y1 = $lat;
            $y2 = $row['alat'];

            $dist = acos(sin($x1=deg2rad($x1))*sin($x2=deg2rad($x2))+cos($x1)*cos($x2)*cos(deg2rad($y2) - deg2rad($y1)))*(6378.137);
            $distn = FLOOR ( ROUND($dist,1) * 2 ) / 2 ; //calculate distn

    $users[$key]['dist'] = $distn; //add dist to array foreach value
}

array_multisort(array_column($users, 'dist'), SORT_ASC, $users); / sort array with dist

foreach($users as $row) { 

?>

<article class="mainusers" id="actvtar">
    <div class="actvtinfo">
        <a class="actvtsnm" href="actvt.php?id=<?php echo ($row['aid']);?>"><?php echo $row['title']; ?></a>

    </div>

    <a class="titlepic" href="actvt.php?id=<?php echo ($row['aid']);?>">
            <img  class="actvtpb" src="./activitys/<?php echo ($row['title']); ?>/activitypic.jpg" alt="Bild nicht gefunden" onerror="this.src='./img/no_title.png';"></img>
        </a>

    <div class="actvtfooter">

        <p id="ua">Tags:</p>
        <p class="tags" id="actvttags"  name="interest"><?php echo $row['interest'];?></p>
        <p id="actvtsdist"><?php echo $row['dist']; ?>km entfernt</p>

    </div>

</article>

<?php }
?>

现在我希望 foreach 循环显示 5 次(5 个项目),如果我滚动到底部,则加载接下来的 5 个。 就像推特、Instagram 等... 我怎样才能做到这一点? 如果您不将此标记为重复,我将不胜感激,因为我现在搜索了好几天,但找不到答案! 感谢您的帮助,祝您有美好的一天:)

【问题讨论】:

  • 您的代码仅包含 PHP。您需要使用AJAX 显示记录。另外,要回答它太宽泛了。你试过什么?什么不工作?
  • 网络上有很多教程可以提供帮助。你用谷歌搜索过什么吗? codexworld.com/… , stackoverflow.com/questions/25678303/…
  • 我试图从我的数据库中选择所有用户,并用每个用户的坐标计算他们和我之间的距离。然后我将此距离添加到数组 foreach 用户中并用它对数组进行排序。所以最接近的用户首先显示。现在我只想显示前 5 个,当我滚动到底部时,我想加载下一个 5,这样如果 db 中有太多用户,浏览器就不会崩溃

标签: javascript php jquery arrays ajax


【解决方案1】:

这是对您问题的一般回答。

首先,我要做的是查询可能 25 条记录的限制,并让你的循环遍历所有 25 条记录。

这里的目标是将每 5 条记录包装在一个带有编号 id 的 div 中,因此在循环中放置一个计数器来执行此操作

if ($count % 5 == 0) {
    echo ("</div><div id='mydiv_$myCounter'>");
}

看看我在那里做了什么,我关闭然后打开了一个新的 div,所以你必须从一个打开的 div 开始并以一个关闭的 div 结束。

接下来,您需要使用 css display:none 隐藏除第一个 div 之外的所有内容。我会让你弄清楚的。

最后,一旦你有了这个,你需要编写一些 javascript。 javascript(jQuery 非常适合这种事情)将需要查看滚动事件。像这样:

$(document).ready(function() {
    $(window).scroll(function() {
      // do whatever you need here.
    });
});

一旦你有了它,找出你需要在哪些滚动位置加载更多数据并使用 jQuery 使现有 div 可见或使用 ajax 从后端加载更多数据。

对不起,我不能更具体,但这基本上就是这样做的。

【讨论】:

  • 但是数组中的所有东西都被加载了,但只有 style="display:none;"因此,如果有很多用户,浏览器就会冻结
  • 是的,是的,如果您有大量数据,您还需要做的不仅是在列表末尾加载更多行,还要从顶部删除它们,这样您就不会一次在浏览器中看到太多内容。当然,这样做意味着如果再次向上滚动,您可能不得不将数据重新加载到列表顶部。我之前实际上已经这样做过,我的建议是一次加载大约需要查看的数据的 3 倍,然后将重新加载点放在大约 1/3 和 2/3 点,这有意义吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-21
相关资源
最近更新 更多