ボックス内をスクロールすると自動でコンテンツをロードするjQuery

Ads

Warning: Undefined array key "HTTP_USER_AGENT" in /home/youhei0828/kachibito.net/public_html/wp-content/themes/kachibito7_with_cocoon_child/functions-module/other/tiny-fixed.php on line 75

IE6でも7でも動いてくれるのと
なかなか使い勝手も良さそう
なのでメモ。jQueryを使った
コンテンツボックス内の自動
読み込みを実装します。

去年くらいの記事ですけど見逃してたのでメモ。

Facebookをやられてる方はピンと来るかも。下までスクロールすると自動で次のコンテンツが読み込まれますが、それをボックス内で実装したものです。基本的にどのブラウザでも動くみたいです。

Scrolling Dynamic Content box

dynamic-jquery01
このボックス内でスクロールすると自動で次のコンテンツが読み込まれ、アイテムの数も表示されます。というか、見たほうが早いですね。

デモ

ここにテキスト1

ここにテキスト2

ここにテキスト3

ここにテキスト4

ここにテキスト5

ここにテキスト6

ここにテキスト7

ここにテキスト8

コード

コードです。

$('document').ready(function(){
	updatestatus();
	scrollalert();
});
function updatestatus(){
	//ロードしたアイテムの数を表示
	var totalItems=$('#content p').length;
	$('#status').text('現在、 '+totalItems+' 個を表示しています。');
}
function scrollalert(){
	var scrolltop=$('#scrollbox').attr('scrollTop');
	var scrollheight=$('#scrollbox').attr('scrollHeight');
	var windowheight=$('#scrollbox').attr('clientHeight');
	var scrolloffset=20;
	if(scrolltop>=(scrollheight-(windowheight+scrolloffset)))
	{
		//新しいアイテムのロード
		$('#status').text('続きを読み込んでいます・・');
		$.get('読み込むファイルのパス', '', function(newitems){
			$('#content').append(newitems);
			updatestatus();
		});
	}
	setTimeout('scrollalert();', 1500);
}

動作にはjQueryが必要です。テキストは適当に変更してください。

HTML

<div id="mainbody" >

<div id="scrollcontainer">
<div id="scrollbox" >
<div id="content" >
<p>ここにテキスト1</p>
<p>ここにテキスト2</p>
<p>ここにテキスト3</p>
<p>ここにテキスト4</p>
<p>ここにテキスト5</p>
<p>ここにテキスト6</p>
<p>ここにテキスト7</p>
<p>ここにテキスト8</p>
</div>

</div>
<p><span id="status" ></span></p>
</div>

$.getで指定したファイルがスクロールする事で読み込まれます。数値はvar totalItems=$(‘#content p’).length;で指定しているのでリストで表示したいならpをliなどに変更すればいいっぽい。

ブログのサイドバーにcssが影響してますが気にしないで下さい。

デモではhtmlを読み込んでいるので同じ内容が繰り返されていますが、用途は動的なコンテンツになりそうですね。検索ページとかアーカイブにもいいかも。

[note]【追記】
お友達のヤクモさんが改良してくれましたよ。処理スピードも速いです。ぜひご覧下さい。
ボックス内をスクロールすると自動でコンテンツをロードするjQueryをちょっと変えてみた[/note]

Create a Dynamic Scrolling Content Box Using AJAX

'}}})()
');$("#header-fixed").css({'padding-top':`${threashold}px`,});$("#header-container-in").removeClass('hlt-center-logo hlt-center-logo-top-menu').addClass("hlt-top-menu wrap");$("#header-container").addClass("fixed-header");$("#header-container").css({'position':'fixed','top':'-100px','left':'0','width':'100%',});const wpadminbar=document.getElementById('wpadminbar');const headerContainerTop=wpadminbar?wpadminbar.clientHeight:0;$('#header-container').animate({top:headerContainerTop,},500)}} function staticHeader(){if($("#header-container").hasClass("fixed-header")){$("#header-container-in").removeClass("hlt-top-menu hlt-tm-right hlt-tm-small hlt-tm-small wrap").addClass(" hlt-top-menu hlt-tm-right hlt-tm-small wrap");$("#header-container").removeClass("fixed-header");$("#header-container").css({'position':'static','top':'auto','left':'auto','width':'auto',});$("#header-fixed").css({'padding-top':'0',});$("#header-fixed").remove()}} var threashold=$('#header-container').height();var prevScrollTop=-1;var $window=$(window);var mobileWidth=1023;$window.scroll(function(){var scrollTop=$window.scrollTop();var s1=(prevScrollTop>threashold);var s2=(scrollTop>threashold);var w=$window.width();function adjustScrollArea(selector){if($(selector)&&$(selector).offset()){offset=$(selector).offset().top;h=$("#header-container").height();pt=$(selector).css('padding-top');if(pt){pt=pt.replace('px','')}else{pt=0} if((scrollTop>=offset-h)&&(w>mobileWidth)){if((pt<=1)&&$("#header-container").hasClass('fixed-header')){$(selector).css({'padding-top':h+'px',})}}else{if(pt>0){$(selector).css({'padding-top':0,})}}}} function adjustScrollAreas(){adjustScrollArea('#sidebar-scroll');adjustScrollArea('#main-scroll')} function adjustFixedHeaderStyle(s1,s2,w,scrollTop,mobileWidth){if(s1^s2){if(s2&&(w>mobileWidth)){stickyHeader()}} if(scrollTop<=threashold||w<=mobileWidth){staticHeader()}} adjustFixedHeaderStyle(s1,s2,w,scrollTop,mobileWidth);adjustScrollAreas();prevScrollTop=scrollTop});$window.resize(function(){var w=$window.width();if(w<=mobileWidth){staticHeader()}else{var scrollTop=$window.scrollTop();if(scrollTop>=50){stickyHeader()}}})})(jQuery)