zoukankan      html  css  js  c++  java
  • Step by step to create a jQuery tabs plugin 2

    I have said that i dislike jQuery UI’s unified API, so i want to
    get the instance of the component after invoke like this:

        $(function() {
            var tabs = $("div.tabs").tabs(); 
    
            // Note: Now tabs is the instance of the component
            window.setTimeout(function() {
                tabs.clickTab(2);
            }, 2000);
        });

    To achieve this, i modified the plugin code:

        (function($) { 
    
            function Tabs(tabs, panes) {
                var that = this;
                this.tabs = tabs;
                this.panes = panes;
                this.current = 0; 
    
                this.clickTab(0); 
    
                this.tabs.click(function() {
                    that.clickTab(that.tabs.index(this));
                });
            } 
    
            Tabs.prototype = {
                clickTab: function(index) {
                    this.current = index;
                    this.tabs.removeClass("current").eq(this.current).addClass("current");
                    this.panes.hide().eq(this.current).show();
                }
            }; 
    
            $.fn.tabs = function() { 
    
                var tabs = this.children("ul").find("li > a");
                var panes = this.children("div"); 
    
                return new Tabs(tabs, panes);
            }; 
    
        })(jQuery);

    Note that Tabs is defined in the self-execution function, so it will be hidden
    from the outside world.

    And we public the clickTab metod in the prototype. I works well.

    This article is over, below is some advance topics.

    ====================================================

    How to extend Tabs class?

    It maybe a little difficult because it’s a private function.

    Never mind, just change the prototype of $.fn.tabs:

        (function($) { 
    
            function Tabs(tabs, panes) {
                // ...
            } 
    
            Tabs.prototype = {
                // ...
            }; 
    
            $.fn.tabs = function() { 
    
                // ...
            }; 
    
            $.fn.tabs.prototype = Tabs.prototype; 
    
        })(jQuery);

    We can extend the Tabs class like this:

        $.fn.tabs.prototype.getLength = function() {
            return this.tabs.length;
        }; 
    
        $(function() {
            var tabs = $("div.tabs").tabs();
            alert(tabs.getLength());
        });

    Or we can use the method introduced in jQuery core, which is described in
    my last post
    .

        (function($) { 
    
            $.fn.tabs = function() { 
    
                var tabs = this.children("ul").find("li > a");
                var panes = this.children("div"); 
    
                return new $.fn.tabs.prototype.init(tabs, panes);
            }; 
    
            $.fn.tabs.prototype = {
                init: function(tabs, panes) {
                    var that = this;
                    this.tabs = tabs;
                    this.panes = panes;
                    this.current = 0; 
    
                    this.clickTab(0); 
    
                    this.tabs.click(function() {
                        that.clickTab(that.tabs.index(this));
                    });
                }, 
    
                clickTab: function(index) {
                    this.current = index;
                    this.tabs.removeClass("current").eq(this.current).addClass("current");
                    this.panes.hide().eq(this.current).show();
                }
            }; 
    
            $.fn.tabs.prototype.init.prototype = $.fn.tabs.prototype; 
    
        })(jQuery);
  • 相关阅读:
    一个漂亮的lazarus做的pagecontrol
    预测,阿里盒子必将失败!
    sex在软件开发中的运用--SIX技术
    糟糕的@@identity,SCOPE_IDENTITY ,IDENT_CURRENT
    Delphi、Lazarus保留字、关键字详解
    糟糕的界面设计
    Firebird存储过程--更加人性化的设计
    lazarus的动态方法和虚拟方法
    用户行为导向的交互设计
    Javascript的一个怪现象
  • 原文地址:https://www.cnblogs.com/sanshi/p/1510375.html
Copyright © 2011-2022 走看看