使用:jQuery Waypoints和Masonry创建无限滚动网格布局。除此之外,他们工作正常。但是,我无法弄清楚如何让它们一起工作。
航点代码
$(document).ready(function() {
var $loading = $(""),
$footer = $('footer'),
opts = {
offset: '100%',
continuous: 'true'
};
$footer.waypoint(function(event, direction) {
$footer.waypoint('remove');
$('body').append($loading);
$.get($('.more a').attr('href'), function(data) {
var $data = $(data);
$('#containerd').append($data.find('.poster3'));
$('.more').replaceWith($data.find('.more'));
$footer.waypoint(opts);
});
}, opts);
});
砌体代码(更新动画9/18/2011)
var $j = jQuery.noConflict();
$j(function(){
$j('#mason3').masonry({
itemSelector: '.poster3',
isAnimated: !Modernizr.csstransitions
});
});
我看过Masonry Infinite Scroll示例,但是我无法让Infinite Scroll在我的页面上工作(这就是我开始使用Waypoints的原因)。
问题在于,当使用Waypoints加载div时,它们无法通过Masonry将自己正确地对齐到网格中。除此之外,任何rel =标签都在加载的对象上被否定(也使用工具提示脚本来创建html工具提示。)
所以基本上,我正在做的事情:[1]当通过Waypoint加载div时,使用新加载的航点更新网格布局div ,而保持所述div的所有数据完好无损(正确射击)就像前面提到的工具提示问题一样。可以在http://regchan.org/ib/dev/处直接看到问题的一个例子。 (页面设置为最初加载4个div,这是前4个,然后从以下页面加载4(如果适用),直到没有更多可用。)
.poster3是包含图像的div的类,#mason是围绕动态创建的内容的选择器div。
修改 看看Masonry网站上的无限滚动代码,并将一些东西拼接在一起(尽管它没有抓取数据):
var $j = jQuery.noConflict();
$j(function(){
var $jcontainer = $j('#mason');
$jcontainer.imagesLoaded(function(){
$jcontainer.masonry({
itemSelector: '.poster3',
});
});
(function() {
var $jloading = $j(""),
$jfooter = $j('footer'),
opts = {
offset: '100%',
continuous: 'true'
};
$jfooter.waypoint(function(event, direction) {
$jfooter.waypoint('remove');
$j('body').append($jloading);
$j.get($j('.more a').attr('href'), function(data) {
var $jdata = $j(data);
$j('#containerd').append($jdata.find('.poster3'));
$j('.more').replaceWith($jdata.find('.more'));
$jfooter.waypoint(opts);
});
}, opts)});
// trigger Masonry as a callback
function( newElements ) {
var $jnewElems = $j( newElements );
// ensure that images load before adding to masonry layout
$jnewElems.imagesLoaded(function(){
$jcontainer.masonry( 'appended', $jnewElems, true );
});
}
}
);
然而,Firebug没有丢失任何错误。
答案 0 :(得分:1)
这是一个非常简单但完整的解决方案,可以毫无困难地将它们结合起来:
<script src="js/vendor/masonry.pkgd.min.js"></script>
<script src="js/waypoints.min.js"></script>
<script src="js/waypoints-infinite.js"></script>
<script>
$(window).load(function() {
var container = $('.infinite-container');
container.masonry({
itemSelector: '.box'
});
$('.infinite-container').waypoint('infinite', {
container: 'auto',
items: '.box',
more: '.infinite-more-link',
offset: 'bottom-in-view',
loadingClass: 'infinite-loading',
onBeforePageLoad: $.noop,
onAfterPageLoad: function() {
$(container).masonry('reloadItems');
$(container).masonry('layout')
}
});
});
</script>