Javascript(2)
ソース
ソース
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>セミナー演習4(1)</title>
- <script type="text/javascript">
- "use strict";
- var div, bdy, txt;
- div = document.createElement("div");
- bdy = document.createElement("body");
- txt = document.createTextNode("こんにちは.");
- div.appendChild(txt);
- document.body = bdy;
- document.body.appendChild(div);
- </script>
- </head>
- </html>
解説
解説
- 10行目 document.createElement("div")
- 「こんにちは」と表示するdiv要素を生成する.
- 要素の生成はdocumentオブジェクトのcreateElementメソッドを用いる.
- documentは組込みのオブジェクト(あらかじめ定義されているオブジェクト).createElementはdocumentオブジェクトの組込みのメソッド(あらかじめ定義されているメソッド).
- 11行目 document.createElement("body")
- body要素がないので,document.createElementで生成する.
- 12行目 document.createTextNode("こんにちは.")
- 「こんにちは」というテキストノードを生成する.
- テキストノードの生成はdocumentオブジェクトのcreateTextNodeメソッドを用いる.
- 13行目 div.appendChild(txt);
- テキストノードをdiv要素に追加する
- 追加には追加される要素オブジェクトのappendChildメソッドを用いる.
- appendChildは全ての要素オブジェクトの組み込みのメソッド.
- 14行目 document.body = bdy;
- document.body に生成したbody要素を代入する(生成したbody要素をドキュメントのbodyとする).
- document.bodyはdocumentの組み込みの属性
- 15行目 document.body.appendChild(div)
- appendChildを用いて,生成したdiv要素をbody要素に追加する
演習4-2 (ロードイベント)
演習4-2 (ロードイベント)
- window.addEventListenerを使って,ページが読み込まれたらブラウザに”こんにちは”と表示するスクリプトを作成せよ.ただし,htmlのbody部は次のようになっているものとする.
- <body>
- <div id="hello"></div>
- </body>
解答例
解答例
ソース
ソース
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>セミナー演習4(2)</title>
- <script type="text/javascript">
- "use strict";
- window.addEventListener("load", function () {
- var div, txt;
- div = document.getElementById("hello");
- txt = document.createTextNode("こんにちは.");
- div.appendChild(txt);
- }, false);
- /*
- function hello() {
- var div, txt;
- div = document.getElementById("hello");
- txt = document.createTextNode("こんにちは.");
- div.appendChild(txt);
- }
- window.addEventListener("load", hello, false);
- */
- </script>
- </head>
- <body>
- <div id="hello"></div>
- </body>
- </html>
解説
解説
- 9行目から14行目
- window.addEventListener("load", <関数>, false) でドキュメントがロードされたときのイベントリスナー(ロードされたときに実行される関数)を追加する.
- 関数は匿名でもよい.解答例でも匿名関数(関数リテラル)としている.
- 同じことを関数リテラルを使わないで,16行目から22行目のようにも書ける.
- 14行目
- addEventListenerの第3引数はuse captureである.
- trueにするとキャプチャーフェーズで実行される.
- falseにするとバブリングフェーズで実行される.
- イベントは,キャプチャーフェーズ → ターゲットフェーズ → バブリングフェーズの順に伝播する.
- キャプチャーフェーズでは親から子孫へ,バブリングフェーズでは子から先祖へイベントが伝播する.
- キャプチャーフェーズ:親 → その子 → ・・・ → その子 (→ ターゲット)
- ターゲットフェーズ:ターゲット
- バブリングフェーズ: (ターゲット →) その親 → ・・・ → その親 → Window Proxyオブジェクト(その時点でのグローバルオブジェクトを指すオブジェクト)
- 参考:http://d.hatena.ne.jp/cou929_la/20110310/1299767973
- http://www.w3.org/TR/DOM-Level-3-Events/#addEventListener_useCapture
- 要は,trueにすると,trueにしていないイベントリスナーより先に実行される
- addEventListenerの第3引数はuse captureである.
- 11行目
- テキストを追加するdiv要素を取得する.
- document.getElementById("hello") でhelloというidを持つ要素(解答例では27行目のdiv要素)を得る.
- 12行目,13行目
- createTextNodeでテキストノードを生成し,appendChildでdiv要素に追加する.
演習4-3 (マウスイベント)
演習4-3 (マウスイベント)
- addEventListenerを使って,数字をクリックすると,そのたびにカウントアップするスクリプトを作成せよ.ただし,htmlのbody部は次のようになっているものとする.
- <body>
- <span id="count">0</span>
- </body>
解答例
解答例
ソース
ソース
- <!DOCTYPE html>
- <html>
- <head>
- <meta charset="utf-8" />
- <meta name="viewport" content="width=device-width, initial-scale=1" />
- <title>セミナー演習4(3)</title>
- <style>
- span {
- font-size: 200%;
- color: #FFF;
- background-color: #334d55;
- text-align: center;
- padding: 15px;
- }
- </style>
- <script type="text/javascript">
- "use strict";
- var count, counter, ctext;
- window.addEventListener("load", function () {
- count = 0;
- counter = document.getElementById("count");
- counter.addEventListener("click", function () {
- count += 1;
- ctext = document.createTextNode(count);
- counter.removeChild(counter.firstChild);
- counter.appendChild(ctext);
- }, false);
- }, false);
- </script>
- </head>
- <body>
- <p>クリックするとカウントアップします.</p>
- <span id="count">0</span>
- </body>
- </html>
解説
解説
- 7行目から15行目
- 表示する数字のスタイル(フォントサイズ,文字の色,背景の色,中央寄せ,パディング)を指定する.
- 21行目
- HTMLドキュメントがブラウザに読み込まれた後でないと,countというidを持つspan要素を取得できないので,window.addEventListener("load", <関数>, false)で指定する関数の中で(ロードされたときに実行される関数の中で),document.getElementById("count") によりcountというidを持つspan要素を取得する.
- 22行目から27行目
- マウスクリックの度にテキストノードを0 → 1 → 2 → … と書き換えるイベントリスナーをspan要素に追加する.
- 22行目から27行目の代わりに,31行目で<span onclick="<関数名>">0</span>とすることもできる.この場合は匿名関数ではなく,名前を持った関数を定義する.
- 24行目から26行目の代わりに,counter.textContent = String(count); とすることもできる.textContentはcounterのテキストを表す属性である.String(count)で,countの値を文字列に変換している.(innerTextという属性でも動作するブラウザもあるがinnerTextは非標準である)