SlideShare ist ein Scribd-Unternehmen logo
1 von 66
はがねのつるぎ
 jQuery日本語リファレンス
 イケてるプラグインXX選

 プラグインXXサンプル
   海外製プラグインの紹介ばっかりじゃん
 そりゃー、完成品使ったらラクだよね
 どれもこれも似たようなのばっかり
   人が使ったライブラリを使うだけ?
 動的なデザインってどういうことだろう
 誰も見たことのないUIがみたい
 わりかし小規模で作りやすい
 jQueryはカンタン

 JavaScriptが難しい
 ゼロから動的UIが作れる
 プラグインの使い方がわかる

 プラグインを改造できる
   セレクタ
       $() DOM要素を選択
   イベント駆動
     hover()
     click()

   DOM操作
     show()
     css()
 意外と難しい
 クセが多い言語

 JavaScriptには多くの設計ミスと、変わった特
  徴が存在している
       「JavaScript The Good Parts」より
 jQueryを読み込み
 依存ライブラリを読み込み

 プラグインを読み込み

 呼び出す
<script src="jquery-1.6.1.js" ></script>
<script src="jquery.dq.beta-0.0.3.js" ></script>




 HTMLファイルから読み込む
 依存ライブラリも一緒に
<script>
      $(document).ready(function() {
            $('.dq-container').dq();
      });
</script>

   $(ほげほげ).プラグイン名(オプション);
 プラグインの「使い方」
 プラグインの自作には関係ないお話でした
   プラグインの「作り方」
 プラグイン用のJavaScriptを書く
 jquery.xxx.js
;
(function($){



 //ここにプラグインの処理を書く




})(jQuery);
 「;」を最初に
 匿名関数と名前空間

 グローバル変数 jQuery
 おまじないではない
 他のライブラリが「;」を忘れたときに
 function(){}
 関数名を定義しない関数

 代入して使ったり

 普通の関数

     function func( x1, x2 ) { return x1 + x2; }
     func(1,3);
hoimi = 30;
function(){
      vehoimi = 100;
      var vehoma = +Infinite;
      console.log(hoimi); // OK
}
console.log(vehoimi); // OK
console.log(vehoma); // エラー
 関数内で(var)宣言された変数は汚染しない
 var hoge

 匿名関数内に変数を閉じる

 グローバル変数より早い

       探す対象が狭い
 JavaScript の変数はグローバルスコープ
 ローカル変数

     varで宣言
     var hoge;

   ローカル変数は関数内に限定される
   1+2*3
     7
     掛算が先に評価

   (1+2)*3
     9
     加算が先に評価
 JavaScriptの匿名関数は「式」
 関数は宣言しただけでは実行されない

 「式」に ()演算子を使うとただちに実行

 var hoge = function(){};

 hoge();
;
(function($){

 //ここにプラグインの処理を書く

})(jQuery);


   jQuery変数
       $変数に代入
   ()演算子
       匿名関数functionが実行
 jQueryが公開しているただ一つの変数
 すべての機能が詰め込まれている

 $はエイリアス

     window.jQuery = window.$ = jQuery;
     prototype.jsと使うときは気をつけてね

     プラグインの内部では自由に使えるよ
;
(function($){
  $.fn.dq = function(options) {
      // 初期値を設定
      var defaults = {
         containerClass : '.dq-container'
      };
      // オプションの初期値を設定
      var setting = $.extend(defaults, options);
     //ここにプラグインの処理を書く

     return this;
   };
})(jQuery);
 $.fn.プラグイン名 = function(options) {};
 jQuery.fn オブジェクトに関数を追加

 jQuery.fn = jQuery.prototype

 同じ名前があると上書きされちゃう
 prototypeというプロパティ
 暗黙の参照

       すべての関数オブジェクトが持つ
   プロトタイプベースのオブジェクト指向
 とあるオブジェクト.prototype
 いろんなものが追加できる

 オブジェクトから直接参照できる

 wizard.prototype.gira = function(){……}

 wizard.gira();
var defaults = {
      containerClass : '.dq-container'
};



   連想配列
   JSON形式
 var setting = $.extend(defaults, options);
 optionsの内容が優先

 Java風に書くと……

     class options extends defaults
     動的継承するインスタンス

   ディープコピー
 メソッド チェイン
 $().css(…).show(…)……

 this

       自分自身を示すもの
;
(function($){
  $.fn.dq = function(options) {
      // 初期値を設定
      var defaults = {
         containerClass : '.dq-container'
      };
      // オプションの初期値を設定
      var setting = $.extend(defaults, options);

      // ループを回すことにより指定されたすべての要素を処理する
       this.each(function(){ });
    return this;
   };
})(jQuery);
   $().dq()は一回しか呼ばれていない
       プラグインの実行は一度だけ
   セレクタの中身がいっぱいあったら?
 DOM要素を選択
 $(this)

 $('#ID')

 $('.class', this)

       自分自身の中で'class'属性を持つものを選択
 ここまではお約束の話
 ここからはプラグインの本体の処理
$(setting.containerClass, this).hide()




   子要素を隠す
   トップ要素は表示したまま
$('li', this).hover(
   // マウスが乗ったとき
).click(
  // クリックしたとき
);

   $('li', this).hover();
   $('li', this).click();
   毎回指定するより高速
       セレクタの処理を一回飛ばせる
 li要素
 マウスが上にあるとき
<ul class="dq-container">
   <li>はなす</li>
   <li>じゅもん</li>
   <li>どうぐ</li>
</ul>
.hover(
     function(){ // リスト要素がマウスホバーした場合}
   , function(){ // マウスが要素から外れた場合})



   引数に匿名関数
   CSSの疑似クラスと同じ感覚
   プログラムだと動的に扱える
$('li', this).hover(
           function(){ // リスト要素がマウスホバーした場合
              // 三角形を表示する
              $(this).css('background', 'url(img/allow.png) ……');
           , function(){ // マウスが要素から外れた場合
              // 三角形を隠す
              $(this).css('background', 'none');
           })

   $(‘li’, this)
        プラグインを呼び出したときの要素
   $(this)
        li要素
   クリック時の動作
     下位コンテナを表示
     コンテナがなければ閉じる
<ul class="dq-container">
  <li>はなす
      <div class="dq-container">
        こんにちは、DQ風インターフェースシステムへようこそ
      </div>
  </li>
  <li>じゅもん</li>
  <li>どうぐ
      <ul class="dq-container">
        <li class="dq-caption">どうぐ</li>
        <li>やくそう</li>
        <li>やくそう</li>
      </ul>
  </li>
</ul>
.click(function(event){})




   click = mousedown + mouseup
   eventオブジェクト
ここをクリック
  すると




          ここもクリックされたことになる
event.stopPropagation();




   イベントは親要素へ伝播する
   伝播を止める
var child = $(this).children(setting.containerClass);
// 子要素だけを操作
if (child.length){ // 子要素にコンテナがある場合
           // コンテナを開く処理
} else { // 子要素にコンテナがない場合
           // コンテナを閉じる処理
}


   lengthで判定する
   $().addClass("dq-console-open").show();
   $().hide().removeClass("dq-console-open");




   コンテナを表示
   マーキングクラスを追加
    • クラスを追加して開く

    • 閉じてからクラスを取り除く
// 開いているウィンドウをすべて閉じる
$(".dq-console-open").each(function(){
   // 非表示にした後、マーキングクラスを除去
   $(this).hide().removeClass("dq-console-open");
})
 マーカーで指定
 dq-caption
<ul class="dq-container">
   ……
   <li>どうぐ
      <ul class="dq-container">
        <li class="dq-caption">どうぐ</li>
        <li>やくそう</li>
        <li>やくそう</li>
      </ul>
  </li>
</ul>
   $().outerHeight()
       DOM要素の高さ
   $().outerWidth()
       DOM要素の幅
 (コンテナの幅÷2)-(どうぐの幅÷2)
 -(どうぐの高さ÷2)
// サイズの計算に影響があるので先に指定
caption.css({……});

// 横はセンターに来るように配置
var left = Math.round(child.outerWidth() / 2 - caption.outerWidth() / 2);
// 縦は上側に食い込ませる
var top = Math.round( - caption.outerHeight() / 2 );

// 計算結果をCSSで反映
caption.css({……});
 マウスが斜めに移動
 コンテナが閉じてしまう

 別のコンテナがひらく
var sideup = function(element){
  $(element).hide().removeClass("dq-console-open");
}



   匿名関数を変数に代入する
timerId = setTimeout(sideup, 1000, this);




   タイマーをセット
   1秒後にコンテナを閉じる
if (timerId) {
       clearTimeout(timerId);
}



   タイマをキャンセル
   1秒以内に戻ってきた場合
// マウスが外れたときに実行する関数のタイマID
   var timerId;
   // コンテナとマウスの挙動
   $(setting.containerClass, this).hover(
    function(){ // コンテナ上にある場合は何もしない
      if (timerId) { // タイマーがセットされていた場合はキャンセルする
        clearTimeout(timerId);
      }
    },
    function(){ // コンテナからマウスが外れた場合は隠す
      var sideup = function(element){
        $(element).hide().removeClass("dq-console-open");
      }
      // タイマーで実行を少し遅らせる
      timerId = setTimeout(sideup, 1000, this);
    });
   プラグインのお約束
       難易度:低
   jQuery本体を知る
       難易度:中
   JavaScriptを知る
       難易度:極限
 作りながら考える
 動かしてみないとわからない?

 キチンと設計できるのか?

 サーバサイドとの連携
   何がユーザにとって幸せか?
       おもてなしの心?
   動的なデザイン
       動かしながらじゃないとわからない?
   誰も見たことのないUIがみたい
OSC京都2011

Weitere ähnliche Inhalte

Was ist angesagt?

CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発Shinzo SAITO
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門Yu Iwama
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Satoshi Suzuki
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~Akabane Hiroyuki
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104Satoshi Suzuki
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろTakuya Tsuchida
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック良太 増子
 
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵までDOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵までMasayuki Nakano
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Satoshi Suzuki
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixirk1complete
 

Was ist angesagt? (18)

CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
 
Actor&stm
Actor&stmActor&stm
Actor&stm
 
Scala with DDD
Scala with DDDScala with DDD
Scala with DDD
 
Blocksの活用法
Blocksの活用法Blocksの活用法
Blocksの活用法
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104Yapc -asia 2012 lt @studio3104
Yapc -asia 2012 lt @studio3104
 
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
ビギナーだから使いたいO/Rマッパー ~Tengを使った開発~
 
もにかじ2 lt @studio3104
もにかじ2 lt @studio3104もにかじ2 lt @studio3104
もにかじ2 lt @studio3104
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
test
testtest
test
 
PerlとSQLのいろいろ
PerlとSQLのいろいろPerlとSQLのいろいろ
PerlとSQLのいろいろ
 
20110714 j queryベーシック
20110714 j queryベーシック20110714 j queryベーシック
20110714 j queryベーシック
 
Ll xcode
Ll xcodeLl xcode
Ll xcode
 
DOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵までDOMイベントの基礎から深淵まで
DOMイベントの基礎から深淵まで
 
Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104Chiba.pm #1 lt @studio3104
Chiba.pm #1 lt @studio3104
 
Development app-with-elixir
Development app-with-elixirDevelopment app-with-elixir
Development app-with-elixir
 

Ähnlich wie OSC京都2011

Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門Kohki Miki
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210cmtomoda
 
公式page改ざんで学ぶjQuery入門 (jscafe7)
公式page改ざんで学ぶjQuery入門 (jscafe7)公式page改ざんで学ぶjQuery入門 (jscafe7)
公式page改ざんで学ぶjQuery入門 (jscafe7)Ryuma Tsukano
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会Yukihiro Kitazawa
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうHishikawa Takuro
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてkimukou_26 Kimukou
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMiho Nakano
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについてShoichi Takagi
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門spring_raining
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)Hiroaki KOBAYASHI
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】株式会社ランチェスター
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」yoshiaki iwanaga
 
goog.ui.Component のはぐれかた
goog.ui.Component のはぐれかたgoog.ui.Component のはぐれかた
goog.ui.Component のはぐれかたSoichi Takamura
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXShinya Mochida
 

Ähnlich wie OSC京都2011 (20)

Kawaz的jQuery入門
Kawaz的jQuery入門Kawaz的jQuery入門
Kawaz的jQuery入門
 
Jetpack Workshop
Jetpack WorkshopJetpack Workshop
Jetpack Workshop
 
Jqm20120210
Jqm20120210Jqm20120210
Jqm20120210
 
公式page改ざんで学ぶjQuery入門 (jscafe7)
公式page改ざんで学ぶjQuery入門 (jscafe7)公式page改ざんで学ぶjQuery入門 (jscafe7)
公式page改ざんで学ぶjQuery入門 (jscafe7)
 
JavaScript入門
JavaScript入門JavaScript入門
JavaScript入門
 
20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会20130924 Picomon CRH勉強会
20130924 Picomon CRH勉強会
 
WordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょうWordBench Kobe jQueryどうでしょう
WordBench Kobe jQueryどうでしょう
 
Layout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用についてLayout analyzerでのgroovyの利用について
Layout analyzerでのgroovyの利用について
 
Visualforce + jQuery
Visualforce + jQueryVisualforce + jQuery
Visualforce + jQuery
 
Magento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for DesignMagento meet up Tokyo#1 for Design
Magento meet up Tokyo#1 for Design
 
emc++ chapter32
emc++ chapter32emc++ chapter32
emc++ chapter32
 
Androidの通信周りのコーディングについて
Androidの通信周りのコーディングについてAndroidの通信周りのコーディングについて
Androidの通信周りのコーディングについて
 
React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門React.jsでクライアントサイドなWebアプリ入門
React.jsでクライアントサイドなWebアプリ入門
 
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
仕事の手離れを良くする手段としての、静的検査のあるテンプレートエンジン (YATT::Lite talk at 2014 テンプレートエンジンNight)
 
ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】ちょっと詳しくJavaScript 特別編【悪霊の神々】
ちょっと詳しくJavaScript 特別編【悪霊の神々】
 
第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」第三回ありえる社内勉強会 「いわががのLombok」
第三回ありえる社内勉強会 「いわががのLombok」
 
覚醒!JavaScript
覚醒!JavaScript覚醒!JavaScript
覚醒!JavaScript
 
goog.ui.Component のはぐれかた
goog.ui.Component のはぐれかたgoog.ui.Component のはぐれかた
goog.ui.Component のはぐれかた
 
Client Side Cache
Client Side CacheClient Side Cache
Client Side Cache
 
Unit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFXUnit testing JavaScript with JUnit/JavaFX
Unit testing JavaScript with JUnit/JavaFX
 

Mehr von haganemetal

プログラムを学ぶということ
プログラムを学ぶということプログラムを学ぶということ
プログラムを学ぶということhaganemetal
 
オブジェクト指向最強
オブジェクト指向最強オブジェクト指向最強
オブジェクト指向最強haganemetal
 
情報発信すること
情報発信すること情報発信すること
情報発信することhaganemetal
 
ロボット制御のための行動型Aiに関する研究
ロボット制御のための行動型Aiに関する研究ロボット制御のための行動型Aiに関する研究
ロボット制御のための行動型Aiに関する研究haganemetal
 
異種・協調・分散ロボットに関する研究
異種・協調・分散ロボットに関する研究異種・協調・分散ロボットに関する研究
異種・協調・分散ロボットに関する研究haganemetal
 
リッツパーリー
リッツパーリーリッツパーリー
リッツパーリーhaganemetal
 
コラム二ストとオブジェクト指向
コラム二ストとオブジェクト指向コラム二ストとオブジェクト指向
コラム二ストとオブジェクト指向haganemetal
 

Mehr von haganemetal (7)

プログラムを学ぶということ
プログラムを学ぶということプログラムを学ぶということ
プログラムを学ぶということ
 
オブジェクト指向最強
オブジェクト指向最強オブジェクト指向最強
オブジェクト指向最強
 
情報発信すること
情報発信すること情報発信すること
情報発信すること
 
ロボット制御のための行動型Aiに関する研究
ロボット制御のための行動型Aiに関する研究ロボット制御のための行動型Aiに関する研究
ロボット制御のための行動型Aiに関する研究
 
異種・協調・分散ロボットに関する研究
異種・協調・分散ロボットに関する研究異種・協調・分散ロボットに関する研究
異種・協調・分散ロボットに関する研究
 
リッツパーリー
リッツパーリーリッツパーリー
リッツパーリー
 
コラム二ストとオブジェクト指向
コラム二ストとオブジェクト指向コラム二ストとオブジェクト指向
コラム二ストとオブジェクト指向
 

OSC京都2011