使用: 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);
});
石積みのコード (2011 年 9 月 18 日のアニメーション用に更新)
var $j = jQuery.noConflict();
$j(function(){
$j('#mason3').masonry({
itemSelector: '.poster3',
isAnimated: !Modernizr.csstransitions
});
});
Masonry Infinite Scroll の例を見てきましたが、自分のページで Infinite Scroll を動作させることができません (これが、Waypoints を最初に使用した理由です)。
問題は、div がウェイポイントで読み込まれると、Masonry を介してグリッドに適切に配置されないことです。これに加えて、ロードされたオブジェクトで rel= タグが無効になります (また、Tooltips スクリプトを使用して HTML ツールチップを作成します)。
基本的に、私がやろうとしていること: [1] ウェイポイントを介して div が読み込まれると、前述のツールチップの問題のように、前述の div からのデータをそのまま (適切に起動) に保ちながら、新しく読み込まれたウェイポイント div でグリッド レイアウトを更新します。問題の例は、http://regchan.org/ib/dev/ で直接見ることができます。(ページは最初に 4 つの div をロードするように設定されています。これは最初の 4 つです。次に、次のページ (該当する場合) から 4 つの div がロードされ、それ以上使用できなくなるまでロードされます。)
.poster3 は画像を保持する div のクラスで、#mason は動的に作成されたコンテンツを囲むセレクター div です。
EDIT 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 はエラーをスローしていません。