Step.10 - メッセージを1文字ずつ表示して最後に点滅させる


メッセージを左から1文字ずつ表示していきます。その後、5回点滅させます。


Step テーマ
● ++インクリメント演算子
● +=代入演算子

実行例




リスト


<script type="text/javascript"><!--
myMsg = "いらっしゃいませ こんにちは!";
myCnt = 0;
myDspFlg = 0;
function myFunc(){
     if ( myDspFlg == 0 ){
         document.myForm.myFormMes.value = myMsg.substring(0,myCnt);
         if ( myCnt == myMsg.length ){
             myCnt = 0;
             myDspFlg = 1;
         }else{
             myCnt += 1;
         }
     }else if ( myDspFlg == 1 ){
         document.myForm.myFormMes.value = "";
         myDspFlg = 2;
     }else{
         document.myForm.myFormMes.value = myMsg;
         myCnt ++;
         if ( myCnt == 5 ){
             myDspFlg = 0;
             myCnt = 0;
         }else{
             myDspFlg = 1;
         }
     }
}
// --></SCRIPT>

<form name="myForm">
<input type="text" size="30" name="myFormMes">
</form>
<script type="text/javascript"><!--
setInterval("myFunc()",200);
// --></SCRIPT>


サンプルだけの HTMLは こちらへ

説明


わっ! リストが長くなりましたね!

はい。Step.8 と Step.9 をセットにしましたから。(^^;
この 2つの Step を制覇した人は、コーヒーブレイクの Step です。

おさらい程度にリストの流れを説明します。

今回は、タイプ表示と点滅表示を交互に処理するので、どっちの処理をするか(しているか)を判断させるために myDspFlg という変数を追加しました。
myDspFlg が 0 の時は、タイプ表示の処理をする
myDspFlg が 1 の時は、点滅の消去処理をする
myDspFlg が 2 の時は、点滅の表示処理をする
としました。

myCnt は、タイプ表示の処理の時は、現在の表示文字位置をカウントさせ、点滅処理の時は、今、何回点滅したかをカウントさせます。一人二役です。


●タイプ表示の部分
if ( myDspFlg == 0 ){
    document.myForm.myFormMes.value=myMsg.substring(0,myCnt);
    if ( myCnt == myMsg.length ){
        myCnt = 0;
        myDspFlg = 1;
    }else{
        myCnt += 1;
    }
}

myDspFlg が タイプ表示(0) の時、表示する文字を抜き出して表示します。
次に最後まで表示したのであれば、次の点滅処理のために myCnt を 0 にします。
そして、myDspFlg を点滅消去処理(1) に変更します。
最後まで表示していなければ、 myCnt を次の文字位置へ移動させます。

●点滅(消去)の部分
else if ( myDspFlg == 1 ){
    document.myForm.myFormMes.value = "";
    myDspFlg = 2;
}
myDspFlg が点滅消去処理(1)の時、フォームをクリアして、myDspFlg を点滅表示処理(2)へ変更します。

●点滅(表示)の部分
else{
    document.myForm.myFormMes.value = myMsg;
    myCnt ++;
    if ( myCnt == 5 ){
        myDspFlg = 0;
        myCnt = 0;
    }else{
        myDspFlg = 1;
    }
}
myDspFlg が点滅表示処理(2)の時、フォームにメッセージを表示します。
表示カウンタ(myCnt)をカウントさせ、5回表示(点滅)したのであれば、再びタイプ表示処理へ戻すために myDspFlg を 0 に戻し、myCnt に 0 をセットしてあげます。
5回点滅表示していなければ、myDspFlg を点滅消去(1)に変更します。

リストが長いわりには、たいしたことないですね。(^^;


今回リストを見ていて、おや? と思ったところが 2箇所ありませんでしたか?

myCnt += myApp; と、myCnt ++; です。

myCnt += myApp; は、myCnt = myCnt + myApp; の省略形です。
myCnt ++; は、myCnt = myCnt + 1; の省略形です。
ただでさえ覚えることだらけなのに、余計なことまで説明するな! と思うでしょうが、そのうち、右側の式を打ち込むのはとてもめんどくさく感じてくるはずです。
プログラミングにおいて上の2つの式は、とにかく何度も使うのです。

+= があるのですから、-= , *= , /= もあります。( a -= 2 は、a = a - 2 と同じこと)
++ があれば、-- もあります。( a=a-1 , a-=1 , a-- は皆同じ )

ちなみに ++ は、インクリメント演算子といって・・・これが余計なんですネ (^^;



演算子一覧



二項演算子名称説明
+加算足し算の記号a + 1
-減算引き算の記号a - 1
*乗算掛け算の記号a * 2
/除算割り算の記号a / 2
%剰余算余りを求める式の記号a % 3

代入演算子
(二項演算子)
名称説明
=代入右辺を左辺に代入a = b
+=加算代入左辺に右辺を加算a += b
(a = a + b)
-=減算代入左辺から右辺を減算a -= b
(a = a - b)
*=乗算代入左辺に右辺を乗算a *= b
(a = a * b)
/=除算代入左辺を右辺で除算a /= b
(a = a / b)
%=剰余算代入左辺を右辺の剰余a %= b
(a = a % b)

単項演算子名称説明
++インクリメント1加算するa++
++a
--デクリメント1減算するa--
--a

インクリメント/デクリメントの注意
a の初期値b の初期値a の結果b の結果
100b = a++ + 111
100b = ++a + 111
100b = (a++) + 111