jQuery のアニメーション(fadeIn)を使って、指定した要素の文字列を順番に表示する方法。
//文字列を順番に表示する関数 //target:文字列を順番に表示する要素を指定 //speed:表示するスピード(オプション。デフォルトは100) //sep:セパレータ(分割文字)。1文字ずつではなく、セパレータで区切った文字列を表示する場合に指定 //sep_back:セパレータ(分割文字)を文字列に戻して表示するかどうか。真偽地(デフォルト:false) var text_count = 0; //表示した文字(列)の数(初期化しておく) var text_strings; //表示する文字列 var max_text_count;//文字(列)の数。関数内で指定された要素から文字数を取得 var text_disp_speed; //文字(列)を表示するスピード var separator_back; //セパレータを文字列に戻して表示するかどうか。 var separator; //セパレータ(分割文字)。(デフォルト:'' 空文字) function serial_text(target,speed,sep, sep_back) { if(text_count === 0) { //初回のみ実行 var target$ = $(target); text_disp_speed = speed || 100; //速度が指定してあればそれを代入し、なければデフォルトの100に separator_back = sep_back ? true : false; //セパレータを文字列に戻して表示するかどうかを指定 separator = sep || ''; //セパレータを指定 text_strings = target$.text(); //テキストを取得 max_text_count = text_strings.length; //テキストの文字数を取得 target$.text(''); //指定された要素のテキストを空にする if(separator) { //セパレータが指定されていれば text_strings = text_strings.split(separator); //セパレータで文字列を分割 max_text_count = text_strings.length; //その数を取得 if(separator_back) { for(var i=0; i < max_text_count -1 ; i++) { //文字列にセパレータを戻す text_strings[i] += separator; } } } }else if(text_count == max_text_count) { //表示した文字数がテキストの文字数に達したら終了 $(target).text(text_strings.toString().replace(/,/g, '')); //文字列を最初の状態に戻す text_count = 0; //表示した文字(列)の数をリセット return; } //span 要素を生成してそれを非表示にし、分割した文字(列)を順番に表示していく $('<span>').css('display', 'none').text(text_strings[text_count]).appendTo(target).fadeIn(text_disp_speed, function(){ text_count ++; //表示した文字(列)の数をインクリメント serial_text(target); //再帰的(?)に繰り返す(第2、第3、第4パラメータは省略) }); }
使用例。
<p id="serialtext" >アニメーション を表示する 領域</p>
上記のような p 要素がある場合、次のように記述する。
serial_text('p#serialtext'); //1文字ずつ順番に表示 serial_text('p#serialtext', 400, ' '); //半角スペースで分割した文字列を順番に表示 serial_text('p#serialtext', 400, ' ', true); //同上(セパレータも表示)
サンプル:
以下をクリックすると、1文字ずつ順に表示。serial_text(‘p#serialtext’);
アニメーション を表示する 領域
以下をクリックすると、半角スペースで分割した文字列を順に表示。serial_text(‘p#serialtext’, 400, ‘ ‘);
(セパレータは削除されるので2回目以降のクリックでは、全体が表示される)
アニメーション を表示する 領域
以下をクリックすると、半角スペースで分割し、セパレータを戻して文字列を順に表示。serial_text(‘p#serialtext’, 400, ‘ ‘, true);
アニメーション を表示する 領域