準備
XAMPPで Apache を起動
Visual Studio Code で フォルダ htdocs の下の学籍番号フォルダを開く
演習1 テキストの入力と表示
フォルダ js01
ファイル名 index.html
フォルダの構成:
テキストボックスに入力したメッセージをテンプレートに埋め込んで表示するJavaScriptのコードの例)
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body onload="test()"> <script type="text/javascript"> function test(){ var word1 = document.myForm.word1.value; var word2 = document.myForm.word2.value; var temp =`わたしは${word1}を持っています。わたしは${word2}を持っています。わたしは${word2}${word1}を持っています。`; document.myForm.message.value= temp; } </script> <p>テキストボックスに入力したメッセージをテンプレートに埋め込んで表示する</p> <form action="#" name="myForm"> <p>単語1:<input type="text" name="word1" value="ペン" onkeydown="test()" size="40" /></p> <p>単語2:<input type="text" name="word2" value="リンゴ" onkeydown="test()" size="40" /></p> <p>メッセージ<br> <textarea name="message" rows=11 cols=80 readonly="readonly"> </textarea> </p> </form></body></html>確認:
・HTMLのFORMタグ
・FORMの初期値
・BODYタグの onload属性
・JavaScriptとHTMLのDOM
・JavaScriptのテンプレートリテラルと変数
・変数の値の保存先
演習2
JavaScriptで、画面タッチで画像が切り替わるWebページを作成。
動作確認用 GIF画像(6個)
各自で用意した適当な画像を使用してもOK。
↑の画像を利用する場合は、右クリックからダウンロードするか、ブラウザからドラッグアンドドロップでPCのデスクトップに保存する。
※ダウンロードする画像のファイル名と拡張子を確認して、プログラムから利用するために覚えておく。
フォルダ js02
画像を↑のフォルダに移動
ファイル名 index.html
<!DOCTYPE html><html><head><meta charset="utf-8"></head><body> <img name="imagebox" onclick="test()" src="1.gif" width="320" height="320"> <script>var files = [ "1.gif", "2.gif", "3.gif", "4.gif", "5.gif", "6.gif",];var cnt=0;var element = document.imagebox;function test(){ cnt++; document.body.removeChild(element); document.body.appendChild(element); document.imagebox.src=files[cnt % files.length];}</script></body></html>※↑動画で使用していたコードを一部修正したバージョン。クリック時にアニメーションを再開するようにコードを修正。
解説:
img タグの属性 src onclick width height
DOM の構成
演習3
CSSによるアニメーション設定
CSSのアニメーション用のコードを設定するサイト WAIT! Animate で適当なアニメーションのコードを作成する。
例) Vertical(垂直) で 2s(待ち時間2秒)の場合
.vertical { animation: vertical_3599 2.44s ease infinite; transform-origin: 50% 50%;}@keyframes vertical_3599 { 0% { transform:translate(0,-3px) } 3.27869% { transform:translate(0,3px) } 6.55738% { transform:translate(0,-3px) } 9.83606% { transform:translate(0,3px) } 13.11475% { transform:translate(0,-3px) } 16.39344% { transform:translate(0,3px) } 18.03279% { transform:translate(0,0) } 100% { transform:translate(0,0) }}↑
赤色の部分(先頭のピリオドを含む .vertical を削除し、img:active に変更する。また、アニメーションの無限ループを無しにする場合は、水色の infinite の部分を削除する。
index.htmlに <style>タグを追加し、以下のように、 <head>タグの部分にコピー&ペーストする。
例)
<head> <meta charset="utf-8"><style>img:active { animation: vertical_4956 0.44s ease; transform-origin: 50% 50%;}@keyframes vertical_4956 { 0% { transform:translate(0,-3px) } 18.18182% { transform:translate(0,3px) } 36.36364% { transform:translate(0,-3px) } 54.54545% { transform:translate(0,3px) } 72.72727% { transform:translate(0,-3px) } 90.90909% { transform:translate(0,3px) } 100% { transform:translate(0,0) }}</style></head>※ ループアニメーションの場合は、 img だけでもOK. img:active では、クリックしたときにアニメーションが開始する。また、img:hover では、マウスが画像に重なったときにアニメーションが開始する(ただし、最初から重なっている場合は、一度マウスを移動し重ねなおしたとき)
※※ 画像のサイズが大きい場合、上記のサイトで作成したCSSコードではうまくアニメーション表示されない場合がある。
応用例を考える
・スライドショー
クリックしなくても、一定時間で自動的に次の画像に進ませる
</script>タグの直前に以下のコードを追加する。
1000ms(1000ミリ秒=1秒)で繰り返し、クリックしたときの処理 test を呼び出すプログラムの例)
function loop() { test(); setTimeout(loop,1000);}loop();</script>※ setTimeoutの設定値を 200ms など小さな値にすると、高速で画像を切り替えることになる。
※ コマドリアニメ表示などに利用してみよう。
・おみくじ・占い・ガチャ
最初に表示される画像を用意する
クリックの際、ランダムに画像が現れるようにする
あたり、ハズレで確率を変えるように工夫する(カードの枚数に差をつける、ハズレカードは同じ画像で多数登録しておく、など)
例1) ランダムに画像を選択させるコード
元は、 cnt++ で、変数の値を1増加させ、次の画像を表示させている分を修正(青色の部分)する。
以下のコードでは、
現在のカード番号に、 0 から (カード枚数 - 1) までのランダムな数値を加える。
計算結果がカード枚数を超えた場合は、先頭の番号に巡回して番号を決めている。
function test(){ cnt+= Math.floor(Math.random()*files.length); document.imagebox.src=files[cnt % files.length];
}例2) 画像をクリックで、画像変更のスタート・ストップを切り替えるコード
画像をクリックしたときに処理されるプログラムを変更する。
<img name="imagebox" onclick="toggle()" src="1.gif" width="320" height="320">以下を追加する。追加する位置は、 function loop() 前。
var startflag = 0;function toggle() { if(startflag == 0) { startflag = 1; } else { startflag = 0; }}function test() に一行加える。
function test(){ if(startflag == 0) return;上の 例2 の動作をするように index.html を修正した結果のファイルをこのページの末尾に添付してある。ダウンロードして参考にしてよい。
※ 例2のコードをブラウザで実行した際、画像をクリックしても画像変更がストップしない場合がある。画像がアニメーションしている最中には、クリックイベントに反応しないと推測する。
※※ setTimeoutの設定値を 200ms 以下など小さな値にした場合、ブラウザのイベント監視のタイミングの関係で、onclick が処理されずにループがとまらなくなる場合がある。
htdocs の学籍番号フォルダを zip にアーカイブして、Webclass にアップロードする。
※第6回の内容と今回の内容が混ざった状態のフォルダをZIPして提出してもよい。
※ZIPファイルに第6回の内容が入っていなくてもよい(第6回にWebclassにアップロード済みの受講生)