2009年06月04日 03:35

jQuery プラグイン Slide boxメモ

| http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/465

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

クライアント


$("#testZone").slideBox({width: "100%", height: "200px", position: "top"});

slideBox.js


/**
 * Slide Box : a jQuery Plug-in
 * Samuel Garneau <samgarneau@gmail.com>
 * http://samgarneau.com
 * 
 * Released under no license, just use it where you want and when you want.
 */
(function($){
    
    /** 
     * プラグインの書式
     * jQueryオブジェクトにslideBoxという
     * メソッドを追加してる感じかと思われる。
     *
     * 引数 params はオブジェクト
     * default と同じプロパティが設定される。
     */
    $.fn.slideBox = function(params){
        
        // thisは$("#testZone")
        // id=testZone 内のHTMLを取得
        var content = $(this).html();
        
        // デフォルトのパラメータ
        var defaults = {
            width: "100%",
            height: "200px",
            position: "bottom"          // Possible values : "top", "bottom"
        }
        
        /**
         * 引数あった場合は
         * デフォルトのパラメータを上書き
         *
         */
         
        // extending the fuction
        if(params) $.extend(defaults, params);
        
        var divPanel = $("<div class='slide-panel'>");
        var divContent = $("<div class='content'>");
        
        /**
         * $(divContent)の中身は
         *
         * <div class='content'>
         *   id=testZone 内のHTML
         * </div>
         *
         * って感じになる。
         */
        $(divContent).html(content);
        
        /**
         * $(divPanel)にクラスの追加
         *
         * <div class='slide-panel bottom or top'>
         * </div>
         *
         * って感じになる。
         */
        $(divPanel).addClass(defaults.position);
                
        // $(divPanel)の横幅を設定
        $(divPanel).css("width", defaults.width);
        
        
        // $(divPanel)のセンタリング
        // centering the slide panel
        $(divPanel).css("left", (100 - parseInt(defaults.width))/2 + "%");
    
        /**
         * topが指定された場合の処理
         *
         * <div class='slide-panel bottom or top'>
         * </div>
         *
         * って感じになる。
         */
         
        // if position is top we're adding 
        if(defaults.position == "top")
            $(divPanel).append($(divContent));
        
        // adding buttons
        $(divPanel).append("<div class='slide-button'>Ouvrir</div>");
        $(divPanel).append("<div style='display: none' id='close-button' class='slide-button'>Fermer</div>");
        
        if(defaults.position == "bottom")
            $(divPanel).append($(divContent));
        
        
        /**
         * DOMの置換
         *
         * <div id="testZone">
         *     <p>TestZone</p>
         * </div>
         *
         * ↓
         * ↓ HTMLは下記のように変更される
         * ↓
         *
         * <div class='content'>
         *
         *     <div class='slide-button'>Ouvrir</div> <= position=bottom の場合
         *     <div style='display: none' id='close-button' class='slide-button'>Fermer</div> <= position=bottom の場合
         *
         *     <div class='slide-panel bottom or top'>
         *         <p>TestZone</p>
         *     </div>
         *
         *     <div class='slide-button'>Ouvrir</div> <= position=top の場合
         *     <div style='display: none' id='close-button' class='slide-button'>Fermer</div> <= position=top の場合
         *
         * </div>
         *
         * これに対してCSSとイベントを追加していく。
         */
        $(this).replaceWith($(divPanel));
        
        // 設置したボタンにイベントを設定
        // 動きは高さを変更しています。
        
        // Buttons action
        $(".slide-button").click(function(){
            if($(this).attr("id") == "close-button")
                $(divContent).animate({height: "0px"}, 1000);
            else
                $(divContent).animate({height: defaults.height}, 1000);
            
            $(".slide-button").toggle();
        });
    };
    
})(jQuery);


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

気になったのは

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

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

jQuery入門―魔法のJavaScriptリファレンス&サンプル

著者 : 高橋 登史朗 / 金額 : ¥ 3,129

jQuery プラグイン Slide boxメモタグ:

トラックバック

  • http://www.kantenna.com/cgi-bin/mt/mt-tb.cgi/465
[WEBプログラム覚書]2009年06月22日 19:07
jQueryのプラグイン作成前のメモ
jQueryもjavascriptも実は全然理解してないことがわかった。
コメント (0)
コメントを投稿

(いままで、ここでコメントしたことがないときは、コメントを表示する前にこのブログのオーナーの承認が必要になることがあります。承認されるまではコメントは表示されません。そのときはしばらく待ってください。)





この情報を登録しますか?


先月アクセスが多かったページ