Jquery 延迟加载博客文章
我有一个博客帖子列表,数量已经达到25+了,但都在一个页面中,所以我需要尝试构建一个延迟加载程序 我尝试过各种插件,但没有一个是有效的 是否有方法检查div的顶部值,如果它在视图中,则添加一个类,使div可见(页面加载div被隐藏) 我看过这些帖子,但在尝试了各种解决方案后,没有一个对我有效 如果有人能说明这一点,我将不胜感激。 我不知道我错在哪里 非常感谢是一个延迟加载插件的列表,但更多用于图像加载Jquery 延迟加载博客文章,jquery,lazy-loading,Jquery,Lazy Loading,我有一个博客帖子列表,数量已经达到25+了,但都在一个页面中,所以我需要尝试构建一个延迟加载程序 我尝试过各种插件,但没有一个是有效的 是否有方法检查div的顶部值,如果它在视图中,则添加一个类,使div可见(页面加载div被隐藏) 我看过这些帖子,但在尝试了各种解决方案后,没有一个对我有效 如果有人能说明这一点,我将不胜感激。 我不知道我错在哪里 非常感谢是一个延迟加载插件的列表,但更多用于图像加载 你可以尝试的是隐藏除前三个之外的每个blogpost元素,然后on是一个很好的插件,
你可以尝试的是隐藏除前三个之外的每个blogpost元素,然后on是一个很好的插件,可以对进入视图的元素做出反应;他们甚至有。我不知道您的设置如何,但我建议使用jquery找出距页面顶部的距离这将是:
var scrollTop = $(window).scrollTop(),
elementOffset = $('#my-element').offset().top,
distance = (elementOffset - scrollTop);
根据此堆栈溢出帖子:
把这些应用到你的第25篇文章中,在每一篇文章上都加上编号的id或名字(我想这个页面是PHP生成的)
然后,当距离达到一定程度时,使用ajax加载更多的博客文章
编辑:可以使用大于的jquery隐藏它们:
$(".element-class:gt(24)").css("display","none");
此处的文档:
然后,只要您滚动过某个滚动顶部,就可以设置
$("visible-element").css("display","block")
编辑2:
试试这个小提琴-我已经尝试过获取元素的顶部并显示内容,当它在视口中时,可以通过ajax调用隐藏或加载内容。试试这个代码。您可以使用敏感度变量进行试验,看看什么最适合您:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
<script type="text/javascript">
var processScroll = true;
var sensitivity = 10;
function handleScroll()
{
if (processScroll) {
processScroll = false;
topHidden = $('.block_hidden:first').offset().top;
if(($(window).scrollTop() + $(window).height() ) > (topHidden + sensitivity))
{
console.log('show now');
$('.block_hidden:first').removeClass('block_hidden').addClass('block');
}
}
processScroll = true;
}
$(document).ready(function()
{
$(window).scroll(handleScroll);
});
</script>
<style>
.block_hidden{
width:300px;
background: green;
margin:5px;
visibility: hidden;
height: 10px !important;
}
.block{
height: 200px;
width:300px;
background: green;
margin:5px;
}
</style>
</head>
<body>
<div class="block"></div>
<div class="block"></div>
<div class="block"></div>
<div class="block_hidden"></div>
<div class="block_hidden"></div>
<div class="block_hidden"></div>
<div class="block_hidden"></div>
<div class="block_hidden"></div>
<div class="block_hidden"></div>
</body>
</html>
var processScroll=true;
var敏感性=10;
函数handleScroll()
{
如果(进程滚动){
processScroll=false;
topHidden=$('.block_hidden:first').offset().top;
如果($(窗口).scrollTop()+$(窗口).height())>(topHidden+灵敏度))
{
log('show now');
$('.block\u hidden:first').removeClass('block\u hidden').addClass('block');
}
}
processScroll=true;
}
$(文档).ready(函数()
{
$(窗口)。滚动(把手滚动);
});
.block_隐藏{
宽度:300px;
背景:绿色;
保证金:5px;
可见性:隐藏;
高度:10px!重要;
}
.街区{
高度:200px;
宽度:300px;
背景:绿色;
保证金:5px;
}
您询问的是延迟加载
答案必须包括服务器端。您的问题没有指定您使用的服务器端语言的类型。在我的回答中,我将使用一些基本的PHP代码来模拟随机的博客文章
延迟加载意味着我们只加载用户可以看到的内容,然后在需要时加载更多数据
加载数据意味着从服务器请求数据。这通常包括但不一定包括。(尽管您可能可以使用AJAX)。JQuery有一个奇妙的特性
最大的问题是-什么应该触发我的下一次加载-因此所有的插件
我接受了Tgr的建议,并用航路点实现了一个延迟加载。我甚至按照Tgr的建议使用(请给Tgr更多的分数)
您可以在上看到我的实现
我所做的是更改标题的模拟博客文章。每次用户向下滚动足够多,我就会从服务器上收到更多的帖子
我为我的源代码添加了一个下载链接,以便您可以下载并开始使用它。只要运行main.html
就可以了
文件more_posts.php
生成一个带有随机标题的lorem ipsum
post。(我需要一些假内容才能在页面上有一个滚动条)
看起来像这样
<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>
这个想法是你有一个部分
,它包含了前几篇文章,并且可以让你在页面上滚动。在底部,在页脚
中有一个更多
链接,当禁用JavaScript时,该链接应作为常规的“下一个”链接
航路点使用此链接触发下一次装载。每当链接即将显示在屏幕上时,我们都将使用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”
当我的演示加载时,内容完全是空的,所以我继续获取我想要显示的第一篇文章。然后我告诉waypoint听页脚的声音——每当页脚靠近时,我就会去获取更多的帖子
有一个棘手的部分,我执行$footer.waypoint('remove')
并将回调传递给loadMorePosts
,该回调再次将waypoint绑定到footer。这只是一个技术性问题-航路点需要您在获取更多HTML时删除触发器,否则您的页面可能会表现得很滑稽
这或多或少是
我试着让这个问题尽可能简单,但这是一个巨大的问题,在一个答案中涵盖。
所以,如果我能做得更多,请告诉我 抱歉,我需要能够根据div的y位置延迟加载div,至少我认为这是解决方案。你知道延迟加载是否可以加载不仅仅是图像吗?对不起,我不是故意要让人痛苦,但这是一个延迟加载吗?我不想要一个无限长的卷轴,当div在视图中时,它会自动消失。感谢您的快速响应。延迟加载意味着您在用户到达之前不会加载内容;你似乎有某种“懒惰的表现”的想法。身份证
$(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);
});