自动切换,标签切换,延时切换,切换

啥?延时切换?自动切换?好吧,我先写好了,看你需求怎么折腾 - -,

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title> 标签切换 </title>
<style type="text/css">
    * { margin: 0; padding: 0; }
    .box { width: 300px; margin: 0 auto; font: 12px/1.5 'microsoft yahei'; text-align: center; }
    .box .hd { overflow: hidden; }
    .box .hd a { float: left; width: 100px; height: 30px; }
    .box .hd .cur { background-color: #ccc; }
    .box .bd div { width: 300px; height: 100px; line-height: 100px; background-color: #ccc; }

    /* 必须样式 */
    .box .hd .cur { }
    .box .bd div { display: none;}

</style>
</head>
<body>
<!-- 注意:默认选项的栏目有class名,默认切换内容有 display:block; -->
<div class="box" id="oBox">
    <div class="hd">
        <a class="cur" href="">栏目1</a>
        <a href="">栏目2</a>
        <a href="">栏目3</a>
    </div>
    <div class="bd">
        <div style="display: block;">内容1</div>
        <div>内容2</div>
        <div>内容3</div>
    </div>
</div>
<script type="text/javascript">
function TabSwitch (conf){
    this.obj = conf.obj;
    this.cur = conf.cur || 'cur';
    this.hd = conf.hd;
    this.bd = conf.bd;
    this.ev = conf.ev || 'mouseover';
    this.delay = conf.delay || 0;
    this.auto = conf.auto;
    this.index = 0;
    if(this.auto){
        this.delay = conf.delay || 1000;
        this.AutoPaly();
    }else{
        this.Int();
    }
}
TabSwitch.prototype = {
    bindEvent : function(obj, ev, fn){
        var F = function(){
            fn.apply(obj, arguments);
        };
        window.addEventListener ? obj.addEventListener(ev, F, false) : obj.attachEvent("on" + ev, F);
    },
    Switch : function(index){
        for(var n = 0,len = this.hd.length; n < len; n++){
            this.hd[n].className="";
            this.bd[n].style.display = "none";
        }
        this.hd[index].className = this.cur;
        this.bd[index].style.display = "block";
    },
    Int : function(){
        var timer = null,_this = this;
        for(var i = 0, len = this.hd.length; i < len; i++)
        {
            this.hd[i].index = i;
            this.bindEvent(this.hd[i], this.ev, function(){
                _this.index = this.index;
                if(_this.delay && !_this.auto){
                    clearTimeout(timer);
                    timer = setTimeout(function(){
                        _this.Switch(_this.index);
                    },_this.delay);
                }
                else{
                    _this.Switch(_this.index);
                }
            });
        }
    },
    Auto : function(){
        if(this.index >= this.hd.length){this.index = 0;}
        this.Switch(this.index);
        this.index ++;
    },
    AutoPaly : function(){
        var timer = null,_this = this;
        clearInterval(timer);
        timer = setInterval(function(){
            _this.Auto();
        },_this.delay);
        this.Events.bindEvent(this.obj, "mouseover", function(){
            clearInterval(timer);
            _this.Int();
        });
        this.Events.bindEvent(this.obj, "mouseout", function(){
            timer = setInterval(function(){
                _this.Auto();
            },_this.delay);
        });
    }
};
window.onload = function (){
    var obj = document.getElementById("oBox"),
        aHeadList = obj.getElementsByTagName("div")[0].getElementsByTagName("a"),
        aTabList = obj.getElementsByTagName("div")[1].getElementsByTagName("div");
    /**
     * @obj(ID) 自动播放时必选(用于暂停自动播放)
     * @hd(必选)要切换的头部一组元素
     * @bd(必选)要切换的内容一组元素
     * @cur(可选,string) 头部选中的class,默认cur
     * @ev(可选,string) 触发选项卡的事件,默认mouseover
     * @delay(可选,number)延迟多少毫秒切换,自动播放时默认1000,其他默认0
     * @auto(可选,bool)是否自动播放
     **/
    new TabSwitch({hd:aHeadList, bd:aTabList});
}
</script>
</body>
</html>

 

posted @ 2013-08-20 16:20  小七丶  阅读(760)  评论(2编辑  收藏  举报