我花了大量时间试图让同位素和延迟加载一起工作。
问题:延迟加载工作,如果用户向下滚动,但如果用户使用的过滤器,该项目显示在顶部,但图像将不会加载。
这是有人用同样的问题,但似乎他固定它。 我试过几件事情,但仍不可能得到它的工作。
这里是dicussion https://github.com/tuupola/jquery_lazyload/issues/51
非常感谢你的帮助
我使用的代码如下。
jQuery(document).ready(function($) {
$('#big_container .media_block img').each(function(index) {
var item_height = $(this).attr("height");
$(this).parent().parent().css("height",item_height);
});
$('#big_container').isotope({
itemSelector : '.item',
layoutMode : 'masonry',
masonry: {
columnWidth: 5,
},
sortBy : 'date',
sortAscending : false,
getSortData : {
date : function ( $elem ) {
return $elem.find('.date').text(); // Date format should be [Y-m-d H:i]
},
views : function( $elem ) {
return parseInt( $elem.attr('data-views'), 10 );
},
//featured : function ( $elem ) {
// return $elem.attr('data-featured');
// },
rates : function( $elem ) {
return parseInt( $elem.attr('data-rates'), 10 );
},
comments : function( $elem ) {
return parseInt( $elem.attr('data-comments'), 10 );
}
}
});
$('#sort-by li a').click(function(){
var $this = $(this);
if ($(this).parent().hasClass('selected') ) {
return false;
}
var $optionSet = $this.parents();
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');
var sortName = $(this).attr('href').slice(1);
$('#big_container').isotope({ sortBy : sortName });
return false;
});
});
要获得同位素的排序/过滤与lazyload工作,你必须做到以下几点。
jQuery(document).ready(function($) {
var $win = $(window),
$con = $('#container'),
$imgs = $("img.lazy");
$con.isotope();
$con.on('layoutComplete', function(){
$win.trigger("scroll");
});
$imgs.lazyload({
failure_limit: Math.max($imgs.length - 1, 0)
});
});
说明
根据该文档( http://www.appelsiini.net/projects/lazyload )
滚动页面延迟加载后循环虽然卸载图像。 在循环它会检查是否形象变得可见。 默认情况下,循环当折叠(不可见)下图1中找到被停止。 这是基于以下的假设。 页面上的图像的顺序是一样的HTML代码图像的顺序。 对于一些布局的假设,这可能是错误的。
用同位素排序/过滤列表的页面顺序肯定是不同于HTML,所以我们需要调整我们的failure_limit
。
正如你可以看到我们存储的jQuery对象,以便我们可以使用它的length-1
作为我们failure_limit。 如果你很好奇,为什么它是length-1
,这是因为在lazyload的更新方法如下检查。
if (++counter > settings.failure_limit) {
return false;
}
其它事件延迟加载
如果不触发滚动你的lazyloads,你将需要交换的任何一个事件,你正在使用的“滚动”触发。
演示
http://jsfiddle.net/arthurc/ZnEhn/
代码为您的网站
我保存了一些jQuery的对象的变量,因为他们需要被重新使用。
jQuery(document).ready(function($) {
var $window = $(window);
var $images = $('#big_container .media_block img');
var $big_container = $('#big_container');
$images.each(function(index) {
var item_height = $(this).attr("height");
$(this).parent().parent().css("height",item_height);
});
$big_container.isotope({
itemSelector : '.item',
layoutMode : 'masonry',
masonry: {
columnWidth: 5,
},
sortBy : 'date',
sortAscending : false,
getSortData : {
date : function ( $elem ) {
return $elem.find('.date').text(); // Date format should be [Y-m-d H:i]
},
views : function( $elem ) {
return parseInt( $elem.attr('data-views'), 10 );
},
//featured : function ( $elem ) {
// return $elem.attr('data-featured');
// },
rates : function( $elem ) {
return parseInt( $elem.attr('data-rates'), 10 );
},
comments : function( $elem ) {
return parseInt( $elem.attr('data-comments'), 10 );
}
}
});
$big_container.on('layoutComplete', function(){
$win.trigger("scroll");
});
$('#sort-by li a').click(function(){
var $this = $(this);
if ($(this).parent().hasClass('selected') ) {
return false;
}
var $optionSet = $this.parents();
$optionSet.find('.selected').removeClass('selected');
$this.addClass('selected');
var sortName = $(this).attr('href').slice(1);
$big_container.isotope({ sortBy : sortName });
return false;
});
$images.lazyload({
failure_limit : Math.max($images.length-1, 0);
})
});