プロになるためのjavascript入門読書会 レジュメ

76
第5章 jQuery UI

Upload: norito-agetsuma

Post on 02-Jul-2015

526 views

Category:

Entertainment & Humor


0 download

TRANSCRIPT

Page 1: プロになるためのJavaScript入門読書会 レジュメ

第5章 jQuery UI

Page 2: プロになるためのJavaScript入門読書会 レジュメ

5.1 jQuery UI を構成するコンポーネント

UI Core

Core Widget(ファクトリ) Mouse Position

(位置調整)

Interactions(動きを表現)

Widgets Effects(アニメーション)

• Draggable• Droppable• Resizable• Selectable• Sortable

• Accordion• Autocomplete• Button• Dialog• Slider

• Fade• Shake• Drop

Page 3: プロになるためのJavaScript入門読書会 レジュメ

5.1 Interactionsの例

Resizable

$(function() { $( "#resizable" ).resizable();});

divを引っ張って、のばしたり、縮めたり

Page 4: プロになるためのJavaScript入門読書会 レジュメ

5.1 Interactionsの例

Draggable / Droppable

$(function() { $( "#draggable" ).draggable(); $( "#droppable" ).droppable({ drop: function( event, ui ) { $( this ).addClass( "ui-state-highlight" ) .find( "p" ) .html( "Dropped!" ); } });});

Page 5: プロになるためのJavaScript入門読書会 レジュメ

5.1 Widgetsの例

Accordion

$(function() { $("#accordion").accordion();});

<div id="accordion"> <h3>Section 1</h3> <div> <p>...</p> </div> <h3>Section 2</h3></div>

Page 6: プロになるためのJavaScript入門読書会 レジュメ

5.1 Widgetsの例

Datepicker

<script>$(function() { $("#datepicker").datepicker();});</script>

<p>Date:<input type="text"id="datepicker"/></p>

Page 7: プロになるためのJavaScript入門読書会 レジュメ

5.1 Effects

http://jqueryui.com/demos/

(スライドよりも実物がわかりやすい)

PowerPointのアニメーションとだいたい同じ。

Page 8: プロになるためのJavaScript入門読書会 レジュメ

これまでの通り簡単に使えるのが何よりも特徴

(セレクタで要素を選択してメソッド呼び出し)

Page 9: プロになるためのJavaScript入門読書会 レジュメ

5.2 利用の準備

ダウンロード時に選んでサイズを小さくできる

Page 10: プロになるためのJavaScript入門読書会 レジュメ

5.2 インストール

<link type="text/css" rel="stylesheet" href="css/jquery-ui-1.10.2.custom.css" /><script src="js/jquery-1.9.1.js"></script><script src="js/jquery-ui.js"></script>

jQueryと同じように読み込むだけ

Page 11: プロになるためのJavaScript入門読書会 レジュメ

5.3 jQuery UI の基本動作

$(function() { $("#button").button();});

セレクタで指定してから、メソッド呼び出し。$関数の引数に渡すと、DOMロード終了時に

jQueryによりコールバックされます。

Page 12: プロになるためのJavaScript入門読書会 レジュメ

5.3.1 オプションの設定

$("#button").button({ disabled: true});

Buttonメソッドの引数にオブジェクト形式{name:value} で指定する。

Page 13: プロになるためのJavaScript入門読書会 レジュメ

5.3.1 オプションの取得

$("#button").button( “option”, ”disabled”);

第1引数に文字列optionを指定して、第2引数にオプションを指定する。

Page 14: プロになるためのJavaScript入門読書会 レジュメ

5.3.1 Widget生成後のオプション指定

$("#button").button( “option”, ”disabled”, false);

第3引数に値を設定することで、Widgetを生成した後にオプション値を設定可能

Page 15: プロになるためのJavaScript入門読書会 レジュメ

5.3.2 イベント

$("#draggable").draggable({ start: function(event, ui) {..}});

メソッドの引数に指定する方法

event : jQueryのイベントオブジェクト。 イベントが発生した座標、時刻などが取得可能。ui : 各部品により中身は異なる。 例えば、ドラッグ可能オブジェクトであれば、 ui.draggable.text()で、テキストを取得可能。

Page 16: プロになるためのJavaScript入門読書会 レジュメ

5.3.2 イベント

$("#draggable").on('dragstart', function(event, ui) {…});

onメソッドを利用する方法

イベント名はstart、イベントタイプはdragstart。onメソッド使用時にはイベントタイプを指定する。

Page 17: プロになるためのJavaScript入門読書会 レジュメ

5.3.3 部品の有効化・無効化

$("#draggable").draggable('enable');

$("#draggable").draggable('disable');

前述したdisabledオプションに加えて、メソッドの引数でも指定可能。

Page 18: プロになるためのJavaScript入門読書会 レジュメ

5.4 インタラクション

Page 19: プロになるためのJavaScript入門読書会 レジュメ

ドラッグ & ドロップjQueryUIコードの解説

5.4 インタラクション

Page 20: プロになるためのJavaScript入門読書会 レジュメ

まずはデモ

5.4 インタラクション

Page 21: プロになるためのJavaScript入門読書会 レジュメ

初期状態

Page 22: プロになるためのJavaScript入門読書会 レジュメ

ドラッグ & ドロップ する。

Page 23: プロになるためのJavaScript入門読書会 レジュメ

背景色の変更とメッセージ表示Drop here → Hello Jiro!

Page 24: プロになるためのJavaScript入門読書会 レジュメ

<body> <div id="taro" class="draggable">Taro</div> <div id="jiro" class="draggable">Jiro</div> <div id="target" class="droppable">Drop here</div></body>

Page 25: プロになるためのJavaScript入門読書会 レジュメ

$(function(){ $(".draggable").draggable(); $("#target").droppable({ drop: function(event, ui) { $(this).addClass( "ui-state-highlight" ) .html($('#msg').render( {msg: "Hello", text: ui.draggable.text()} )); },

<body> <div id="taro" class="draggable">Taro</div> <div id="jiro" class="draggable">Jiro</div> <div id="target" class="droppable">Drop here</div></body>

TaroとJiroに.draggable();

Page 26: プロになるためのJavaScript入門読書会 レジュメ

id=targetを.droppable

<body> <div id="taro" class="draggable">Taro</div> <div id="jiro" class="draggable">Jiro</div> <div id="target" class="droppable">Drop here</div></body>

$(function(){ $(".draggable").draggable(); $("#target").droppable({ drop: function(event, ui) { $(this).addClass( "ui-state-highlight" ) .html($('#msg').render( {msg: "Hello", text: ui.draggable.text()} )); },

Page 27: プロになるためのJavaScript入門読書会 レジュメ

dropイベントにスタイル変更とテキストの変更を追加。

<body> <div id="taro" class="draggable">Taro</div> <div id="jiro" class="draggable">Jiro</div> <div id="target" class="droppable">Drop here</div></body>

$(function(){ $(".draggable").draggable(); $("#target").droppable({ drop: function(event, ui) { $(this).addClass( "ui-state-highlight" ) .html($('#msg').render( {msg: "Hello", text: ui.draggable.text()} )); },

Page 28: プロになるためのJavaScript入門読書会 レジュメ

仕様2 : 追い出すとGood byeメッセージに変わる

Page 29: プロになるためのJavaScript入門読書会 レジュメ

Outイベントに、スタイルのremoveClassとメッセージ変更を追加

<div id="target" class="droppable">Drop here</div>

$(function(){ $(".draggable").draggable(); $("#target").droppable({ out: function( event, ui ) { $(this).removeClass( "ui-state-highlight" ) .html($('#msg').render( {msg: "Good bye", text: ui.draggable.text()})); }

Page 30: プロになるためのJavaScript入門読書会 レジュメ

<div id="target" class="droppable">Drop here</div>

$(function(){ $(".draggable").draggable(); $("#target").droppable({ out: function( event, ui ) { $(this).removeClass( "ui-state-highlight" ) .html($('#msg').render( {msg: "Good bye", text: ui.draggable.text()})); }

引数uiを通して、ドラッグされたオブジェクトのテキストを取得

Page 31: プロになるためのJavaScript入門読書会 レジュメ

『リサイズ』と『並べ替え』は本著者のGithub参照

5.4 インタラクション

Page 32: プロになるためのJavaScript入門読書会 レジュメ

5.5 ウィジェット(widgets)

Page 33: プロになるためのJavaScript入門読書会 レジュメ

アコーディオンjQueryUIコードの解説

5.5 ウィジェット

Page 34: プロになるためのJavaScript入門読書会 レジュメ

まずはデモ

5.5 ウィジェット

Page 35: プロになるためのJavaScript入門読書会 レジュメ

初期状態

Page 36: プロになるためのJavaScript入門読書会 レジュメ

クリックするとこうなる。

Page 37: プロになるためのJavaScript入門読書会 レジュメ

<body> <div id="accordion"> <h3><a href="#">First</a></h3> <div>This is first.</div> <h3><a href="#">Second</a></h3> <div>This is second.</div> <h3><a href="#">Third</a></h3> <div>This is third.</div> <h3><a href="#">Fourth</a></h3> <div>This is fourth.</div> </div></body>

$(function(){ $('#accordion').accordion();});

Divに対して.accordion()するだけ.

Page 38: プロになるためのJavaScript入門読書会 レジュメ

自動補完jQueryUIコードの解説

5.5 ウィジェット

Page 39: プロになるためのJavaScript入門読書会 レジュメ

まずはデモ

5.5 ウィジェット

Page 40: プロになるためのJavaScript入門読書会 レジュメ

一定の文字数入力すると候補が出る。

Page 41: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

$(function(){ var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 42: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

$(function(){ var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

まずは、inputに.autocompleteする。

Page 43: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

候補文字列を配列で用意する。http://../fruitsのように、jsonを返すAPIも指定可能$(function(){

var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 44: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

$(function(){ var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

何文字入力したら補完候補を表示するか指定。デフォルトは1文字。

Page 45: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

文字補完のコールバック関数。一致する候補を探すロジックは自分で実装する。$(function(){

var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 46: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

第1引数のtermプロパティからフォームの入力値が取得できる。

$(function(){ var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 47: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

候補リストfruitsから入力値req.termと一致する文字列を抽出し、resultに格納。$(function(){

var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 48: プロになるためのJavaScript入門読書会 レジュメ

<body> <label for="fruit">Your favorite fruit: </label> <input id="fruit"/></body>

第2引数resに、抽出した候補配列を渡すと、補完候補として表示される。$(function(){

var fruits = [ 'Apple','Orange','Peach','Pear','Blueberry','Pineapple']; $('#fruit').autocomplete({ minLength: 2, source: function(req, res) { var result = []; for (var i = 0; i < fruits.length; i++) { if (fruits[i].indexOf(req.term) == 0) { result.push(fruits[i]); } } res(result); }});});

Page 49: プロになるためのJavaScript入門読書会 レジュメ

一番良く使われる日付入力の実装

5.5 ウィジェット

Page 50: プロになるためのJavaScript入門読書会 レジュメ

フォームをクリックするとカレンダー。

Page 51: プロになるためのJavaScript入門読書会 レジュメ

<p>Date: <input type="text" id="datepicker" /></p>

$(function() { $( "#datepicker" ).datepicker();});

Inputに対して、.datepicker()を呼び出すだけ。

Page 52: プロになるためのJavaScript入門読書会 レジュメ

datepickerは便利なので、オプションも紹介します。

Page 53: プロになるためのJavaScript入門読書会 レジュメ

デフォルトはmm/dd/yyフォーマット

yy/mm/dd形式に変更したい。

Page 54: プロになるためのJavaScript入門読書会 レジュメ

<p>Date: <input type="text" id="datepicker" /></p>

$(function() { $( "#datepicker" ).datepicker({ dateFormat: 'yy/mm/dd', firstDay:1 });}); datepickerの引数オブジェクトに

firstDayプロパティを設定する。0が日曜日で1が月曜日。デフォルトは0(日曜日)。

Page 55: プロになるためのJavaScript入門読書会 レジュメ

デフォルトは日曜始まり 月曜始まりに変更したい

Page 56: プロになるためのJavaScript入門読書会 レジュメ

<p>Date: <input type="text" id="datepicker" /></p>

$(function() { $( "#datepicker" ).datepicker({ dateFormat: 'yy/mm/dd', firstDay:1 });}); dateFormatプロパティを設定する。

例ではyy/mm/ddを指定。

Page 57: プロになるためのJavaScript入門読書会 レジュメ

デフォルトは英語表記 日本語に変更したい

Page 58: プロになるためのJavaScript入門読書会 レジュメ

<script src="jquery-1.9.1.js"></script><script src="ui/1.10.3/jquery-ui.js"></script><script src="ui/1.10.3/i18n/jquery-ui-i18n.min.js"></script>

$(function() { $.datepicker.setDefaults($.datepicker.regional[ "ja" ] ); $( "#datepicker" ).datepicker();});

ローカライズされたjquery-uiを追加でロードする。

SetDefaultsメソッドにより、対象の言語を事前に指定する。

Page 59: プロになるためのJavaScript入門読書会 レジュメ

$(function() { // $.datepicker.setDefaults($.datepicker.regional[ "ja" ] ); $( "#datepicker" ).datepicker();});

setDefaultsの指定を忘れると、うまく日本語がでないので注意

漢数字で出てくる

Page 60: プロになるためのJavaScript入門読書会 レジュメ

5.6 効果(Effects)

Page 61: プロになるためのJavaScript入門読書会 レジュメ

animeteメソッド時間をかけてCSS属性を変化させる。

5.6 効果

Page 62: プロになるためのJavaScript入門読書会 レジュメ

5.6 効果

まずはデモ

Page 63: プロになるためのJavaScript入門読書会 レジュメ

5.6 効果

divが徐々に大きくなり、変色する。

Page 64: プロになるためのJavaScript入門読書会 レジュメ

<div id="target" style="background-color: red; height: 100px; width: 100px"></div><button id="button" type="button">start</button>

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); });});

Page 65: プロになるためのJavaScript入門読書会 レジュメ

<div id="target" style="background-color: red; height: 100px; width: 100px"></div><button id="button" type="button">start</button>

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); });});

デフォルトのスタイルは・背景色は赤・縦横100pxずつ

Page 66: プロになるためのJavaScript入門読書会 レジュメ

<div id="target" style="background-color: red; height: 100px; width: 100px"></div><button id="button" type="button">start</button>

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); });});

ボタンのイベントハンドラに、divのアニメーションメソッドをコールバック指定。

Page 67: プロになるためのJavaScript入門読書会 レジュメ

<div id="target" style="background-color: red; height: 100px; width: 100px"></div><button id="button" type="button">start</button>

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); });});

・背景色は緑・縦横は200px・2000ミリ秒かけて変化させる

Page 68: プロになるためのJavaScript入門読書会 レジュメ

シンタックスエラーとどう戦えば良いのか。

余談 : お世話になったツール

Page 69: プロになるためのJavaScript入門読書会 レジュメ

余談 : お世話になったツール

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); })});

問. シンタックスエラーはどこか

Page 70: プロになるためのJavaScript入門読書会 レジュメ

余談 : お世話になったツール

$(function() { $("#button").click(function() { $("#target").animate({ backgroundColor: "#00ff00", width: 200, height : 200 }, 2000 ); });});

答. clickメソッドの終了セミコロンがない

Page 71: プロになるためのJavaScript入門読書会 レジュメ

私、30分以上はまりました...

Page 72: プロになるためのJavaScript入門読書会 レジュメ

余談 : お世話になったツール

http://jshint.com

Page 73: プロになるためのJavaScript入門読書会 レジュメ

はやくJSHintを使えばよかったと後悔しています

Page 74: プロになるためのJavaScript入門読書会 レジュメ

具体的なご指摘を頂けました。

Line9: セミコロンがありません。

Page 75: プロになるためのJavaScript入門読書会 レジュメ

Web直接入力以外にも、Vim/Emacs/Subline Text2Gitコミット前チェックツールなど、色々対応しています。

Page 76: プロになるためのJavaScript入門読書会 レジュメ

ユーティリティ独自ウィジェットは次回紹介予定。