选项卡(Tab)切换效果与关联事件处理实现

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
 <HEAD>
  <TITLE> Home Tab Originally </TITLE>
  <META NAME="Generator" CONTENT="EditPlus">
  <META NAME="Author" CONTENT="JiahaiWu">
  <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
  <!-- 
  实现Tab页切换效果 示例程序
  @auther  JiahaiWu     2011-08-01
  @version 0.0.0.2
  @Note  JS代码执行依赖于jQuery.js 1.4.3以上版本
  -->
  <style type="text/css">
/* Tab 标签及内容区域样式设置   
---------------------------------------------- */
.homeTab
{
    background: #FFFFF;
    padding: 10px 10px;
    width: 900px;
    margin: 0 auto;
}
.homeTab .tabHeader span
{
    padding-top: 5px;
    padding-left: 7px;
    padding-right: 5px;
    border: #ccc 1px solid;
    background-color: #D2E8F7;
    margin-left: 3px;
    cursor: pointer;
}
.homeTab .container
{
    padding: 10px 10px 8px 10px;
    clear: left;
    border: #ccc 1px solid;
}
.hidden
{
    visibility: hidden;
    display: none;
}
.homeTab .tabHeader .normal
{
    color: #000;
    background-color: #D2E8F7;
}
.homeTab .tabHeader .hover
{
    color: #000;
    background-color: #2AE8EF;
}
.homeTab .tabHeader .selected
{
    color: #000;
    background-color: #FFFFFF;
    margin-bottom: 0;
    border-top: 2px solid #FF2000;
    border-bottom: 1px solid snow;
}
  </style>
 </HEAD>
 <BODY>
    <div class="homeTab"> 
 <div class="tabHeader"> 
<span class="normal">Tab 1</span> 
<span class="selected">Tab 2</span> 
<span class="hover">Tab  3</span> 
 </div> 
 <div class="container">
 <div>This is tab 1.</div> 
 <div class="hidden">More content in tab 2.</div> 
 <div class="hidden">Tab 3 is always last!</div> 
 </div>
</div>
<br/>
<br/>

<SCRIPT LANGUAGE="JavaScript" src="jquery-1.6.2.min.js"></SCRIPT>
<script language="javascript">
/**  homeTab 
-- @version 0.0.0.2  
-- @auther JiahaiWu  
-- @Date 2011-08-01 
**/
/**
*   实现Tab页切换效果 示例程序
  @auther  JiahaiWu     2011-08-01
  @version 0.0.0.2
  为了便于实现效果作如下约定:
  S1: Tab页面切换作用区域    selector:{"tab":".homeTab","header":".header","container":".container","subHeader":"span","subContainer":"div"}
  S2: Tab切换关联样式     classSet:{"normal":"normal","hover":"hover","selected":"selected", "hidden":"hidden","visible":""}
  S3: JS代码执行依赖于jQuery.js 1.4.3以上版本
 *
 */
var homeTab = {
    setting: {
        //选项卡页签选择器参数设置
        selector: { "tab": ".homeTab", "header": ">.tabHeader", "container": ">.container", "subHeader": ">span", "subContainer": ">div" },
        //选项卡页签样式变换参数设置
        classSet: { "normal": "normal", "hover": "hover", "selected": "selected", "hidden": "hidden", "visible": "" },
        //触发事件回调函数
        eventHandler: null,
        //设置隐藏选项卡的索引集
        hideIndexs: [],
        baseIndex: 0
    },
    //加载tab选项卡内容方法
    _loadTab: function (setting) {
        var selectedIndex = -1;
        var tabTags = [];
        var tabCons = [];
        var _needHide = function (index) {
            for (var i = 0; i < setting.hideIndexs.length; i++) {
                if (setting.hideIndexs[i] === index)
                    return true;
            }
            return false;
        };
        var _select = function (index) {
            tabTags[selectedIndex].className = setting.classSet.normal;
            tabCons[selectedIndex].className = setting.classSet.hidden;
            selectedIndex = index;
            tabTags[selectedIndex].className = setting.classSet.selected;
            tabCons[selectedIndex].className = setting.classSet.visible;
        };
        var _focus = function (index) {
            if (selectedIndex === index)
                return;
            tabTags[index].className = setting.classSet.hover;
        };
        var _unfocus = function (index) {
            if (selectedIndex === index)
                return;
            tabTags[index].className = setting.classSet.normal;
        };
        var ActiveIndexChanging = function (index) {
            if (typeof (setting.eventHandler) === "function")
                return setting.eventHandler.apply(this, ["ActiveIndexChanging", selectedIndex, index, setting.selector.tab]);
            else
                return true;
        };
        var ActiveIndexChanged = function (index) {
            if (typeof (setting.eventHandler) === "function")
                return setting.eventHandler.apply(this, ["ActiveIndexChanged", selectedIndex, index, setting.selector.tab]);
            else
                return true;
        };
        //构建tabConatainer处理对象,绑定必要的事件方法
        var construct = function () {
            var tabContainers = jQuery(setting.selector.tab + " " + setting.selector.container + " " + setting.selector.subContainer);
            jQuery(setting.selector.tab + " " + setting.selector.header + " " + setting.selector.subHeader).each(function (index) {
                tabTags.push(this);
                tabCons.push(tabContainers.get(index));
                jQuery(this).mouseover(index, function () {
                    _focus(index);
                });
                jQuery(this).mouseout(index, function () {
                    _unfocus(index);
                });
                jQuery(this).click(index, function () {
                    var doNext = ActiveIndexChanging(index);
                    if (doNext !== false) {
                        _select(index);
                        ActiveIndexChanged(index);
                    }
                });
            });
            if (tabCons.length < tabTags.length || tabTags.length < 1)
                throw new Error("Error: the tab container blocks length is illegal!");
        };
        var init = function () {
            construct();
            selectedIndex = setting.baseIndex;
            for (var i = 0; i < tabTags.length; i++) {
                if (i !== setting.baseIndex) {
                    if (_needHide(i)) {
                        tabTags[i].className = setting.classSet.hidden;
                        tabCons[i].className = setting.classSet.hidden;
                    }
                    else {
                        tabTags[i].className = setting.classSet.normal;
                        tabCons[i].className = setting.classSet.hidden;
                    }
                }
            };
            _select(setting.baseIndex);

            setting.selectedIndex = selectedIndex;
            setting.tabTags = tabTags;
            setting.tabCons = tabCons;
        };
        //run self
        init();
        return setting;
    },
    _removeTab: function (setting) {
        var tabContainers = jQuery(setting.selector.tab + " " + setting.selector.container + " " + setting.selector.subContainer);
        jQuery(setting.selector.tab + " " + setting.selector.header + " " + setting.selector.subHeader).each(function (index) {
            this.onclick = "";
            this.onmouseover = "";
            this.onmouseout = "";
        });
    },
    /**
    * 加载tab选项卡简易方法,参数不足部分使用默认配置项
    * @param _tabSelector  tab选项卡选择器值,具体用法参考jQuery选择器规则
    * @param _index  tab选项卡初始显示选项卡索引值
    * @auther JiahaiWu    2011-08-01
    **/
    add: function (_tabSelector, _index, _eventHandler) {
        try {
            if (typeof (_tabSelector) === "string")
                homeTab.setting.selector.tab = _tabSelector;
            if (typeof (_index) === "number" && /^[0-9]{1,2}$/.test(_index))
                homeTab.setting.baseIndex = _index;
            if (typeof (_eventHandler) === "function")
                homeTab.setting.eventHandler = _eventHandler;
            return homeTab._loadTab(homeTab.setting);
        }
        catch (ex) {
            alert(ex.message);
        }
    },
    remove: function (_tabSelector) {
        try {
            if (typeof (_tabSelector) === "string")
                homeTab.setting.selector.tab = _tabSelector;
            homeTab._removeTab(homeTab.setting);
        }
        catch (ex) {
            alert(ex.message);
        }
    }
};

//针对tab菜单切换事件回调处理方法
//@auther JiahaiWu    2011-08-01
function DefaultHandler(eventStr, activeIndex, changingIndex, tab) {
  if (eventStr === "ActiveIndexChanging" ) {
 alert(eventStr);
  }
  else
 return true;
}

//基于HomeTab脚本加载Tab页面
//指定相关配置属性后再添加Tab页元素
//@auther JiahaiWu    2011-08-01
function tabLoader(startIndex,_handler) {
//homeTab.setting.hideIndexs = [9];
homeTab.setting.selector = { "tab": ".homeTab", "header": ">.tabHeader", "container": ">.container", "subHeader": ">span", "subContainer": ">div" };
if (typeof (_handler) === "function")
 homeTab.setting.eventHandler = _handler;
else
 homeTab.setting.eventHandler = null;
homeTab.add(".homeTab", startIndex);
}

//初始方法调度
//@auther JiahaiWu    2011-08-01
jQuery(document).ready(function(){
     tabLoader(0,null);
    //tabLoader(0,DefaultHandler);
});
</script>
 </BODY>
</HTML>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值