面向对象版Tab栏切换

<div class="wrapper" id="wrapper">
    <ul class="tab" id="tab-menu">
        <li class="tab-item active">国际大牌<span></span></li>
        <li class="tab-item">国妆名牌<span></span></li>
        <li class="tab-item">清洁用品<span></span></li>
        <li class="tab-item">男士精品</li>
    </ul>
    <div class="products" id="tab-main">
        <div class="main selected">
            <a href="###"><img src="imgs/guojidapai.jpg" alt=""/></a>
        </div>
        <div class="main">
            <a href="###"><img src="imgs/guozhuangmingpin.jpg" alt=""/></a>
        </div>
        <div class="main">
            <a href="###"><img src="imgs/qingjieyongpin.jpg" alt=""/></a>
        </div>
        <div class="main">
            <a href="###"><img src="imgs/nanshijingpin.jpg" alt=""/></a>
        </div>
    </div>
</div>
var tb = new Tab({
        tabMenu: "tab-menu",    // 指定tab栏菜单id
        tabMain: "tab-main",    // 指定tab栏内容id
        auto: true           // 是否自动播放
    });

面向对象封装

function Tab(obj) {
    this.tabMenus = null;
    this.tabMains = null;
    if(obj) {
        this._init(obj);
    }
}
Tab.prototype = {
    constructor: Tab,
    timer : null,
    _init:function(obj){
        this.initEle(obj);
        this.click();
        if(obj.auto){
            this.autoPlay();
        }

    },
    initEle:function(obj){
        var tabMenu = document.getElementById(obj.tabMenu);
        var tabMain = document.getElementById(obj.tabMain);
        this.tabMenus = tabMenu.children;
        this.tabMains = tabMain.children;
    },
    click: function() {
        var that = this;
        for(var i=0,len=this.tabMenus.length;i<len;i++) {
            this.tabMenus[i].onclick = function(){
                that.show(this);
                that.autoPlay(this.index);
            }
        }
    },
    show: function(currentLi) {
        for(var i=0,len=this.tabMenus.length;i<len;i++) {
            this.tabMenus[i].index = i;
            this.tabMenus[i].className = "tab-item";
            this.tabMains[i].style.display = "none";
        }
        currentLi.className += " active";
        this.tabMains[currentLi.index].style.display = "block";
    },
    autoPlay: function(currentIndex){
        var that = this;
        var index = 0;
        if(currentIndex !== undefined && currentIndex !== ""){
            index = currentIndex;
        }
        clearInterval(this.timer);
        this.timer = setInterval(function(){
            index++;
            if(index == that.tabMenus.length){
                index = 0;
            }
            that.show(that.tabMenus[index]);
        },2000);
    }
}

注意事项:

这里要注意timer的位置,如果将timer放在构造函数里如this.timer=null,则_init()方法要用新创建出的对象来调用timer才生效(tb._init())
如果在构造函数里使用 this._init(obj);来初始化,则timer要放到原型对象里(timer:null)才生效
这里的生效是指清除定时器时clearInterval(this.timer); this.timer为同一个对象 正常情况下this.timer值为null,未生效的情况下值为undefined
由于一些经验不足上面的一段解释是错误的,造成timer值为Undefined的原因为this.timer=null应该在调用方法_init()之前定义


转载于:https://www.cnblogs.com/zmshare/p/6644990.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用jQuery来实现一个简单的tab切换。下面是一个示例代码: HTML: ```html <div class="tab-wrapper"> <ul class="tab-nav"> <li><a href="#tab1">Tab 1</a></li> <li><a href="#tab2">Tab 2</a></li> <li><a href="#tab3">Tab 3</a></li> </ul> <div class="tab-content"> <div id="tab1" class="tab-pane">Tab 1 Content</div> <div id="tab2" class="tab-pane">Tab 2 Content</div> <div id="tab3" class="tab-pane">Tab 3 Content</div> </div> </div> ``` CSS: ```css .tab-nav li { display: inline-block; margin-right: 10px; } .tab-nav li a { display: block; padding: 5px; background-color: #eee; border: 1px solid #ccc; text-decoration: none; color: #333; } .tab-nav li.active a { background-color: #fff; border-bottom-color: transparent; } .tab-content .tab-pane { display: none; } .tab-content .active { display: block; } ``` JavaScript: ```javascript $(document).ready(function() { $('.tab-nav li:first-child').addClass('active'); $('.tab-content .tab-pane:first-child').addClass('active'); $('.tab-nav li a').click(function() { var tab_id = $(this).attr('href'); $('.tab-nav li').removeClass('active'); $('.tab-content .tab-pane').removeClass('active'); $(this).parent().addClass('active'); $(tab_id).addClass('active'); return false; }); }); ``` 首先,给每个tab页一个唯一的id,然后使用CSS来设置样式。JavaScript代码中,我们给第一个tab页和tab导航的第一个选项添加active类。然后,当点击tab导航的某一项时,我们首先移除所有的active类,然后给被点击的导航项和对应的tab页添加active类。最后,返回false以阻止默认链接行为。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值