jQueryを使い、スクロール可能な親要素のスクロールに対応して子要素を追加する方法。
jQueryを使わないで作る方法については、「JavaScriptで親要素のスクロールに対応して子要素を追加する方法」のページへ。
フェードインで追加する方法については、「jQueryで親要素のスクロールに対応して子要素をフェードインで追加する方法」のページへ。
実装例
項目数:10
- 項目1
- 項目2
- 項目3
- 項目4
- 項目5
- 項目6
- 項目7
- 項目8
- 項目9
- 項目10
実装例(サンプル)の動作について
背景色が黄色のボックス要素を縦スクロールすると、
- 「項目数:」の右横に、現在のリスト項目数を表示する。
- 現在のリストの最後の項目がボックス内に現れると、新たに項目を1つ追加する。
ソースコード
JavaScript
<script type="text/javascript">
jQuery( function() {
var $addItemNumber = 0;
jQuery( '#sampleList' ).scroll( function () {
var $lastElement;
var $bottomPosition = this.scrollTop + this.clientHeight;
$sampleList = jQuery( '*', this );
$lastElement = $sampleList[$sampleList.length-1];
var $lastElementPosition = $lastElement.offsetTop - this.offsetTop;
if( $lastElementPosition < $bottomPosition ){
jQuery( this ).append( '<li>追加項目' + ++$addItemNumber + '</li>' );
}
jQuery( '#itemCount' ).text( $sampleList.length );
} );
} );
</script>
jQuery( function() {
var $addItemNumber = 0;
jQuery( '#sampleList' ).scroll( function () {
var $lastElement;
var $bottomPosition = this.scrollTop + this.clientHeight;
$sampleList = jQuery( '*', this );
$lastElement = $sampleList[$sampleList.length-1];
var $lastElementPosition = $lastElement.offsetTop - this.offsetTop;
if( $lastElementPosition < $bottomPosition ){
jQuery( this ).append( '<li>追加項目' + ++$addItemNumber + '</li>' );
}
jQuery( '#itemCount' ).text( $sampleList.length );
} );
} );
</script>
使用している主なjQuery api
- scroll( fn )
- jQuery( ‘#id’ )
- jQuery( selector[, context] )
- append( content[, content] )
- text( textString )
- jQuery( callback )
HTML
<p>
項目数:<span id="itemCount">10</span>
</p>
<ol id="sampleList">
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
<li>項目4</li>
<li>項目5</li>
<li>項目6</li>
<li>項目7</li>
<li>項目8</li>
<li>項目9</li>
<li>項目10</li>
</ol>
項目数:<span id="itemCount">10</span>
</p>
<ol id="sampleList">
<li>項目1</li>
<li>項目2</li>
<li>項目3</li>
<li>項目4</li>
<li>項目5</li>
<li>項目6</li>
<li>項目7</li>
<li>項目8</li>
<li>項目9</li>
<li>項目10</li>
</ol>
CSS
<style>
#sampleList {
width: 300px;
height: 200px;
margin: 0;
padding: 0 10px;
overflow: scroll;
background-color: yellow;
list-style-position: inside;
}
</style>
#sampleList {
width: 300px;
height: 200px;
margin: 0;
padding: 0 10px;
overflow: scroll;
background-color: yellow;
list-style-position: inside;
}
</style>