ウエブアプリケーション 2014 第7回 JavaScript その4

http://www0.info.kanagawa-u.ac.jp/~kaiya/wa/
dotcampus ショートコード 147637
ウエブアプリケーション 2014
第7回 JavaScript その4
2014/11/6
海谷 治彦
1
目次
• 前回演習について (dotcampusソース参照)
• JQuery (前回の積み残し)
• Ajax
• Bootstrap
• まとめ
• 演習
• 来週までの演習 (JavaScript編の感想)
2
jQuery
• JavaScript(JS)のライブラリ
• 素のJavaScriptで書くより記述が簡素になるはず.
• JSだけでも同じことはできるはず.沢山かかなきゃだけど.
• JSの文法的な拡張が行われているわけではない.
• クロスブラウザ問題を吸収してくれるので,ブラウザの
違いを気にせずJSを書ける.
• 事実上の標準となっているので,知らないとまずい.
• バージョンについて
• 1.x系 古いブラウザにもなるだけ対応してる
• 2.x系 IE 6, 7, 8 をサポートしてないが,サイズがこぶり.
機能は同じらしい.この授業では 2.x 系を利用.
3
使い方
• 配布元のURLを直接参照して利用する.(以下の例)
• もしくは,ダウンロードして手元のファイルを読み込む.
• 配布先は,公式の他に google や MS からも行われている.
<head>
<meta charset="utf-8"><title>how2load jquery</title>
<!-- googleとかMSとかからもDLできるけど本家からリンク -->
<script src="http://code.jquery.com/jquery-2.1.1.min.js">
</script>
<!-- 自分でDLしたものを使うなら以下
<script src="jquery-2.1.1.min.js"></script> -->
</head>
4
できること
• JSの解説で行ったことはあらかたできるし,記述が相
対的に簡素(なはず)
•
•
•
•
•
DOM要素の指定
要素の変更,属性等を含む.
DOMへの要素の追加削除.
イベント処理.
Ajax (無論,素のJSでも可能)
• $というのが良く出てくるが,実は特別なものではなく,
単なる変数である.
5
要素の選択
• 素のJSよりかなり簡素
• $(“anID”) で指定,
• 素のJSでは document.getElementById(“anID”) とかく.
• 以下,比較.
素のJS
JQuery
body
document.body
$(document.body)
tag
getElementsByTagName
$(“tag”)
id
getElementById
$(“#id”)
class
getElementsByClassName
$(“.class”)
6
要素の操作
選択した要素について以下の操作ができます.
• 属性の追加,設定,削除
• name=“jindai” 等に対するもの
• サンプル jqAttr.html
• プロパティの追加,削除
• checked や disabled 等,値の無い属性のこと
• サンプル jqProp.html
• CSSプロパティの追加,設定,削除
• フォント種類やサイズ,色等.
• サンプル jqCssProp.html
• 要素内容の取得,更新
• <div>内容</div>等の内容に相当.
• サンプル jqText.html
7
DOMへの追加・削除
• 要素の追加
•
•
•
•
親要素.append
親要素.prepend
兄弟要素.before
兄弟要素.after
• 削除
• remove
• サンプル jqAddDel.html
8
イベント処理
• 以下に代表的なイベントを示す.
• マウス click, dblclick, mouseenter, mouseleave,
mousedown, mouseup, hover (enterとleaveをあわせたっ
ぽいもの)
• キーボード keypress, keydown, keyup
• 文書(document) ready, resize, scroll
• イベント設定は,基本,
$(なんとか).イベント(関数定義)
• と書く.要は要素に対してコールバックを仕込む.
• onなんとか属性に直に関数を代入するよりもエレ
ガント(だと思う)
• 詳細はサンプル jqEvent.html にて.
9
Ajax
• Asynchronous JavaScript and XML
• もとは名前通りの機能だったが,今は,JSを使った
同期・非同期の通信機能という感じ.
• ページ遷移を伴わずサーバー等からクライアント
がデータを授受できるので便利.
• 無論,JQuery にもAjaxのための機能がある.
• ある意味,プログラム言語としては当たり前の機
能.
• CやJava等のプログラム言語は任意の通信をする機能
があるのだから.
10
非同期通信 Asynchronous Comm.
• HTTPのリクエストとレスポンスのように,基本,通信で
は,送付側(例えばブラウザ)は,返信側(例えばウエブ
サーバー)の返事を待つ.⇒ 同期通信
• 非同期通信は,この返事を待たず,次の処理にいって
しまう手順の通信をさす.
• 非同期での返事の受け取り方
• 返事が来た場合に呼び出されるCallbackを仕込んでおいて,
返事を受け取る.
• 返事を保存する場所(通常,Queue 待行列)を準備し,定期
的に返事を確認するという手もある.polling と呼ばれる.
• マルチスレッドな言語なら返事を監視するスレッドを走らせる
という手もある.
11
ページ遷移で何が悪い?
• Ajaxが無いと,HTTPリクエストをクライアントが行い,
別のページに遷移する必要がある.
• 画面の一部を変更するだけでも,この遷移が起こり,
通信の無駄だし,挙動が遅くなる.
• ページが保持する状態(JSの変数の値やフォームのセ
レクション)が遷移すると原則チャラになってしまう.
• さらに,素のHTTPでは遷移したページ間に原則連続
性は無いため,セッション等の仕組が必要.
• よって,ウエブサーバー等と通信を行いデータを部分
的にもってくるAjaxはそれなりに便利な機能である.
12
Ajaxのサンプル
• ajaxSync.html ajaxAsync.html
• 同期と非同期の違いを際だたせている.
• 通信相手のページが意図的に5秒停止してから動作す
るように作ってある.
• syncのほうは5秒動作がとまってしまう.
• asyncのほうは相手の停止に関係なく動作が進む.
• 若干,古い書き方.いまどきはjQueryで書くほうが
よい.
• JQuery版 jqAjaxSync.html jqAjaxAsync.html
13
Bootstrap
• 簡単にウエブページレイアウトを行うためのフレーム
ワーク.
• 基本,HTMLの要素に予め定められたクラスを設定す
るだけで,結構,綺麗な見栄えになる.
• 自身で全部CSSを全部書いて綺麗な見栄えにするのは超大
変.
• Responsive Design に対応
• スマホ等,小さい画面の場合等,画面のサイズに合わせて,
自動的にレイアウトを変えてくれる.
• HTML5, CSS3, JavaScriptからできている.
• まぁ,同様のフレームワークは色々あるようだ.
• Foundation, UIKit, Pure, Kube, HTML Kickstart
14
フレームワークとは?
• 枠組み orz
• ライブラリの逆
• ライブラリは全体(main関数的なものを含む)は自
身で作り,部分は他人の作ったものを流用する.
• C言語の数値計算ライブラリ lm
• Javaの各種API
• フレームワークは全体は他人が作ったものを使い,
部分を自分でカスタマイズする.
• これから話す Bootstrap
• 後段に出てくるサーバーサイドのアプリケーションフ
レームワーク.(spring や cakePHP等)
15
使い方 1/2
• 本家サイトからzipをDLして展開
http://getbootstrap.com/
• distフォルダにある css, font, js を使う.
• もしくは,ネットに公開してあるもの使う.
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet"
href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.0/js/bootstrap.min.js">
</script>
16
使い方 2/2
• ゼロからページを作るのはシンドいので,公式
ページにあるテンプレートを改造してゆく.
http://getbootstrap.com/getting-started/#examples
• JQuery の利用は必須.Bootstrapの内部で使って
いるため.
• どうも,JQ2.xではうまく動かない感じ.
• Bootstrapのルールに従い,HTML要素にクラスを
設定してゆくだけで,基本,綺麗なレイアウトにな
る.
• ルールを調べたり,覚えたりするのがしんどい.コレは
フレームワーク利用全般に言える問題点.
17
Starter
• 私が手をいれたのであれば bsStarter.html 参照.
• なんか沢山かいてあるけどカスタマイズ部分は以
下
• 32-38行 メニューのリンク先とかを設定
• 47, 48行 本文
• カスタマイズ部分の周辺に設定されたクラスに従
い,Bootstrapが綺麗にレイアウトしてくれる(スタイ
ルファイルを設定してくれる.)
• ちなみに,画面を小さくすると(スマホ等を想定し
て),見えが変わる.
18
Grid Layout
• 旧来の tableタグを使ったレイアウト,HTML5の
float指定(桑原先生編,覚えてますか?)より格段
に楽でブラウザ非依存なレイアウト法.
• グリッド すなわち碁盤の目状の領域でレイアウト
を設定.
• 具体的には横位置を12分割して,その比率で箱を
配置できる.5,4,3等の等比でないものもOK.
• bsGrid1.html bsGrid2.html
19
Dropdown Menu
• formのセレクションを使わないでもdropdown menu
を書ける.
• まぁ,見た目はかっこいい.
• bsDropdwon.html 参照
20
タブのナビゲーション
• いわゆるタブっぽいUIを簡単に作ることができる.
• bsTabs.html
21
Bootstrapの利用に向けて
• 授業にて全カスタマイズ手法を紹介するのは無理.
• 自身で公式サイト http://getbootstrap.com/ 等を見
て,手軽に綺麗なレイアウトを作成しよう.
• フレームワークを使うという体験は非常に重要な
ので,是非,チャレンジしてみてください.
• 例えば,情報科学実験での利用とか.
22
JavaScript編 エピローグ
• とりあえず,クライアントサイドの技術を学んでみま
した.
• なんか覚えることがやたら多い・・・orz
• JSに限らず,現代的なプログラミングは「考案す
る」というより「調べる」というのがメインです.
• 新しいアルゴリズムとかクリエイティブに考えたい方々
には不満も多いかもしれません.
• その意味では,現代的プログラミングってのは文
系っぽいのかもね.
23
本日の演習
• dotcampusに出してください.
• 問題もdotcampusのほうを参照.
24
来週までの演習
• dotcampusに出してください.
• 問題もdotcampusのほうを参照.
• 問題はJavaScript編の感想文です.
• わからなかったところ
• おもしろろかったところ
• 本日は以上
25