Dav*_*cia 10 lazy-loading jquery-isotope
我花了相当多的时间试图让同位素和延迟加载一起工作.
问题:如果用户向下滚动,则延迟加载有效,但是如果用户使用过滤器,则项目将显示在顶部但图像将不会加载.
这是有同样问题的人,但似乎他修复了它.我尝试了几件事,但仍然无法使其正常工作.
这是讨论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;
});
});
Run Code Online (Sandbox Code Playgroud)
小智 18
要使同位素的排序/过滤与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)
});
});
Run Code Online (Sandbox Code Playgroud)
根据文档(http://www.appelsiini.net/projects/lazyload)
滚动页面后,Lazy Load循环通过卸载的图像.在循环中,它检查图像是否可见.默认情况下,当找到折叠下方的第一个图像(不可见)时,循环停止.这基于以下假设.页面上的图像顺序与HTML代码中的图像顺序相同.有些布局假设这可能是错误的.
使用同位素分类/筛选列表,页面顺序肯定不同于HTML,因此我们需要调整我们的failure_limit.
正如您所看到的,我们存储了jQuery对象,以便我们可以将其length-1用作我们的failure_limit.如果您length-1对它的原因感到好奇,那是因为lazyload的更新方法中的以下检查.
if (++counter > settings.failure_limit) {
return false;
}
Run Code Online (Sandbox Code Playgroud)
如果您没有在滚动时触发延迟加载,则需要在您使用的任何事件中交换"滚动"触发器.
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);
})
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13291 次 |
| 最近记录: |