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とかに しておいた方が良さそう。

投稿日 2009年6月 4日 03:35
カテゴリ JavaScript
タグ jQuery | プラグイン
トラックバック URL http://www.kantenna.com/cgi-bin/mt504/mt-tb.cgi/1158

コメント

コメントする
Name
Email Address
URL