jacascript 原生选项卡插件

前言:这是笔者学习之后自己的理解与整理。如果有错误或者疑问的地方,请大家指正,我会持续更新!

一直以来没自己写过插件,今天写个简单的面向对象的选项卡,发现了很多问题:

  1. var that = this; 的时候忘记加 var;
  2. setInterval 的用法不是很熟练;
  3. 写完插件,必须得实例化2个以上多次检查,上面两个问题查了我很长时间;

在布局的时候,想到了很多以前看到过的案例,再次熟悉一下:

  1. a链接之间的竖线:可以用a链接的border-right/left;  也可以直接 | ;还可以再加个行内元素,用它的border-right/left,
  2. 我这里在a链接之间加了个i,在结尾处有1px的误差,以后再处理;
  3. a链接(行内元素)之间的间隙,可以用浮动解决; 也可以把元素的首尾互相连接;
  4. 某一板块,不论点击哪里都会跳转:可以直接用a链接包住;也可以用a链接遮罩;

代码都写在一起,很乱,命名也不规范,还有很多不足;

第一种原型是直接写的,第二种原型是字面对象的;

继续学习下用立即函数的写法,以后在贴上来;

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>选项卡原生插件</title>
        <style type="text/css">
            /*重置样式*/
            *{
                padding: 0;
                margin: 0;
            }
            body{
                font: 14px/100% arial,"Hiragino Sans GB","Hiragino Sans GB W3";
            }
            li{
                list-style: none;
            }
            a{
                color: #333;
                text-decoration: none;
            }
            .clearfix:before, /*:before处理margin上下重叠*/
            .clearfix:after {
                content: "";
                display: table;
            }
            .clearfix:after {
                clear: both;
            }
            .clearfix {
                zoom: 1;
            }

            /*选项卡样式*/
            .tab_wrapper_test1,.tab_wrapper_test2{
                width: 480px;
                height: 400px;
                margin: 50px auto;
                border: 1px solid #ccc;
                position: relative;
            }
            .prev,.next{
                width: 30px;
                height: 30px;
                background: rgba(0,0,0,0.3);
                position: absolute;
                z-index: 999;
                top: 190px;
                color: #fff;
                text-align: center;
                line-height: 30px;
                font-weight: bold;
                font-size: 18px;
                font-family: SimSun, Arial;
            }
            .prev{
                left: 15px;
            }
            .next{
                right: 15px;
            }
            .tab_menu{
                font-size: 18px;
                height: 49px;
                margin-right: -1px;
                border-bottom: 1px solid #ccc;
                overflow: hidden;
            }
            .tab_menu a{
                display: inline-block;
                text-align: center;
                line-height: 50px;
                padding: 0 10px;
                width: 39px;
            }
            .border_right{
                border-right: 1px solid #ccc;
            }
            .menu_active{
                background: #0ff;
            }
            .tab_content{
                height: 350px;
            }
            .tab_con_item{
                display: none;
            }
            .con_active{
                display: block;
            }
            /*第一页*/
            .tab_con_href_half{
                display: block;
                text-align: center;
                height: 310px;
                line-height: 310px;
            }
            .tab_con_href_half img{
                max-width: 100%;
                vertical-align: middle;
            }
            .tab_con_txt_half{
                border-top: 1px solid #ccc;
                height: 39px;
                text-align: center;
                line-height: 40px;
                font-size: 18px;
            }
            /*第二页*/
            .tab_con_href_all{
                display: block;
                text-align: center;
                overflow: hidden;
            }
            .tab_con_href_all img{
                height: 350px;
            }
            .tab_con_txt_all{
                position: absolute;
                bottom: 0;
                height: 39px;
                width: 100%;
                /*绝对定位之后,可以用width:100%,来扩宽,然后text-align:center; 水平居中*/
                text-align: center;
                line-height: 40px;
                font-size: 18px;
                background: rgba(0,0,0,0.6);
            }
            .tab_con_txt_all a{
                color: #fff;
            }
            /*第三页、第四页、第五页*/
            .tab_con_href_mask_li{
                text-align: center;
                height: 350px;
                position: relative;
            }
            .tab_con_href_mask_img{
                height: 310px;
                line-height: 310px;
                overflow: hidden;
            }
            .tab_con_href_mask_img img{
                max-width: 100%;
                vertical-align: middle;
            }
            .tab_con_mask_txt{
                border-top: 1px solid #ccc;
                height: 39px;
                text-align: center;
                line-height: 40px;
                font-size: 18px;
            }
            .tab_con_href_mask{
                position: absolute;
                display: block;
                width: 100%;
                height: 350px;
                top: 0;
                left: 0;
                z-index: 998;
            }
            /*第四页*/
            .tab_con_href_mask_img_4{
                height: 350px;
                overflow: hidden;
            }
            .tab_con_href_mask_img_4 img{
                height: 350px;
            }
            .tab_con_mask_txt_4{
                position: absolute;
                bottom: 0;
                width: 100%;
                background: rgba(0,0,0,0.6);
                text-align: center;
                border-top: 1px solid #ccc;
                height: 39px;
                line-height: 40px;
                font-size: 18px;
            }
            .tab_con_mask_txt_4 a{
                color: #fff;
            }
        </style>
    </head>
    <body>
        <div class="tab_wrapper_test1">
            <div class="tab_menu">
                <a href="javascript:;" class="menu_active">热点
                </a><i class="border_right"></i><a href="javascript:;">社会
                </a><i class="border_right"></i><a href="javascript:;">娱乐
                </a><i class="border_right"></i><a href="javascript:;">军事
                </a><i class="border_right"></i><a href="javascript:;">体育
                </a><i class="border_right"></i><a href="javascript:;">财经
                </a><i class="border_right"></i><a href="javascript:;">汽车
                </a><i class="border_right"></i><a href="javascript:;">游戏</a>
                <!--这里的i是那个a之间的竖线,可以用a的border-right做,也可以直接写个| -->
                <!--inline-block之间有间隙,解决方法有:压缩代码、浮动、标签前后折叠-->
            </div>
            <div class="tab_content">
                <ul>
                    <li class="tab_con_item con_active">
                        <!--这里我用了3种方式写最外层的a链接-->
                        <a href="javascript:;" class="tab_con_href_half">
                            <!--a链接只包住图片-->
                            <img src="images/1.jpg" title="girl" alt="girl"/>
                        </a>
                        <div class="tab_con_txt_half">
                            <a href="javascript:;">美丽女孩人人爱</a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <a href="javascript:;" class="tab_con_href_all">
                            <!--a链接只包住所有-->
                            <img src="images/cat.jpeg" title="cat" alt="cat"/>
                            <div class="tab_con_txt_all">
                                <a href="javascript:;">可爱猫咪</a>
                            </div>
                        </a>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img">
                                <img src="images/xiaoxin.gif" title="蜡笔小新" alt="蜡笔小新"/>
                            </div>
                            <div class="tab_con_mask_txt">
                                <a href="javascript:;">动感超人biu biu</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/2.jpg" title="帅哥" alt="帅哥"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">帅男</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat2.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat.jpeg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                </ul>
            </div>
            <!--这里的箭头可以用图片,也可以用纯css代码,也可以用转义字符+SimSun字体-->
            <a href="javscript:;" class="prev">&lt;</a>
            <a href="javscript:;" class="next">&gt;</a>
        </div>

        <div class="tab_wrapper_test2">
            <div class="tab_menu">
                <a href="javascript:;" class="menu_active">热点
                </a><i class="border_right"></i><a href="javascript:;">社会
                </a><i class="border_right"></i><a href="javascript:;">娱乐
                </a><i class="border_right"></i><a href="javascript:;">军事
                </a><i class="border_right"></i><a href="javascript:;">体育
                </a><i class="border_right"></i><a href="javascript:;">财经
                </a><i class="border_right"></i><a href="javascript:;">汽车
                </a><i class="border_right"></i><a href="javascript:;">游戏</a>
                <!--这里的i是那个a之间的竖线,可以用a的border-right做,也可以直接写个| -->
                <!--inline-block之间有间隙,解决方法有:压缩代码、浮动、标签前后折叠-->
            </div>
            <div class="tab_content">
                <ul>
                    <li class="tab_con_item con_active">
                        <!--这里我用了3种方式写最外层的a链接-->
                        <a href="javascript:;" class="tab_con_href_half">
                            <!--a链接只包住图片-->
                            <img src="images/1.jpg" title="girl" alt="girl"/>
                        </a>
                        <div class="tab_con_txt_half">
                            <a href="javascript:;">美丽女孩人人爱</a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <a href="javascript:;" class="tab_con_href_all">
                            <!--a链接只包住所有-->
                            <img src="images/cat.jpeg" title="cat" alt="cat"/>
                            <div class="tab_con_txt_all">
                                <a href="javascript:;">可爱猫咪</a>
                            </div>
                        </a>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img">
                                <img src="images/xiaoxin.gif" title="蜡笔小新" alt="蜡笔小新"/>
                            </div>
                            <div class="tab_con_mask_txt">
                                <a href="javascript:;">动感超人biu biu</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/2.jpg" title="帅哥" alt="帅哥"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">帅男</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat2.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat.jpeg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                </ul>
            </div>
            <!--这里的箭头可以用图片,也可以用纯css代码,也可以用转义字符+SimSun字体-->
            <a href="javscript:;" class="prev">&lt;</a>
            <a href="javscript:;" class="next">&gt;</a>
        </div>

        <script type="text/javascript">
            window.onload = function(){
                function TabControl(obj){
                    //选项卡菜单控制部分
                    this.oMenu = obj.getElementsByClassName(‘tab_menu‘)[0];
                    this.menuItem = this.oMenu.getElementsByTagName(‘a‘);
                    //前后控制按钮
                    this.prev = obj.getElementsByClassName(‘prev‘)[0];
                    this.next = obj.getElementsByClassName(‘next‘)[0];
                    //选项卡内容部分
                    this.con = obj.getElementsByClassName(‘tab_content‘)[0];
                    this.conItem = this.con.getElementsByClassName(‘tab_con_item‘);

                    //变量设置
                    //选项卡页数
                    this.count = this.conItem.length;
                    //当前第几页,默认为第一页,也就是0
                    this.current = 0;
                    //这里不要忘了var
                    var that = this;

                    //原型方法
                    //构造函数执行到这里的时候,会判断实例是否有menuSwitch方法,
                    //第一次执行构造函数时,实例是没有menuSwitch方法的,就执行if方法块的代码;
                    //之后再执行此构造函数时,原型上已经有这个方法了,就不会进入
                    //原型上的方法有很多,但是只用检测一个就行了,没必要都检测
                    if(typeof this.menuSwitch != ‘function‘){
                        //菜单控制
                        TabControl.prototype.menuSwitch = function(){
                            //清空所有class名
                            for(var j = 0;j < this.count; j++){
                                this.menuItem[j].className = ‘‘;
                                this.conItem[j].className = ‘tab_con_item‘;
                            }
                            //给当前页添加class名
                            this.menuItem[this.current].className = ‘menu_active‘;
                            this.conItem[this.current].className = ‘tab_con_item con_active‘;
                        };

                        //前按钮控制
                        TabControl.prototype.btnPrevSwitch = function(){
                            if(this.current > 0){
                                //清空前页class名
                                this.menuItem[this.current].className = ‘‘;
                                this.conItem[this.current].className = ‘tab_con_item‘;
                                //页数自减1
                                this.current--;
                                //当前页添加class名
                                this.menuItem[this.current].className = ‘menu_active‘;
                                this.conItem[this.current].className = ‘tab_con_item con_active‘;
                            }else if(this.current == 0){
                                //清空前页class名
                                this.menuItem[this.current].className = ‘‘;
                                this.conItem[this.current].className = ‘tab_con_item‘;
                                //页数跳转至最后一页
                                this.current = this.count-1;
                                //当前页添加class名
                                this.menuItem[this.current].className = ‘menu_active‘;
                                this.conItem[this.current].className = ‘tab_con_item con_active‘;
                            }
                        };

                        //后按钮控制
                        TabControl.prototype.btnNextSwitch = function(){
                            if(this.current < this.count-1){
                                //清空前页class名
                                this.menuItem[this.current].className = ‘‘;
                                this.conItem[this.current].className = ‘tab_con_item‘;
                                //页数自增1
                                this.current++;
                                //当前页添加class名
                                this.menuItem[this.current].className = ‘menu_active‘;
                                this.conItem[this.current].className = ‘tab_con_item con_active‘;
                            }else if(this.current == this.count-1){
                                //清空前页class名
                                this.menuItem[this.current].className = ‘‘;
                                this.conItem[this.current].className = ‘tab_con_item‘;
                                //页数跳转至第一页
                                this.current = 0;
                                //当前页添加class名
                                this.menuItem[this.current].className = ‘menu_active‘;
                                this.conItem[this.current].className = ‘tab_con_item con_active‘;
                            }
                        };
                    }

                    //菜单控制事件
                    for(var i = 0; i < this.count; i++){
                        //设置当前索引,这种设置方法需掌握
                        this.menuItem[i].index = i;
                        this.menuItem[i].onclick = function(){
                            that.current = this.index;
                            that.menuSwitch();
                        }
                    }
                    //前按钮控制
                    this.prev.onclick = function(){
                        that.btnPrevSwitch();
                    }
                    //后按钮控制
                    this.next.onclick = function(){
                        that.btnNextSwitch();
                    } 

                    //自循环
                    var autoTimer = null;
                    //直接执行
                    autoTimer = setInterval(function(){
                        that.btnNextSwitch();
                    },2000);
                    //进入选项卡,清空计时器
                    obj.onmouseover = function(){
                        clearInterval(autoTimer);
                    }
                    //离开选项卡,计时器开始工作
                    obj.onmouseout = function(){
                        autoTimer = setInterval(function(){
                            that.btnNextSwitch();
                        },2000);
                    }
                }

                var oTab1 = document.getElementsByClassName(‘tab_wrapper_test1‘)[0];
                var tab1 = new TabControl(oTab1);

                var oTab2 = document.getElementsByClassName(‘tab_wrapper_test2‘)[0];
                var tab2 = new TabControl(oTab2);
            }
        </script>
    </body>
</html>

第二种,原型是字面对象

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>选项卡原生插件</title>
        <style type="text/css">
            /*重置样式*/
            *{
                padding: 0;
                margin: 0;
            }
            body{
                font: 14px/100% arial,"Hiragino Sans GB","Hiragino Sans GB W3";
            }
            li{
                list-style: none;
            }
            a{
                color: #333;
                text-decoration: none;
            }
            .clearfix:before, /*:before处理margin上下重叠*/
            .clearfix:after {
                content: "";
                display: table;
            }
            .clearfix:after {
                clear: both;
            }
            .clearfix {
                zoom: 1;
            }

            /*选项卡样式*/
            .tab_wrapper_test1,.tab_wrapper_test2{
                width: 480px;
                height: 400px;
                margin: 50px auto;
                border: 1px solid #ccc;
                position: relative;
            }
            .prev,.next{
                width: 30px;
                height: 30px;
                background: rgba(0,0,0,0.3);
                position: absolute;
                z-index: 999;
                top: 190px;
                color: #fff;
                text-align: center;
                line-height: 30px;
                font-weight: bold;
                font-size: 18px;
                font-family: SimSun, Arial;
            }
            .prev{
                left: 15px;
            }
            .next{
                right: 15px;
            }
            .tab_menu{
                font-size: 18px;
                height: 49px;
                margin-right: -1px;
                border-bottom: 1px solid #ccc;
                overflow: hidden;
            }
            .tab_menu a{
                display: inline-block;
                text-align: center;
                line-height: 50px;
                padding: 0 10px;
                width: 39px;
            }
            .border_right{
                border-right: 1px solid #ccc;
            }
            .menu_active{
                background: #0ff;
            }
            .tab_content{
                height: 350px;
            }
            .tab_con_item{
                display: none;
            }
            .con_active{
                display: block;
            }
            /*第一页*/
            .tab_con_href_half{
                display: block;
                text-align: center;
                height: 310px;
                line-height: 310px;
            }
            .tab_con_href_half img{
                max-width: 100%;
                vertical-align: middle;
            }
            .tab_con_txt_half{
                border-top: 1px solid #ccc;
                height: 39px;
                text-align: center;
                line-height: 40px;
                font-size: 18px;
            }
            /*第二页*/
            .tab_con_href_all{
                display: block;
                text-align: center;
                overflow: hidden;
            }
            .tab_con_href_all img{
                height: 350px;
            }
            .tab_con_txt_all{
                position: absolute;
                bottom: 0;
                height: 39px;
                width: 100%;
                /*绝对定位之后,可以用width:100%,来扩宽,然后text-align:center; 水平居中*/
                text-align: center;
                line-height: 40px;
                font-size: 18px;
                background: rgba(0,0,0,0.6);
            }
            .tab_con_txt_all a{
                color: #fff;
            }
            /*第三页、第四页、第五页*/
            .tab_con_href_mask_li{
                text-align: center;
                height: 350px;
                position: relative;
            }
            .tab_con_href_mask_img{
                height: 310px;
                line-height: 310px;
                overflow: hidden;
            }
            .tab_con_href_mask_img img{
                max-width: 100%;
                vertical-align: middle;
            }
            .tab_con_mask_txt{
                border-top: 1px solid #ccc;
                height: 39px;
                text-align: center;
                line-height: 40px;
                font-size: 18px;
            }
            .tab_con_href_mask{
                position: absolute;
                display: block;
                width: 100%;
                height: 350px;
                top: 0;
                left: 0;
                z-index: 998;
            }
            /*第四页*/
            .tab_con_href_mask_img_4{
                height: 350px;
                overflow: hidden;
            }
            .tab_con_href_mask_img_4 img{
                height: 350px;
            }
            .tab_con_mask_txt_4{
                position: absolute;
                bottom: 0;
                width: 100%;
                background: rgba(0,0,0,0.6);
                text-align: center;
                border-top: 1px solid #ccc;
                height: 39px;
                line-height: 40px;
                font-size: 18px;
            }
            .tab_con_mask_txt_4 a{
                color: #fff;
            }
        </style>
    </head>
    <body>
        <div class="tab_wrapper_test1">
            <div class="tab_menu">
                <a href="javascript:;" class="menu_active">热点
                </a><i class="border_right"></i><a href="javascript:;">社会
                </a><i class="border_right"></i><a href="javascript:;">娱乐
                </a><i class="border_right"></i><a href="javascript:;">军事
                </a><i class="border_right"></i><a href="javascript:;">体育
                </a><i class="border_right"></i><a href="javascript:;">财经
                </a><i class="border_right"></i><a href="javascript:;">汽车
                </a><i class="border_right"></i><a href="javascript:;">游戏</a>
                <!--这里的i是那个a之间的竖线,可以用a的border-right做,也可以直接写个| -->
                <!--inline-block之间有间隙,解决方法有:压缩代码、浮动、标签前后折叠-->
            </div>
            <div class="tab_content">
                <ul>
                    <li class="tab_con_item con_active">
                        <!--这里我用了3种方式写最外层的a链接-->
                        <a href="javascript:;" class="tab_con_href_half">
                            <!--a链接只包住图片-->
                            <img src="images/1.jpg" title="girl" alt="girl"/>
                        </a>
                        <div class="tab_con_txt_half">
                            <a href="javascript:;">美丽女孩人人爱</a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <a href="javascript:;" class="tab_con_href_all">
                            <!--a链接只包住所有-->
                            <img src="images/cat.jpeg" title="cat" alt="cat"/>
                            <div class="tab_con_txt_all">
                                <a href="javascript:;">可爱猫咪</a>
                            </div>
                        </a>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img">
                                <img src="images/xiaoxin.gif" title="蜡笔小新" alt="蜡笔小新"/>
                            </div>
                            <div class="tab_con_mask_txt">
                                <a href="javascript:;">动感超人biu biu</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/2.jpg" title="帅哥" alt="帅哥"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">帅男</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat2.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat.jpeg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                </ul>
            </div>
            <!--这里的箭头可以用图片,也可以用纯css代码,也可以用转义字符+SimSun字体-->
            <a href="javscript:;" class="prev">&lt;</a>
            <a href="javscript:;" class="next">&gt;</a>
        </div>

        <div class="tab_wrapper_test2">
            <div class="tab_menu">
                <a href="javascript:;" class="menu_active">热点
                </a><i class="border_right"></i><a href="javascript:;">社会
                </a><i class="border_right"></i><a href="javascript:;">娱乐
                </a><i class="border_right"></i><a href="javascript:;">军事
                </a><i class="border_right"></i><a href="javascript:;">体育
                </a><i class="border_right"></i><a href="javascript:;">财经
                </a><i class="border_right"></i><a href="javascript:;">汽车
                </a><i class="border_right"></i><a href="javascript:;">游戏</a>
                <!--这里的i是那个a之间的竖线,可以用a的border-right做,也可以直接写个| -->
                <!--inline-block之间有间隙,解决方法有:压缩代码、浮动、标签前后折叠-->
            </div>
            <div class="tab_content">
                <ul>
                    <li class="tab_con_item con_active">
                        <!--这里我用了3种方式写最外层的a链接-->
                        <a href="javascript:;" class="tab_con_href_half">
                            <!--a链接只包住图片-->
                            <img src="images/1.jpg" title="girl" alt="girl"/>
                        </a>
                        <div class="tab_con_txt_half">
                            <a href="javascript:;">美丽女孩人人爱</a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <a href="javascript:;" class="tab_con_href_all">
                            <!--a链接只包住所有-->
                            <img src="images/cat.jpeg" title="cat" alt="cat"/>
                            <div class="tab_con_txt_all">
                                <a href="javascript:;">可爱猫咪</a>
                            </div>
                        </a>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img">
                                <img src="images/xiaoxin.gif" title="蜡笔小新" alt="蜡笔小新"/>
                            </div>
                            <div class="tab_con_mask_txt">
                                <a href="javascript:;">动感超人biu biu</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/2.jpg" title="帅哥" alt="帅哥"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">帅男</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat2.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat3.jpg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                    <li class="tab_con_item  ">
                        <div class="tab_con_href_mask_li">
                            <div class="tab_con_href_mask_img_4">
                                <img src="images/cat.jpeg" title="猫咪" alt="猫咪"/>
                            </div>
                            <div class="tab_con_mask_txt_4">
                                <a href="javascript:;">猫咪</a>
                            </div>
                            <a href="javascript:;" class="tab_con_href_mask">
                                <!--a链接做遮罩层-->
                            </a>
                        </div>
                    </li>
                </ul>
            </div>
            <!--这里的箭头可以用图片,也可以用纯css代码,也可以用转义字符+SimSun字体-->
            <a href="javscript:;" class="prev">&lt;</a>
            <a href="javscript:;" class="next">&gt;</a>
        </div>

        <script type="text/javascript">
            window.onload = function(){
                function TabControl(obj){
                    //选项卡菜单控制部分
                    this.oMenu = obj.getElementsByClassName(‘tab_menu‘)[0];
                    this.menuItem = this.oMenu.getElementsByTagName(‘a‘);
                    //前后控制按钮
                    this.prev = obj.getElementsByClassName(‘prev‘)[0];
                    this.next = obj.getElementsByClassName(‘next‘)[0];
                    //选项卡内容部分
                    this.con = obj.getElementsByClassName(‘tab_content‘)[0];
                    this.conItem = this.con.getElementsByClassName(‘tab_con_item‘);

                    //变量设置
                    //选项卡页数
                    this.count = this.conItem.length;
                    //当前第几页,默认为第一页,也就是0
                    this.current = 0;
                    var that = this;

                    //菜单控制事件
                    for(var i = 0; i < this.count; i++){
                        //设置当前索引,这种设置方法需掌握
                        this.menuItem[i].index = i;
                        this.menuItem[i].onclick = function(){
                            that.current = this.index;
                            that.menuSwitch();
                        }
                    }

                    //原型方法
                    //构造函数执行到这里的时候,会判断实例是否有menuSwitch方法,
                    //第一次执行构造函数时,实例是没有menuSwitch方法的,就执行if方法块的代码;
                    //之后再执行此构造函数时,原型上已经有这个方法了,就不会进入
                    //原型上的方法有很多,但是只用检测一个就行了,没必要都检测
                    if(typeof this.menuSwitch != ‘function‘){
                        //原型还可以用字面对象的形式,但要记得手动改变constructor指向,
                        TabControl.prototype = {
                            //字面对象的方式会改变constructor指向,我们手动改变回来
                            constructor : TabControl,
                            //菜单控制
                            menuSwitch : function(){
                                //清空所有class名
                                for(var j = 0;j < this.count; j++){
                                    this.menuItem[j].className = ‘‘;
                                    this.conItem[j].className = ‘tab_con_item‘;
                                }
                                //给当前页添加class名
                                this.menuItem[this.current].className = ‘menu_active‘;
                                this.conItem[this.current].className = ‘tab_con_item con_active‘;
                            },
                            //前按钮控制
                            btnPrevSwitch : function(){
                                if(this.current > 0){
                                    //清空前页class名
                                    this.menuItem[this.current].className = ‘‘;
                                    this.conItem[this.current].className = ‘tab_con_item‘;
                                    //页数自减1
                                    this.current--;
                                    //当前页添加class名
                                    this.menuItem[this.current].className = ‘menu_active‘;
                                    this.conItem[this.current].className = ‘tab_con_item con_active‘;
                                }else if(this.current == 0){
                                    //清空前页class名
                                    this.menuItem[this.current].className = ‘‘;
                                    this.conItem[this.current].className = ‘tab_con_item‘;
                                    //页数跳转至最后一页
                                    this.current = this.count-1;
                                    //当前页添加class名
                                    this.menuItem[this.current].className = ‘menu_active‘;
                                    this.conItem[this.current].className = ‘tab_con_item con_active‘;
                                }
                            },
                            //后按钮控制
                            btnNextSwitch : function(){
                                if(this.current < this.count-1){
                                    //清空前页class名
                                    this.menuItem[this.current].className = ‘‘;
                                    this.conItem[this.current].className = ‘tab_con_item‘;
                                    //页数自增1
                                    this.current++;
                                    //当前页添加class名
                                    this.menuItem[this.current].className = ‘menu_active‘;
                                    this.conItem[this.current].className = ‘tab_con_item con_active‘;
                                }else if(this.current == this.count-1){
                                    //清空前页class名
                                    this.menuItem[this.current].className = ‘‘;
                                    this.conItem[this.current].className = ‘tab_con_item‘;
                                    //页数跳转至第一页
                                    this.current = 0;
                                    //当前页添加class名
                                    this.menuItem[this.current].className = ‘menu_active‘;
                                    this.conItem[this.current].className = ‘tab_con_item con_active‘;
                                }
                            }
                        }
                        //初次调用时,重新调用构造函数返回
                        return new TabControl(obj);
                        //return 构造函数时,实例就不是指向 var tab1 = new TabControl时系统创建的那个object1,
                        //而是指向了return new TabControl时创建的object2,这两个对象的隐式原型是不一样的,
                        //因为在创建object2之前已经修改了TabControl.prototype,              //所以object2的隐式原型已经指向了修改后的TabControl.prototype,因此可以找到原型上的方法
                    }

                    //前按钮控制
                    this.prev.onclick = function(){
                        that.btnPrevSwitch();
                    }
                    //后按钮控制
                    this.next.onclick = function(){
                        that.btnNextSwitch();
                    }
                    //自循环
                    var autoTimer = null;
                    //直接执行
                    autoTimer = setInterval(function(){
                        that.btnNextSwitch();
                    },2000);
                    //进入选项卡,清空计时器
                    obj.onmouseover = function(){
                        clearInterval(autoTimer);
                    }
                    //离开选项卡,计时器开始工作
                    obj.onmouseout = function(){
                        autoTimer = setInterval(function(){
                            that.btnNextSwitch();
                        },2000);
                    }
                }

                var oTab1 = document.getElementsByClassName(‘tab_wrapper_test1‘)[0];
                var tab1 = new TabControl(oTab1);

                var oTab2 = document.getElementsByClassName(‘tab_wrapper_test2‘)[0];
                var tab2 = new TabControl(oTab2);
            }
        </script>
    </body>
</html>
时间: 2024-10-10 10:39:04

jacascript 原生选项卡插件的相关文章

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"> <

【特效】jquery选项卡插件,页面多个选项卡统一调用

把选项卡整合了一下,写成个插件,这样可以整个站,或整个页面有多个选项卡时,统一调用.代码的具体注意事项已经写进注释了.用于js获取元素的class名称必须有,选项卡本身的样式,另再取一个名字来设置(本人不大喜欢用id,一般写js代码也用class名称来获取元素).这样也在一定意义上实现了行为和样式的分离. html: <!--第一个选项卡--> <div class="js_tab box1"> <h2 class="jsTab_title&qu

轻量级扁平风格jQuery选项卡插件

PWS Tabs是一款轻量级jQuery tabs选项卡插件.它可以创建响应式的.扁平风格的标签式选项卡,并且可以定制选项卡的标签颜色,并且tabs进行切换的时候还带有CSS3动画效果. 你可以在tabs选项卡中嵌入视频.谷歌地图.图片和文本等内容,甚至可以将这些内容混合放置在一个选项卡页上. 效果演示:http://www.htmleaf.com/Demo/201504021613.html 下载地址:http://www.htmleaf.com/jQuery/Tabs/20150402161

如何定义一个高逼格的原生JS插件

转自:https://www.jianshu.com/p/205a4033010a 如何定义一个高逼格的原生JS插件 作为一个前端er,如果不会写一个小插件,都不好意思说自己是混前端界的.写还不能依赖jquery之类的工具库,否则装得不够高端.那么,如何才能装起来让自己看起来逼格更高呢?当然是利用js纯原生的写法啦.以前一直说,掌握了js原生,就基本上可以解决前端的所有脚本交互工作了,这话大体上是有些浮夸了.不过,也从侧面说明了原生js在前端中占着多么重要的一面.好了.废话不多说.咱们就来看一下

【原生JS插件】LoadingBar页面顶部加载进度条

先展示一下已经实现的效果: 看到手机上的浏览器内置了页面的加载进度条,想用在pc上. 网上搜了一下,看到几种页面loading的方法: 1.在body头部加入loading元素,在body页脚写入脚本让loading元素消失. 2.基于jquery,在页面的不同位置插入脚本,设置滚动条的宽度. 简单分析一下: 第一个明显不是我想要的. 第二个要在body前加载jquery,然后还要使用到jquery的动画方法,性能肯定达不到最优的状态. 自己的解决方法:原生JS+css3 上面的方法2其实是可以

开源原生JavaScript插件-CJPCD(省市区联动)

一.前言 上两篇博客笔者对 JavaScript Module 模式,闭包等知识点做了简单介绍之后,我们今天开始正式开发一款属于自己的 JavaScript 插件.由于最近项目刚好用到地区选择这一块的功能.网上有许多类似插件,但是有些需求还是有些出入,所以就自己动手写了一个.思路是共通的但是实现和细节肯定会有所不同,我们重点放在代码介绍上.笔者已经将其上传到 github,大家可以下载使用,也可以把源码拷下来参考,路过的朋友顺手 star 哦. 二.补充知识 当前插件版本为1.0.1,能满足最常

进阶前端高级攻城狮:使用单体模式设计原生js插件

----------基于上次写的jquery插件进行改造  http://www.cnblogs.com/GerryOfZhong/p/5533773.html 背景:jQuery插件依赖jQuery库,虽然jQuery使用十分广泛,但是对于移动开发或者在其他带宽需求需要注意的时候,就得考虑,因为我不可能完成一项技术相对来说引用了一个更大的库,这样之不值得的.所以原生js是所有浏览器都支持的一种语言,原生js相对来说就very good了,但是原生js相对新手或者没有很强基础的人来说还是相对比较

手写js面向对象选项卡插件

<!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <title>无缝滚动</title>    <style type="text/css">        body,ul{margin: 0;padding: 0;}        li{list-style: none;}  

js原生选项卡(包含移动端无缝选项卡)三

今天分享下移动端原生js的无缝轮播图: 移动端尽量减少使用DOM操作来频繁的浪费移动端设备的性能,所以这个无缝轮播图更多的使用了transition和transform,无缝的思想和昨天分享的PC端的无缝轮播的思想是一样的,分别在正常的图片的前面插入了最后一张图片和在正常图片的最后插入了第一张图片,在运动到这两张图片时候瞬间清除transition并把整个图片链拉回到正常图片流的位置,从而从产生了无缝 这个移动端轮播图中还阐述了一个思路:为了更好的考虑用户的体验,当用户滑动屏幕的距离小于一定的值