您在询问延迟加载。
那么答案必须包括服务器端。您的问题未指定您使用的服务器端语言类型。在我的回答中,我将使用一些基本的 PHP 代码来模拟随机博客文章。
延迟加载意味着我们只加载用户可以看到的内容,然后在需要时加载更多数据。
加载数据意味着 - 从服务器请求它。这通常涉及AJAX,但不一定。(尽管您可能可以使用 AJAX )。JQuery 有一个美妙的ajax 接口。
最大的问题是 - 什么应该触发我的下一次加载 - 因此所有插件。
我接受了 Tgr 的建议,并使用航路点实现了延迟加载。我什至按照 Tgr 的建议使用航点教程进行延迟加载(请给 Tgr 更多积分)。
你可以在我的网站上看到我的实现
我所做的是更改标题的模拟博客文章。每次用户向下滚动足够多时,我都会从服务器获得更多帖子。
我为我的源添加了一个下载链接,因此您可以下载并开始使用它。只要跑main.html
,你就可以走了。
该文件more_posts.php
生成lorem ipsum
带有随机标题的帖子。(我需要一些虚假内容才能在页面上滚动)。
看起来像这样
<h1> This is post number <?php echo uniqid("",true)?> </h1>
<div style="color:red">
Lorem ipsum dolor .... Quisque ut pretium nibh.
</div>
<div style="color:blue">
Lorem ipsum dolor .... Quisque ut pretium nibh.
</div>
如您所见,我拥有的唯一 PHP 代码是在标题中随机添加一些内容。
这对您来说应该很熟悉,因为您的博客中已经有 25 多篇文章。
真正的逻辑在于main.html
- HTML 部分看起来像这样
<section id="container">
</section>
<footer>
<nav>
<ul>
<!-- Hijack this link for the infinite scroll -->
<li class="more"><a href="more_posts.php" title="Traditional navigation link">Next Page</a></li>
</ul>
</nav>
</footer>
这个想法是你有section
它包含前几篇文章 - 并让你在页面上滚动。在底部,您more
在 a 中有一个链接footer
,当 JavaScript 被禁用时,它应该充当常规的“下一个”链接。
Waypoint 使用此链接触发下一次加载。每当链接即将显示在屏幕上时,我们将使用 ajax 自动获取下一篇文章。
所以 JavaScript 部分看起来像这样:
$(document).ready(function() {
function loadMorePosts( callback ){
$.get($('.more a').attr('href'), function(data) {
$('#container').append($(data));
if ( typeof(callback) == "function" ){ callback(); }
})
}
loadMorePosts();
var $footer = $('footer');
var opts = {
offset: '100%'
};
$footer.waypoint(function(event, direction) {
$footer.waypoint('remove');
loadMorePosts( function(){ $footer.waypoint(opts);} );
}, opts);
});
该函数loadMorePosts
调用的方法$.get
是一种更简单的语法$.ajax({type:'GET' .. })
。它使用与链接的 href 属性相同的 URL。在我的示例中,href 属性指向“more_posts.php”。
当我的演示加载时,内容完全是空的,所以我继续获取我想展示的第一个帖子。然后我告诉航点在页脚上收听 - 每当页脚靠近时,我就会去获取更多帖子。
我做的一个棘手的部分是$footer.waypoint('remove')
传递一个callback
将loadMorePosts
航路点再次绑定到页脚的地方。这只是一个技术性问题 - 航点需要您在获取更多 HTML 时删除触发器,否则您的页面可能会表现得很有趣..
这或多或少是..
我试图让这个尽可能简单,但这是一个需要在一个答案中涵盖的大问题。所以让我知道我是否可以做更多的事情来解决问题。