A revolving earth (earthani.gif--64x64) Beaverland Net
Net Art
 
English Version (englishv.gif--140x51)

Beaverland Net Art logo (netart2.gif--140x365)

 

Beaverland Net English slangs not found in a dictionary logo (slangs.gif--140x260)

 

Beaverland HTML Made Easy! logo (html01.gif--140x160)

 

JavaScript Made Easy! logo (javascrt.gif--140x360)

 

Revised brand-new Japanese ancient history logo (jhist02.gif--140x300)

 

 

How to use the North-American Computer system in Japanese (jpnword.jpg--140x360)

 

Beaverland Japonica banner (japonic3.gif--140x360)

 

Study in Canada Home Page logo (homepg.gif--160x160)


onstore.gif (140x93)

beavbook.gif (120x160)

beavcomp.gif (120x160)

beavmovi.gif (120x160)

beavgift.gif (120x160)

beavtrav.gif (120x160)

music.gif (50x50) Beaverland Music
 
ベティーさんが走って行く。
ジャバスクリプト
アニメーション
October 20, 2003

Betty is smiling (run01.gif--210x199)

うまく走らない場合は、
下のGIFアニメーションを見てください。

 



   

Betty is smiling (run01.gif--210x199)


これはGIFアニメーションです。
コネクション・スピードが遅いと
ジャバスクリプト・アニメーションは
うまく走りません。

 

ジャバスクリプト・コードは次のようになります。

<script language="javascript">
<!---- to hide

var myTimerID=null
var running=false
var myCount=0
var delayTime=300
var myPics=new Array("images/run01.gif",
"images/run02.gif",
"images/run03.gif",
"images/run04.gif",
"images/run05.gif",
"images/run06.gif",
"images/run07.gif",
"images/run08.gif")

function stopBetty() {
  clearTimeout(myTimerID)
  document.myGal.src="images/june92c.gif"
  }

function startBetty() {
  myCount++
  if (myCount==8) myCount=0
  document.myGal.src=myPics[myCount]
  myTimerID=setTimeout("startBetty()",delayTime)
  }

function dearBetty() {
  if (running) {running=false
                stopBetty()}
  else {running=true
        startBetty()}
  }

//----->
</script>

<form name="thisForm">
<input type="button" value=" START / STOP "
      onClick="dearBetty()">
<p>
<input type="text" size="5"
      name="delayNumber" value="300">

<input type=button value="Faster "
  onClick="if (delayTime > 10) {delayTime -= 10;
      document.thisForm.delayNumber.value = delayTime}"
  onDblClick="if (delayTime > 100) {delayTime -= 100;
      document.thisForm.delayNumber.value = delayTime}">

<input type=button value="Slower"
  onClick="delayTime += 10;
      document.thisForm.delayNumber.value = delayTime"
  onDblClick="delayTime += 100;
      document.thisForm.delayNumber.value = delayTime">
</form>

このページは次に示すページの続きです。もし直接、このページへジャンプした場合には、次のリンクをクリックして読んでください。 このページで目新しいのは、上のコーディング・シートの白地の部分だけです。

ここでは、その部分について説明します。それ以外については、 下のリンクをクリックすれば、詳しいことが分かります。(新しいウィンドーが開きます。このページへ戻るには、そのウィンドーを閉じてください。)

このアニメーションは8枚のフレームから出来ています。

この8枚のフレーム(絵)をmyPicsという配列変数 (array variable) の中にしまって置きます。 そのやり方は、上のコーディング・シートで見るとおりです。配列に入った一つ一つのフレームは「エレメント(element)」と呼ばれます。

分かりやすいように一行に一つづつ書きましたが、つなげて書いてもかまいません。ただし、カンマで区切ることを忘れないように。

一つだけ忘れてならないことは、このエレメントを指定して表示する時、最初のエレメントは0(ゼロ)から始まります。1ではありません。

例えば最初の絵を取り出して表示する時には次のように書きます。

<input type="button" value="最初のエレメントを表示する"
  onClick="document.myScreen.src=myPics[0]">

<input type="button" value="リセット"
  onClick="document.myScreen.src='images/june92c.gif'">

<img name="myScreen" src="images/june92c.gif"
  alt="Betty is smiling (run01.gif--210x199)"
  width="210" height="199">

Betty is smiling (run01.gif--210x199)

 

コマを一つづつ進めるには次のようにします。

Betty is smiling (run01.gif--210x199)

 

コードは次のようになります。

<script language="javascript">
<!---- to hide

var myCounter=0

function slideBetty() {
  myCounter++
  if (myCounter==8) myCounter=0
  document.myBetty.src=myPics[myCounter]
  document.myForm.frameNumber.value=String(myCounter)
  }

//----->
</script>

<form name="myForm">
<input type="text" size="2"
      name="frameNumber" value="0">
<input type="button" value="コマを一つ進める"
  onClick="slideBetty()">
<input type="button" value="リセット"
  onClick="myCounter=0;document.myBetty.src=myPics[0];
          document.myForm.frameNumber.value='0'">
</form>

 ボタンをクリックすると、イベント・ハンドラーの onClick が、上のコードの中に書いてあるジャバスクリプト・ファンクションのslideBetty()を起動します。

このファンクションの中で、ひとコマ進める処理を行っています。 先ず、このファンクションの最初のステートメントは、カウンターの数字を一つ進めます。

コードの中で使われているカウンター (myCounter) がコマ、つまり、フレーム番号と対応しています。 8つのコマは、0から7まで番号が振ってあります。それで、もし、カウンターが8に等しい場合には、0に戻しているわけです。これが、 このファンクションの2番目のステートメントです。

3番目のステートメントは配列の中に保存されているコマの中から、フレーム番号に対応しているものを引き出して表示します。

最後のステートメントは、フレーム番号をテキストとして表示するために、ストリング・ヴァリューに変換して、それを「テキスト窓」に表示します。 計算に使った数字のままでは表示できないためです。残念ながら、ジャバスクリプトでは、これを自動的にやってくれません。

以上が、このファンクションの実行していることです。

マニュアルから自動に変えるにはどうすればいいの?

function startBetty() {
  myCount++
  if (myCount==8) myCount=0
  document.myGal.src=myPics[myCount]
  myTimerID=setTimeout("startBetty()",delayTime)
  }

最後のステートメントを加えることにより、ジャバスクリプトが自動的にコマを進めてくれます。 この setTimeout()というファンクションは、ジャバスクリプトの中にすでに組み込まれている基本ファンクションです。

delayTimeという変数の初期値は300に設定されているので、300ミリセカンド (0.3秒)後に startBetty() というファンクションを実行します。つまり、自分で自分を呼び出して実行するわけです。 要するに、永久に同じファンクションが繰り返し実行されるわけです。

この永久ループを止めるために、myTimerID という変数を上の様に頭のところに付けて、これによって止めるように仕組まれています。 詳しいことは、このページ (スタート・ストップ メカニズム) を読んでください。

配列(array)を使わずに、
ベティーさんを走らせるには
どうすればよいのか?

 

関連リンク





Rate article:
Excellent Good Neutral Poor Worst

Your Name:
Your Email Address:
Comments:


  Comments
 
一つのボタンで、どうやって START と STOP を使い分けているのですか?
    - 好奇心の塊

ブーリアン変数 (Boolean variable) を使うことにより簡単に使い分けることができます。 ブーリアン変数というのは、true と false の2つの値をとる変数のことです。次に示すような使い方をします。

A stop sign (stop03.gif--164x230)

コードは次のようになっています。

<script language="javascript">
<!---- to hide

var driving=false

function goDrive() {
  if (driving) {driving=false
      document.myCar.src="../images/stop03.gif"}
  else {driving=true
      document.myCar.src="../images/drive.gif"}
}

//----->
</script>

<img name="myCar" src="../images/stop03.gif"
  alt="A stop sign (stop03.gif--164x230)"
  width="164" height="230"> <p>
<input type="button" value=" START / STOP "
    onClick="goDrive()">

上のコードの中のdrivingがブーリアン変数です。初期値がfalseに設定されています。

ボタンをクリックすると、onClick イベント・ハンドラーが 上のコードの中のファンクション (goDrive()) を起動します。

このファンクションはdrivingを調べて、もし、その値がfalseだったら、trueをdriving の値として入れ替えてから、自動車が走っている絵を表示します。

もし、drivingの値がtrueだったら、falseを driving の値として入れ替えてから、ストップサインを表示します。

上のファンクションは、これだけのことを実行しています。
    - Akira

 
 
筆者紹介
Akira Kato (kato.jpg--180x135)
  • 日本とカナダの大学で教育を受ける。
  • 横浜にある大手の電器メーカーでコンピューターのソフトウエアの開発に従事する。
  • カナダのノースウエスト隼州政府・財務省に勤務する。
  • バンクーバーのランガラ・カレッジおよびサレーのクワンテレン・カレッジで講師を勤める。
  • ヨーロッパ、東南アジア、中国、北米を幅広く旅行する。
  • 現在、経営コンサルタント、フリーランス・ライターとして活躍している。

Beaverland ジャポニカ
Re-Discover JAPAN
inserted by FC2 system