jQuery选项卡插件

html结构

<ul id="tabs" class="tabs">
    <li data-tab="users">Users</li>
    <li data-tab="groups">Groups</li>
</ul>
<div id="tabsContent" class="tabsContent">
    <div data-tab="users" class="tab-item"> item1 </div>
    <div data-tab="groups" class="tab-item"> item2 </div>
</div>

css样式

.tabs{
    width:500px;
    height:30px;
    background:#eee;
}
.tabs li{
    float:left;
    width:250px;
    font:18px/30px "Microsoft YaHei";
    color:#333;
    text-align: center;
    cursor: pointer;
}
.tabs li.active{
    background:#0aa;
}

.tabsContent{
    width:498px;
    border:1px solid #888;
}
.tabsContent .tab-item{
    height:250px;
    width:100%;
    font-size: 45px;
    display: none;
}
.tabsContent .active{
    display: block;
}

js脚本

(function ($) {

    /* 
     * jquery tabs 插件
    */
    $.fn.tabs = function (control) {

        var $element = $(this), // 切换的触点 li => tabs
            $control = $(control); // 切换的内容 tab-item => tabsContent

        // 委托li的点击事件
        $element.delegate("li", "click", function () {
            // li 对应的 data-tab属性值
            var tabName = $(this).attr("data-tab");

            $element.trigger("change.tab", tabName);
        });

        // change.tab 第一步:改变li.active
        $element.bind("change.tab", function (e, tabName) {
            $element.find("[data-tab]").removeClass("active");
            $element.find("[data-tab="+ tabName +"]").addClass("active");
        });

        // change.tab 第二步:改变tab-item.active
        $element.bind("change.tab", function (e, tabName) {
            $control.find("[data-tab]").removeClass("active");
            $control.find("[data-tab="+ tabName +"]").addClass("active");
        });

        //  激活第一个选项卡
        $element.trigger("change.tab", $element.find("li:first").attr("data-tab"));

        return this;  // 返回链式调用
    };
})(jQuery);


// 基本示例
$("#tabs").tabs("#tabsContent");


/*
 * 应用扩展
 * 切换时将tabName写入hash
 * 当hashchange的时候触发tabs切换
*/
// 当切换的时候,把tabName写入hash
$("#tabs").bind("change.tab", function (e, tabName) {
    location.hash = tabName;
});

// 目前除了 ie67 外都原生支持 hashchange 事件
$(window).bind("hashchange", function () {
    var tabName = location.hash.slice(1);
    $("#tabs").trigger("change.tab", tabName);
});

 

posted @ 2014-06-18 11:23  farawayfromhome  阅读(314)  评论(0编辑  收藏  举报