jQuery animate関数を使ってつぎの2つの機能を合せてカスタマイズします。
ここのデモでは、4つの動作機能を確認することができます。
本ページは、以下の2つの機能についてカスタマイズしています。2つの機能の詳細なカスタマイズ方法については、それぞれのリンク先を参照してください。
$('#divScrollTextCont').scroll(function(){ if( scrollFlag == true ){ scrollcounter = $(this).scrollTop(); } //スクロールバー操作によるスクロール位置の取得 }); // scrollFlag :trueは「スクロールバーの操作でスクロール」や「キーボードの↑↓矢印キーの押下でスクロール」の場合
<!-- (1)のソースコード --> <!-- jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <!-- メイン関数 --> <script type="text/javascript"> //グローバル変数1 var scrollcounter, scrollEndtop; var downTimer , upTimer; //setTimeout ID //グローバル変数2 定数設定値3つ↓(好みにより修正) var settimeoutSpeed =350; //1 setTimeoutの時間=350ms毎に繰り返す(ms) var animateTime = 300; //2 animateのスライドUP/DOWNの一回の動作時間=300ms、settimeoutSpeed > animateTime であること(ms) var scrollupdownvalue = 30; //3 animateのスライドUP/DOWNの一回の移動量:PX値(px) //メイン $(document).ready(function(){ var innerHp = $('#divScrollTextCont').innerHeight(); //表示要素(以下要素と言う)のCSS定義(height+padding paddingのデフォルト値はtop,bottomそれぞれ10px)の高さ(px) var scrollHp = $('#divScrollTextCont').get(0).scrollHeight; //要素の現在の実際の高さ(px)(入力テキストの高さ) var scrollFlag = true; //スクロールバー操作フラグ true:スクロールバー操作 scrollEndtop = scrollHp-innerHp; //スクロール最下位置のTOPの高さ(px)(最大スクロール移動量) scrollcounter = 0; //スクロール歩進カウンター(要素のスクロール位置(高さ)を示す)(px) // ScrollUPボタン マウスオーバー //////////////// $("#up-button").on('mouseenter', function(){ if (-scrollupdownvalue < scrollcounter) { scrollFlag = false; ScrollUp(); //setTimeout( 'ScrollUp()' ); } else{ scrollcounter = 0; scrollFlag = true; } }); // ScrollDOWNボタン マウスオーバー //////////////// $("#down-button").on('mouseenter', function(){ if (scrollcounter < scrollEndtop+scrollupdownvalue) { scrollFlag = false; ScrollDown(); //setTimeout( 'ScrollDown()' ); } else{ scrollFlag = true; return false; } }); // ScrollUP/ScrollDOWNボタン マウスアウト スクロール中断 ////////// $("#up-button").on('mouseleave', function(){ scrollFlag = true; clearTimeout(upTimer); $("#divScrollTextCont").stop(); }); $("#down-button").on('mouseleave', function(){ scrollFlag = true; clearTimeout(downTimer); $("#divScrollTextCont").stop(); }); // DIVスクロール位置(scrollTop)の取得:scroll関数 /////////////////// $('#divScrollTextCont').scroll(function(){ if( scrollFlag == true){ scrollcounter = $(this).scrollTop(); } }); }); // メイン$(document).ready(function()のEND // 外部関数 ScrollUP関数/ScrollDown関数 ///////////////////// //ScrollUP実行 function ScrollUp(){ if (-scrollupdownvalue < scrollcounter) { scrollcounter = scrollcounter-scrollupdownvalue; //スクロール歩進カウンター(カウントダウン) $('#divScrollTextCont').animate({scrollTop: scrollcounter}, animateTime, 'linear'); upTimer = setTimeout( 'ScrollUp()' , settimeoutSpeed); //スクロールを繰り返す } else{ $("#divScrollTextCont").stop(); scrollcounter = 0; return false; } } //ScrollDown実行 function ScrollDown(){ if (scrollcounter < scrollEndtop+scrollupdownvalue) { scrollcounter = scrollcounter+scrollupdownvalue; //スクロール歩進カウンター(カウントアップ) $('#divScrollTextCont').animate({scrollTop: scrollcounter}, animateTime, 'linear'); downTimer = setTimeout( 'ScrollDown()' , settimeoutSpeed); //スクロールを繰り返す } else{ $("#divScrollTextCont").stop(); return false; } } </script>
<style type="text/css"> /* animate関連 positionがrelativeの例 */ #divScrollTextCont { width:300px; height:350px; overflow:auto; visibility:visible;padding:10px;background-color:#F5F5DC;} /*親VID */ #divText {padding:5px} /*子VID */ #up-button { margin-left:150px; margin-bottom:0px; width:10px; } /*スクロールダウンボタン ↓*/ #down-button { margin-left:150px; margin-top:10px; width:10px; } /*スクロールアップボタン ↑*/ #divopencloseButton { margin-left:5px; margin-bottom:10px; width:10px; } /* DIV要素の高さ変更ボタン */ </style>
4つのアイコン画像を使用しています。
<div id="up-button" onclick="return false;" style="float: left;"><img src="black_up.gif"> </div> <div id="divopencloseButton" style="float: left;"> <img src="img/height-open.gif" id="opencloseButton" title="開く - 全体表示"> </div> <div style="clear: both;"></div> <DIV id="divScrollTextCont" class="boxShadow"> <!-- 対象のDIVブロック --> <div id="divText"> <!-- 任意 --> <font color=green>☆What's New!</font><br> <pre> 国内 台風は温帯低気圧に 暴風警戒new 豊洲 石原氏がヒアリング拒否写真new 福島事故費 東電に再編要請へ写真new 自民、総裁任期を延長へ写真 令状なしのGPS捜査 大法廷へ 新国立維持費 年24億円に減少写真 強姦再審で無罪 男性が国提訴 将棋棋士 対局室にスマホ禁止写真 ・・・ ・・・ ***** End of text ***** </pre> </div> </DIV> <div id="down-button" onclick="return false;"><img src="black_down.gif"> </div>
ソースコードをまとめました。このソースコードのデモを別ウィンドウで見る。
<html> <head> <title>デモ~「ボタンのマウスオーバーで、DIVブロックのテキストをスクロールアップ、ダウンする」と 「ボタンのクリックで、DIVブロックの高さを変更しoverflowの隠れているテキストを表示する」を併用する </title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <!-- jQuery --> <script type="text/javascript" src="http://code.jquery.com/jquery-latest.min.js"></script> <!-- メイン関数 --> <script type="text/javascript"> //グローバル変数1 var scrollcounter, scrollEndtop; var downTimer , upTimer; //setTimeout ID //グローバル変数2 定数設定値3つ↓(好みにより修正) var settimeoutSpeed =350; //1 setTimeoutの時間=350ms毎に繰り返す(ms) var animateTime = 300; //2 animateのスライドUP/DOWNの一回の動作時間=300ms、settimeoutSpeed > animateTime であること(ms) var scrollupdownvalue = 30; //3 animateのスライドUP/DOWNの一回の移動量:PX値(px) //メイン $(document).ready(function(){ var innerHp = $('#divScrollTextCont').innerHeight(); //表示要素(以下要素と言う)のCSS定義(height+padding paddingのデフォルト値はtop,bottomそれぞれ10px)の高さ(px) var scrollHp = $('#divScrollTextCont').get(0).scrollHeight; //要素の現在の実際の高さ(px)(入力テキストの高さ) var scrollFlag = true; //スクロールバー操作フラグ true:スクロールバー操作 scrollEndtop = scrollHp-innerHp; //スクロール最下位置のTOPの高さ(px)(最大スクロール移動量) scrollcounter = 0; //スクロール歩進カウンター(要素のスクロール位置(高さ)を示す)(px) // ScrollUPボタン マウスオーバー //////////////// $("#up-button").on('mouseenter', function(){ if (-scrollupdownvalue < scrollcounter) { scrollFlag = false; ScrollUp(); //setTimeout( 'ScrollUp()' ); } else{ scrollcounter = 0; scrollFlag = true; } }); // ScrollDOWNボタン マウスオーバー //////////////// $("#down-button").on('mouseenter', function(){ if (scrollcounter < scrollEndtop+scrollupdownvalue) { scrollFlag = false; ScrollDown(); //setTimeout( 'ScrollDown()' ); } else{ scrollFlag = true; return false; } }); // ScrollUP/ScrollDOWNボタン マウスアウト スクロール中断 ////////// $("#up-button").on('mouseleave', function(){ scrollFlag = true; clearTimeout(upTimer); $("#divScrollTextCont").stop(); }); $("#down-button").on('mouseleave', function(){ scrollFlag = true; clearTimeout(downTimer); $("#divScrollTextCont").stop(); }); // DIVスクロール位置(scrollTop)の取得:scroll関数 /////////////////// $('#divScrollTextCont').scroll(function(){ if( scrollFlag == true){ scrollcounter = $(this).scrollTop(); } }); }); // メイン$(document).ready(function()のEND // 外部関数 ScrollUP関数/ScrollDown関数 ///////////////////// //ScrollUP実行 function ScrollUp(){ if (-scrollupdownvalue < scrollcounter) { scrollcounter = scrollcounter-scrollupdownvalue; //スクロール歩進カウンター(カウントダウン) $('#divScrollTextCont').animate({scrollTop: scrollcounter}, animateTime, 'linear'); upTimer = setTimeout( 'ScrollUp()' , settimeoutSpeed); //スクロールを繰り返す } else{ $("#divScrollTextCont").stop(); scrollcounter = 0; return false; } } //ScrollDown実行 function ScrollDown(){ if (scrollcounter < scrollEndtop+scrollupdownvalue) { scrollcounter = scrollcounter+scrollupdownvalue; //スクロール歩進カウンター(カウントアップ) $('#divScrollTextCont').animate({scrollTop: scrollcounter}, animateTime, 'linear'); downTimer = setTimeout( 'ScrollDown()' , settimeoutSpeed); //スクロールを繰り返す } else{ $("#divScrollTextCont").stop(); return false; } } </script> <!-- animate関数(heightプロパティ) --> <script type="text/javascript"> $(document).ready( function() { var flag = true; var divBlockscrollHeight = $( '#divScrollTextCont' ).get(0).scrollHeight; // テキストの全体の高さ var divBlockHeight = $( '#divScrollTextCont' ).height(); // DIVブロック CSS定義の高さ paddingを除く $( '#opencloseButton' ).click( function() { if( flag ){ //開く flag = false; $( '#divScrollTextCont' ).animate( { height: divBlockscrollHeight}, { duration: 'slow' } ); $(this).attr( {'src': 'img/height-close.gif' , 'title': '閉じる' }); //閉じるボタンに変更 }else{ //閉じる flag = true; $( '#divScrollTextCont' ).animate( { height: divBlockHeight }, { duration: 'slow' } ); $(this).attr( { 'src': 'img/height-open.gif' , 'title': '開く - 全体表示' }); //開くボタンに変更 } }); }); </script> <style type="text/css"> /* animate関連 positionがrelativeの例 */ #divScrollTextCont { width:300px; height:350px; overflow:auto; visibility:visible;padding:10px;background-color:#F5F5DC;} /*親VID */ #divText {padding:5px} /*子VID */ #up-button { margin-left:150px; margin-bottom:0px; width:10px; } /*スクロールダウンボタン ↓*/ #down-button { margin-left:150px; margin-top:10px; width:10px; } /*スクロールアップボタン ↑*/ #divopencloseButton { margin-left:5px; margin-bottom:10px; width:10px; } /* DIV要素の高さ変更ボタン */ </style> <style> /* 本ページ用 CSS */ body { max-width: 800px; margin: 0; padding-left: 5px; padding-top: 0px; background:#dcdcdc; } h2 {font-family: "MS ゴシック",sans-serif; color:#000000} body,DIV,pre,table,td{ color: #333; font: 14px 'Lucida Grande', Verdana, sans-serif; } /* LIタグで横並び */ UL.lilist li { float: left; list-style-type: none; } UL.lilist { zoom:1; overflow: hidden;} /* 横並びの ClearHack */ div.boxShadow { -webkit-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); -moz-box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); box-shadow: 0 10px 25px rgba(0, 0, 0, 0.5); } /*親DIVブロックに影を付ける*/ </style> </head> <body> <h3 style="margin-top:10px;text-align:center"> 「ボタンのマウスオーバーで、DIVブロックのテキストをスクロールアップ、ダウンする」および<br> 「ボタンのクリックで、DIVブロックの高さを変更しoverflowの隠れているテキストを表示する」<br>を併用する - デモ</h3> <div id="up-button" onclick="return false;" style="float: left;"><img src="black_up.gif"> </div> <div id="divopencloseButton" style="float: left;"> <img src="img/height-open.gif" id="opencloseButton" title="開く - 全体表示"> </div> <div style="clear: both;"></div> <DIV id="divScrollTextCont" class="boxShadow"> <div id="divText"> <!-- 任意 --> <font color=green>☆What's New!</font><br> <pre> 国内 台風は温帯低気圧に 暴風警戒new 豊洲 石原氏がヒアリング拒否写真new 福島事故費 東電に再編要請へ写真new 自民、総裁任期を延長へ写真 令状なしのGPS捜査 大法廷へ 新国立維持費 年24億円に減少写真 強姦再審で無罪 男性が国提訴 将棋棋士 対局室にスマホ禁止写真 ・・・ ・・・ ***** End of text ***** </pre> </div> </DIV> <div id="down-button" onclick="return false;"><img src="black_down.gif"> </div> </body> </html>