先日ふとしたところで、ブラウザのスクロール値によって表示の切り替えを行う必要があり、
jQueryでスクロール量を測るサンプルを作ったので紹介してみます。
jQueryでブラウザのスクロールされた際の値を取るには
『.scrollTop(縦スクロール)』もしくは『.scrollLeft(横スクロール)』などがありますが、
あまり横スクロールで何か制御をするってことは少なく、縦スクロール値を取得する『.scrollTop』を使用することがほとんど。
なので、今回はページTOPからスクロールされた値『.scrollTop』を取得する際のサンプル。
実際の取得する際の記述方法は
$(window).scrollTop(); $(document).scrollTop();
といった書き方でページのTOPからの距離を測れます。
『$(‘html’).scrollTop();』でもいけるっぽいですが、Safariの3以前ではきちんと動作してくれないようで。。。
スクロール値を取得する動作サンプルは以下。
iframe内をスクロールすると左上の『現在のスクロール位置』にスクロールされた値が表示されます。
※サンプルはiframeなのでページTOP位置はiframeスクロールエリアの一番上が基準になっています。
境界線を3つ用意してあり、ページTOPから「150px」「300px」「500px」を過ぎると
それぞれ右上に通過エリア(テキスト)が表示されます。
このサンプルの構成は以下のような感じに。
◆HTML <div id="container"> <div id="interval">現在のスクロール位置:<input type="text" size="10" value="0" id="intervalValue" /></div> <div id="section150">ページTOPから<strong>150px</strong>地点</div> <div id="section300">ページTOPから<strong>300px</strong>地点</div> <div id="section500">ページTOPから<strong>500px</strong>地点</div> </div><!--/container-->
◆SCRIPT $(function(){ $(window).scroll(function () { var ScrTop = $(document).scrollTop(); $('#intervalValue').val(ScrTop); if ($('#intervalValue').val() < 150) { $('#alert150').remove(); $('#alert300').remove(); $('#alert500').remove(); } if ($('#intervalValue').val() > 150) { if(document.getElementById("alert150") === null){ $('body').prepend('<div id="alert150">ページTOPから<span>150px</span>通過</div>'); $('#alert300').remove(); $('#alert500').remove(); } } if ($('#intervalValue').val() > 300 ) { if(document.getElementById("alert300") === null){ $('body').prepend('<div id="alert300">ページTOPから<span>300px</span>通過</div>'); $('#alert150').remove(); $('#alert500').remove(); } } if ($('#intervalValue').val() > 500 ) { if(document.getElementById("alert500") === null){ $('body').prepend('<div id="alert500">ページTOPから<span>500px</span>通過</div>'); $('#alert150').remove(); $('#alert300').remove(); } } }); });
スクロール地点によって何か表示するものを変化させたい場合や、
最近たまに見かける、追尾型のメニューエリアなどでもこの『.scrollTop』を使えば簡単に作成可能になります。
その他はあまり使用する場面がないかもしれませんが…
そんなこんなですが、
スクロール制御したい際には是非。。。