jquery插件(選項卡)

很早之想就學習jquery的插件寫法,一直拖到如今,今天趁着沒什麼工做忙,搜索些資料學習下,寫了個比較簡單的選項卡效果。jquery

 

剛開始有看到一個很通俗易通的例子:alert對話框。ide

jquery.alertMsg.js函數

 1 /**
 2  * [description]
 3  * @param  {[type]} $ [description]
 4  * @return {[type]}   [description]
 5  */
 6 (function($){
 7 
 8   $.fn.alertMsg = function(options) {
 9 
10     var defaults = {
11       mouseEvent: 'clcik',
12       msg: 'hello world'
13     }
14     var options = $.extend(defaults, options);
15     var $this = $(this);
16 
17     $this.on(options.mouseEvent, function(e){
18       alert(options.msg);
19     })
20   }
21 
22 })(jQuery)

調用方式:學習

<span id="test">test</span>

$(function(){
    $('#test').alertMsg({
        mouseEvent : "click",  
        msg : "第一次寫插件!"  
    });
});

 

jQuery插件結構優化

 1 (function($){
 2     // tabs 自定義的插件名稱
 3     $.fn.tabs = function(options) {
 4 
 5         // 設置默認參數
 6         var defaults = {
 7             activeClass: 'active'
 8             ... 
 9         }
10         // 對象擴展
11         var options = $.extend(defaults, options);
12 
13         return $(this).each(function(){
14             // 編寫相應實現代碼
15         })
16     }
17 
18 })(jQuery)

 

選項卡實現:this

一、HTML結構spa

<div id="tab">
    <ul>
        <li>選項1</li>
        <li>選項2</li>
        <li>選項3</li>
        <li>選項4</li>
    </ul>
    <div id="tabCon" class="tab-con">
        <div>1的內容</div>
        <div>2的內容</div>
        <div>3的內容</div>
        <div>4的內容</div>
    </div>
</div>

二、jquery.tabs.jsprototype

 1 (function($){
 2 
 3     $.fn.tabs = function(options) {
 4 
 5             var defaults = {
 6                 Event: 'click',
 7                 activeClass: 'active'
 8             }
 9             var options = $.extend(defaults, options);
10 
11             return $(this).each(function(){
12 
13                 var $thisTab = $(this).find('ul');
14                 var $tabCon = $thisTab.siblings('div');
15 
16                 $tabCon.find('div').each(function(){
17                     $(this).hide();
18                 });
19 
20                 $thisTab.find('li:first').addClass(options.activeClass);
21                 $tabCon.find('div:first').show();
22 
23                 $thisTab.find('li').each(function(index){
24 
25                     $(this).on(options.Event, function(){
26 
27                         $(this).siblings().removeClass(options.activeClass);
28                         $(this).addClass(options.activeClass);
29                         $tabCon.find('div').eq(index).show().siblings().hide();
30 
31                     });
32                     
33                 });
34             });
35         }
36     
37 })(jQuery)

三、調用插件

1 $('#tab').tabs({
2     activeClass: 'active'
3 });

 

小結:對jQuery插件的初識,感受應該還要繼續優化和擴展,繼續學習!code

 

2016-10-14補充:

jquery.tabs.js優化

;(function($, window, document, undefined){

    // 定義TabFun的構造函數
    var TabFun = function(ele, opt) {
        this.$element = ele,
        this.defaults = {
            Event: 'click',
            activeClass: 'active'
        },
        this.options = $.extend({}, this.defaults, opt);
    }

    // 定義TabFun的方法
    TabFun.prototype = {
        // 選項卡切換
        tab: function() {
            
            var $this = this;
            return $this.$element.each(function(){

                        var $thisTab = $(this).find('ul');
                        var $tabCon = $thisTab.siblings('div');

                        $tabCon.find('div').each(function(){
                            $(this).hide();
                        });

                        $thisTab.find('li:first').addClass($this.options.activeClass);
                        $tabCon.find('div:first').show();

                        $thisTab.find('li').each(function(index){

                            $(this).on($this.options.Event, function(){

                                $(this).siblings().removeClass($this.options.activeClass);
                                $(this).addClass($this.options.activeClass);
                                $tabCon.find('div').eq(index).show().siblings().hide();

                            });
                            
                        });
                    });
        }
    }

    $.fn.tabs = function(options) {
        // 建立TabFun的實體
        var tabFun = new TabFun(this, options);
        // 調用其方法
        return tabFun.tab();
    }
    
})(jQuery, window, document)
相關文章
相關標籤/搜索