QUOIT Blog

ボックス内をスクロールすると自動でコンテンツをロードするjQueryをちょっと変えてみた

この記事は7年以上前の記事です。情報が古い場合がありますのでお気を付け下さい。

ボックス内をスクロールすると自動でコンテンツをロードするjQuery – かちびと.net

を読んで、ちょっとやってみたくなったので作った。
言ってもたいしたことやってませんがw

かちびと.netシロさんには許可を頂いてます。

詳細は以下。

上記記事では、下までスクロールしたあとにワンテンポ置いてから(タイマー処理で)コンテンツがロードされる形になってます。

しかし、IEで見てみるとわかるのですが、内側のスクロールが完了した時点で外側のスクロールも動いちゃうんですね。

なので、ロードされる前にページの下に行ってしまう。

これをちょっと改善できないかなーと思って作ったのがこちら。

Auto Scroll Test

コードは以下。

<script type=”text/javascript”>
$(function(){
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=300;
if(scrolltop>=(scrollheight-(windowheight+scrolloffset)))
{
//新しいアイテムのロード
$(‘#status’).text(‘続きを読み込んでいます・・’);
$.get(‘./hoge.txt’, ”, function(newitems){
var arr = newitems.split(“\n”);
for(var i=0;i<arr.length;i++){
$(‘#content’).append(“<p>”+arr[i]+”</p>”);
}
updatestatus();
});
}
}
scrollalert();
$(‘#scrollbox’).scroll(function(){scrollalert();});
});
</script>

HTMLは元記事と同じです。

処理の変更ポイントは、

1)スクロールが一番下に行く前にロードするようにした
var scrolloffset=300;
の部分ですね。
この数値は「スクロールの一番下のポイントからどのくらい離れた位置でロードするか」という設定になってますので、
「20」になってたのを「300」に増やしました。

2)タイマーをやめて、スクロールイベントにバインドした
元スクリプトでは、タイマー処理で1.5秒毎に関数が実行されるようになってました。
これを変更して、スクロールしたら関数を実行するように変えました。
こうすることで、ちょっとはIE対策になってるはず。。

3)おまけ: 読み込み元のテキストを書き方を変えた
読み込む元テキストが

<p>hoge</p>
<p>hogehoge</p>
<p>hogehogehoge</p>

となってて、元テキストにHTMLタグが含まれてるのが気に入らないのでw

hoge
hogehoge
hogehogehoge

を読み込んで、JavaScript側で<p>タグをつけるように変更しました。
完全に好みの問題ですけどw

こんな感じです。

こうしたほうがいいんじゃない?という意見は随時募集!^^

jQueryは簡単に変更できるのが面白いですねー^^

1 comment for “ボックス内をスクロールすると自動でコンテンツをロードするjQueryをちょっと変えてみた