JavaScript 演習1 1 JavaScript(言語)とは • 情報システムのプログラミング →ソースコード記述,外部ファイル保存, コンパイル,テスト,デバッグ... →大変な作業 • もっと手軽なプログラミング →特別な言語処理系は不要! →Webブラウザだけで実行可能 (実際は,HTMLファイル内or外部ファイル として記述保存) 2 WebブラウザはWebページ閲覧に使うはず。 なんでプログラムが動くの? • 通常は,Webページ閲覧のために,Webブラウザ(IE)を開く. →今回は(特別に),プログラミングするためにIEを開く. でもIEはWebページを閲覧(提示)するんだから, 一体,IEのどこにプログラムを入力するんだ? 入力箇所はあります.それはURL欄 でもそこはネットのアドレスを入力する欄でしょう. プログラムなんか入力したらエラーになるよ. 通常はhttp://~によりアドレスを指定します。 http://JavaScriptプログラム文 とすれば 確かにエラーになります。確認しましょう。 3 失敗 http://alert(hello) vs. 成功 http://yahoo http://alert(hello)をURL欄に入力して実行 サーバが見つかりませんでした www.alert(hello).com という 名前のサーバが見つかりませんでした。 http: HTTPプロトコル // ホスト記述の開始を表す(ルート) alert(hello) をwww.alert(hello).comに解釈して www :Webサーバ名 alert(hello).com ドメイン名 ネット上にそのサーバが存在しなかった。 ※ちなみに http://yahoo なら成功する。 4 URLの復習 • URL(ネット上の情報資源を一意に決定する方法)であり, 他のサーバが持つ情報資源を利用する時,httpプロトコルを宣言する。 <スキーム名>:<スキームにおける固有表現> http:ハイパーテキスト転送プロトコル用スキーム ftp:ファイル転送プロトコル用スキーム mailto: 電子メールアドレス用スキーム file: ホストのファイルシステム用スキーム ... (非公式)javascript: JavaScriptプログラム用スキーム 5 Webブラウザーでプログラミング! ※アラートウィンドウ出現→1行プログラミング • アドレス欄を削除し,javascript:alert(“hello”); と入力して改行(実行) ※copy&pasteすると変なコードが 挿入されて動かないかも!? • 小さな(アラート=警告)ウィンドウが出現しましたか? 出現したら,ok ボタンをクリックして小ウィンドウを閉じましょう ※インタラクション→3行プログラミング • javascript: ans=prompt("1+12"); document.write(ans);document.write("は正解です") 6 90年代: JavaScript は不遇 • Java言語とは全く異なる,簡易型プログラミング(スクリプト= 台本)言語。コンパイラではなくインタープリタ。 • オブジェクト指向型スクリプト言語。C言語に似た手続き型言 語のようなスタイルで書かれる。 • NetScape社でサーバ負荷軽減のために開発。 • 90年代後半は,セキュリティの脆弱性,ブラウザによって 挙動が異なるなど,問題の多かった言語 7 2005-: JavaScriptは脚光 • 2000年頃から – AmazonやGoogleといった企業が採用 2005年 Google Mapの登場により状況が一変 ・ユーザ満足度(ユーザエクスペリエンス)を重視した リッチクライアントに対応したWebサイトが続々登場 ・サーバからクライアントへの転送データ量の減少 直感的な操作が可能 Gmail, Googleサジェスト, Amazon Web Service, ドラッグアンドドロップ, タブページ, Widgetなどなど ↑入力値チェックなどにも利用 8 従来のWeb アプリケーションモデル ブラウザー ユーザーインターフェース Ajax (Asynchronous JavaScript and XML) Webアプリケーションモデル ブラウザーによって Ajaxエンジン自体 や、 呼び出し方法が 異なる ブラウザー ユーザーインターフェース HTML +CSSデータ JavaScript コール Httpリクエスト 二 重 構 造 Ajaxエンジン HTTP(s)通信 HTML+CSS データ 非同期実現 XMLHttp リクエスト 非同期制御 HTTP(s)通信 XMLデータ Webサーバー WebまたはXMLサーバー データベース、バックエンド処 理、 レガシーシステム サーバーサイドシステム データベース、バックエンド処理、 レガシーシステム サーバーサイドシステム 従来のWebアプリ(同期→ユーザが待たされる) 時間軸 待ち時間がある クライアント ユーザー側の活動 ユーザー側の活動 ▶ ユーザー側の活動 データ送信 データ データ データ 送信 送信 送信 サーバー データ 送信 システム処理 システム処理 Ajax Webアプリ(非同期→ユーザが快適) 待ち時間がない クライアント ユーザー側の活動 入力 表示 入力 表示 入力 表示 入力 表示 クライアント側処理 データ データ データ 送信 送信 送信 サーバー サーバーサイドの処理 サーバーサイドの処理 サーバーサイドの処理 データ 送信 Ajaxエンジンが 通信を担当する サーバーサイドの処理 JavaScript 演習(2回)目的 • HTML・CSSのおさらいと、流行り(?)の Web2.0技術JavaScriptプログラミング • DHTML作成を通じて、見て動くプログラムの 楽しさ • COM実験への基礎知識 11 HTMLのおさらい 12 HTMLの構造 • <!DOCTYPE> ドキュメントタイプの宣言 • <HTML>~</HTML> HTML文書だということの宣言 – <HEAD>~</HEAD> 文書のヘッダ情報 • <META /> その文書に関するメタ情報 • <TITLE>~</TITLE> 文書のタイトル – <BODY></BODY> 文書本体 <!DOCTYPE HTML PUBLIC "//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd" > <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>テストページ</title> </head> <body> </body> </html> HTMLタグの一例 • <h1>~<h6> 見出しをつける • <p> 一つの段落を表す • <br> 改行 • <ul>,<ol> 順序の無し,ありのリスト • <li> リストの項目 • <a> リンクの開始 • <img> 画像の表示 <html> <head> <title>テストページ</title> </head> <body> <h1>見出し1</h1> <h2>見出し2</h2> <p>HelloWorld!</p> Hello<br>World! <ol type="a"> <li>リスト1</li> <li>リスト2</li> <li>リスト3</li> </ol> <p><a href="./htmlEx2.html">サンプルその2</a></p> <p><img src="./ex.jpg"></p> </body> </html> JavaScript 15 内容 • • • • • • • • • • • • JavaScriptの書き方 • document.getElementById 関数 alert関数 • 演習問題3 変数・データ型 • レポート 演算子 関数 document.write関数 prompt関数 演習問題1 条件分岐 繰り返し parseInt関数とparseFloat関数 演習問題2 16 JavaScriptの書き方 • HTMLファイル内に書く方法 – <head>タグ内に以下のように記述 – ex1.html <script type="text/javascript"> <!-ここにスクリプトを書く //--> </script> • 別のテキストファイルに書く方法 • ex2.html, ex1.js <script type="text/javascript" src="ファイル名.js"></script> 17 alert関数 • ポップアップウィンドウに指定したメッセージを表示 する関数 • デバッグに利用可能 – JavaのSystem.out.printlnメソッドに相当 – Rubyのputsメソッドに相当 • 関数 – 再利用可能なJavaScriptコードのかたまりに名前をつけ たもの alert + ( + ‘表示するテキスト’ + ) + ; alert(‘Hello, World!’); 18 変数・データ型 • 変数宣言はvarを用いる – 変数の長さは1文字以上 – 変数の最初の文字に使えるのは,英字,アンダー スコア(_),ドル記号($) • ○ $total,_firstName,top100 – 空白文字と(_と$以外の)特殊文字は使えない • × 5to10,first name,#total,world! 19 変数・データ型 • 基本データ型は数値、文字列、論理値の3種類 – ex3.html • 数値 • 文字列 • 論理値 var num = 1; alert(num); num = 3.14 alert(num); var message = ‘Hello, World!’; alert(message); var bool = true; alert(bool); bool = false; alert(bool); 20 演算子(よく使われるもの) • ex4.html,ex5.html,ex6.html • 算術演算子 – +(加算),-(減算),*(乗算),/(除算),%(余剰) – ++(インクリメント),--(デクリメント) • 論理演算子 – &&(論理積),||(論理和),!(否定) • 比較演算子 p q p && q p q p || q true true true true true true true false false true false true false true false false true true false false false false false false p !p true false false true – <(小なり),<=(以下),>(大なり),>=(以上) – ==(等しい),!=(等しくない) • 代入演算子 – =(代入),+=(加算),-=(減算),*=(乗算) – /=(除算),%=(余剰) 21 関数 • 再利用可能なJavaScriptコードのかたまりに名前を つけたもの • ex7.html 定義方法 function 関数名(引数) { 定義内容 return 戻り値; } 呼び出し方法 関数名(引数); var num = 関数名(引数); 22 document.write関数 • document.write(引数)-引数をHTMLとして表示させる • ex8.html var str = "Hello, World"; document.write("<p>" + str + "</p>"); document.write("<p style='color: red;'>" + str + "</p>"); 23 CSSの書式 • セレクタ { プロパティ: 値; プロパティ: 値 } セレクタ:スタイル適用対象の選択 プロパティ:‘font-size’ や ‘line-height’ のよう なレンダリング特性 値:プロパティに指定可能な値が定義 • とほほのスタイルシート入門 – http://www.tohoho-web.com/css/ prompt関数 • prompt(引数)-引数をメッセージとして表示し,ユーザから の入力情報(文字列)を取得する関数 • ex9.html var value = prompt("値を入力してください."); alert(value); document.write('<h1>prompt関数</h1>'); document.write('<h1>' +value + '</h1>'); 25 演習問題1 • prompt関数とdocument.write関数を用いて ,ユーザから入力されたテキスト,文字の色, 文字のサイズ(%)に応じて,表示内容を変化 させるJavaScriptプログラムを書きなさい 26 条件分岐 • ex10.html, ex11.html if (条件1) { • if文 文1; } else if (条件2) { 文2; ・・・・・ } else { 文N; } 条件の部分には, 論理値(true or false) が入る • switch文 マッチする選択肢が なかったときに実行 switch (テストデータ) { case マッチデータ1: 文1; break; case マッチデータ2: 文2; break; default: 文3; break; } break文を使って他の選択肢が 実行されないようにする 27 繰り返し • ex12.html • for文 for (初期化; テスト; 更新) { アクション; } • while文 初期化; while (テスト) { アクション; 更新; } 28 parseInt関数とparseFloat関数 • parseInt(引数) – 引数で文字列を渡すと数値に変換 • parseFloat(引数) – 引数で文字列を渡すと浮動小数点に変換 • ex13.html 29 演習問題2 • “Hello!”という文字列をユーザが入力した数だけ表 示するJavaScriptプログラムを作成しなさい • 行数を5で割った余りが1の場合には赤色,2の場 合には緑色,3の場合には黄色,4の場合には黒,0 の場合には青色,さらに,3の倍数の場合には 200%の大きさで”Hello!”を表示しなさい 30 document.getElementById関数 • document.getElementById(引数) – 引数で指定した要素オブジェクトを得る • document.getElementById(引数).innerHTML – 引数で指定した要素オブジェクトのHTMLを得る • document.getElementById(引数).style.CSSプロ パティ – 引数で指定した要素オブジェクトのCSSプロパティを得る – CSSプロパティ名は,基本的には「ハイフン(-)」を除去し, ハイフンの後の文字を大文字に変換したものを用いる – 参考: http://codepunk.hardwar.org.uk/css2js.htm 31 オブジェクトのイメージ <body> <body> <h1 <h1 id="id1“ id="id1">Hello</h1> style=‘color: red’>Hello, World</h1> </body> </body> document.getElementById(“id”) H1要素のオブジェクト 属性: 色 (style.color): black HTMLテキスト (innerHTML): Hello document.getElementById(“id”).style.color = ‘red’; document.getElementById(“id”).innerHTML = ‘Hello, World’; document.getElementById関数 ex14.html JavaScript function test() { var h1Value = document.getElementById("id1").innerHTML; alert(h1Value); document.getElementById("id1").innerHTML = prompt(''); var item1 = document.getElementById("item1").innerHTML; alert(item1); var item2 = document.getElementById("item2").innerHTML; alert(item2); var item1 = document.getElementById("item3").innerHTML; alert(item3); document.getElementById("divid").innerHTML = "テスト"; document.getElementById("divid").style.color = "red"; document.getElementById("divid").style.fontSize = "200%"; document.getElementById("divid").style.backgroundColor = "black"; } HTML onload=‘関数名’ <body onload='test()'> <h1 id="id1">document.getElementById関数</h1> ドキュメントが完全に 読み込まれた後に指 定した関数を呼び出す <ul> divは「division(区画)」の略 <li id="item1">項目1</li> <li id="item2">項目2</li> <li id="item3">項目3</li> </ul> <div id="divid"></div> </body> 他の要素をまとめて,構造化する際に 用いられる JavaScriptで操作する対象になる 33 演習問題3 • div要素にid属性を指定し,JavaScriptプログラムに よりdiv要素のCSSプロパティを設定し,以下の長方 形を表示するプログラムを作成せよ <div style="position:absolute; top:40; left:40; width:150; height:250; background-color:#0000FF; border: thick solid red; visibility: visible;"> </div> ヒント JavaScript HTML function showRect() { document.getElementById(“rect”).style.・・・・ } <body onload=“showRect()”> <div id=“rect”></div> 34 </body> レポート • 演習問題1,2,3を以下のアドレスにメールで提出 – 提出先 • To:[email protected] – 提出期限 • 5月27日(金)13:00まで :次回授業前まで – メールの件名: 学籍番号_氏名_JS演習1 • ファイル名は以下のようにすること – 学籍番号_氏名_JS演習問題1.html – 学籍番号_氏名_JS演習問題2.html – 学籍番号_氏名_JS演習問題3.html 学籍番号、アンダーバーは必ず半角でお願いします 35 問い合わせ先 • 第1研究室 24-604 • 第2研究室 23-620 E-mail: [email protected] 気軽にお越しください♪ 優しい山口研メンバーが待ってます。
© Copyright 2024 ExpyDoc