KANTENNA.COM

Solarized

HOME > WEBプログラム覚書 > jQuery プラグイン Slide boxメモ

jQuery プラグイン Slide boxメモ

ちょうどこういうのやりたかったので どんな感じで実装されてるか調べてみた。

クライアント

PHP
  1.  <?php
  2.  $("#testZone").slideBox({width: "100%", height: "200px", position: "top"});
  3.  ?>

slideBox.js

PHP
  1.  <?php
  2.  /**
  3.   * Slide Box : a jQuery Plug-in
  4.   * Samuel Garneau <samgarneau@gmail.com>
  5.   * http://samgarneau.com
  6.   *
  7.   * Released under no license, just use it where you want and when you want.
  8.   */
  9.  (function($){
  10.  
  11.   /**
  12.   * プラグインの書式
  13.   * jQueryオブジェクトにslideBoxという
  14.   * メソッドを追加してる感じかと思われる。
  15.   *
  16.   * 引数 params はオブジェクト
  17.   * default と同じプロパティが設定される。
  18.   */
  19.   $.fn.slideBox = function(params){
  20.  
  21.   // thisは$("#testZone")
  22.   // id=testZone 内のHTMLを取得
  23.   var content = $(this).html();
  24.  
  25.   // デフォルトのパラメータ
  26.   var defaults = {
  27.   width: "100%",
  28.   height: "200px",
  29.   position: "bottom" // Possible values : "top", "bottom"
  30.   }
  31.  
  32.   /**
  33.   * 引数あった場合は
  34.   * デフォルトのパラメータを上書き
  35.   *
  36.   */
  37.  
  38.   // extending the fuction
  39.   if(params) $.extend(defaults, params);
  40.  
  41.   var divPanel = $("<div class='slide-panel'>");
  42.   var divContent = $("<div class='content'>");
  43.  
  44.   /**
  45.   * $(divContent)の中身は
  46.   *
  47.   * <div class='content'>
  48.   * id=testZone 内のHTML
  49.   * </div>
  50.   *
  51.   * って感じになる。
  52.   */
  53.   $(divContent).html(content);
  54.  
  55.   /**
  56.   * $(divPanel)にクラスの追加
  57.   *
  58.   * <div class='slide-panel bottom or top'>
  59.   * </div>
  60.   *
  61.   * って感じになる。
  62.   */
  63.   $(divPanel).addClass(defaults.position);
  64.  
  65.   // $(divPanel)の横幅を設定
  66.   $(divPanel).css("width", defaults.width);
  67.  
  68.  
  69.   // $(divPanel)のセンタリング
  70.   // centering the slide panel
  71.   $(divPanel).css("left", (100 - parseInt(defaults.width))/2 + "%");
  72.  
  73.   /**
  74.   * topが指定された場合の処理
  75.   *
  76.   * <div class='slide-panel bottom or top'>
  77.   * </div>
  78.   *
  79.   * って感じになる。
  80.   */
  81.  
  82.   // if position is top we're adding
  83.   if(defaults.position == "top")
  84.   $(divPanel).append($(divContent));
  85.  
  86.   // adding buttons
  87.   $(divPanel).append("<div class='slide-button'>Ouvrir</div>");
  88.   $(divPanel).append("<div style='display: none' id='close-button' class='slide-button'>Fermer</div>");
  89.  
  90.   if(defaults.position == "bottom")
  91.   $(divPanel).append($(divContent));
  92.  
  93.  
  94.   /**
  95.   * DOMの置換
  96.   *
  97.   * <div id="testZone">
  98.   * <p>TestZone</p>
  99.   * </div>
  100.   *
  101.   * ↓
  102.   * ↓ HTMLは下記のように変更される
  103.   * ↓
  104.   *
  105.   * <div class='content'>
  106.   *
  107.   * <div class='slide-button'>Ouvrir</div> <= position=bottom の場合
  108.   * <div style='display: none' id='close-button' class='slide-button'>Fermer</div> <= position=bottom の場合
  109.   *
  110.   * <div class='slide-panel bottom or top'>
  111.   * <p>TestZone</p>
  112.   * </div>
  113.   *
  114.   * <div class='slide-button'>Ouvrir</div> <= position=top の場合
  115.   * <div style='display: none' id='close-button' class='slide-button'>Fermer</div> <= position=top の場合
  116.   *
  117.   * </div>
  118.   *
  119.   * これに対してCSSとイベントを追加していく。
  120.   */
  121.   $(this).replaceWith($(divPanel));
  122.  
  123.   // 設置したボタンにイベントを設定
  124.   // 動きは高さを変更しています。
  125.  
  126.   // Buttons action
  127.   $(".slide-button").click(function(){
  128.   if($(this).attr("id") == "close-button")
  129.   $(divContent).animate({height: "0px"}, 1000);
  130.   else
  131.   $(divContent).animate({height: defaults.height}, 1000);
  132.  
  133.   $(".slide-button").toggle();
  134.   });
  135.   };
  136.  
  137.  })(jQuery);
  138.  
  139.  ?>

何となくわかった気がする。 ついでにjQueryのプラグインの作り方もなんとなくわかった気がする。

気になったのは

  • HTMLの量が多いページだとjQueryが実行されるまで時間かかるので その間隠したいところが出ちゃってる状態になる。

こと。実際使う場合は、 slideBoxの位置を考えるか、最初はCSSでdisplay: noneとかに しておいた方が良さそう。

トラックバック(1)

2009年6月22日 19:07

jQueryのプラグイン作成前のメモWEBプログラム覚書

jQueryもjavascriptも実は全然理解してないことがわかった。続きを読む

コメント

コメントする
Name
Email Address
URL
TIME LINE
2012
02.08

[Ubuntu11.10]Winows XPユーザーがUbuntuを使ってみて

Windows XPとUbuntuのデュアルブート環境にしてみておもったこと。

2012
02.03

[jQuery]closest()とparents()

今から16年前Netscapeブラウザのソースコードの公開方法の会議の中で、初めてオープンソースという言葉が使われた今日、 みなさんいかがお過ごしでしょうか。

今回の投稿はそれとは関係のないjQueryのparents()とclosest()が 似てたので何が違うのか試した時のメモです。

2012
02.01

[jQuery Mobile]初期化イベントメモ

jQuery Mobileは読み込まれてから

mobileinit -> pagebeforecreate -> pagecreate -> pageinit

の順番でイベントが発生する。

2012
02.01

[WordPress]管理画面のフッタのフィルタとアクション。

時間も時間なので、あまり使用頻度の高くない微妙なネタを。

会員制サイトなどで不特定多数の人にログインさせる場合、フッタのバージョン情報は隠しておきたかったり、 こじゃれたメッセージを表示したいときとか使うアクションとフィルタ。

2012
01.28

[WordPress] ブログの情報を取得する方法とノーキャッシュ疑惑

ブログのget_bloginfo()で取れないデータが必要な場合に使うもの。

2012
01.26

[jQuery Mobile]ダイアログ

jQuery Mobileにおけるダイアログの扱いはウインドウではなくページ。 なので通常のページと同様に扱える。ダイアログウインドウを出す。じゃなくダイアログページに遷移する。的な。

2012
01.25

[Ubuntu11.10]Ubuntuのインストール後の設定

インストール完了後の環境構築。PC起動時いちいちBIOSからブートドライブ選んで ブートするのかと思ってたら起動時にOS選択画面が出てくる。

すばらしいですね。

2012
01.24
2012
01.23

MinGW+Mintty+Git

MinGW+Mintty+Gitをやろうとして失敗に終わった。このエントリーには収穫できるものはありません。