• 使用jQuery.extend创建一个简单的选项卡插件


    选项卡样式如图,请忽略丑陋的样式,样式可以随意更改

    主要是基于jquery的extend扩展出的一个简单的选项卡插件,注意:这里封装的类使用的是es6中的class,所以不兼容ie8等低版本浏览器呦!想要兼容低版本可以参考思路,然后换成原生的构造函数原型继承方式

    以下是 tabs.js 文件:

    class Tabs{
        constructor(that){
            this.that=that;
            this.opt={//默认参数,不传走默认
                eventN:'click',
                btns:['新闻','娱乐','游戏'],
                contents:['新闻1','娱乐1','游戏1']
            }
        }
        init(opt){
            //是否用默认参数
            $.extend(this.opt,opt);//匹配传递进来的配置参数,有就覆盖,没有就用默认的
    
            //创建按钮
            this.creatButton();
            //创建切换内容
            this.creatContents();
            //添加功能
            this.events(this.opt.eventN);
        }
        creatButton(){
            let html=``;
            this.opt.btns.forEach((e,i)=>{
                html+=`<button class="${i===0?'action':''}">${e}</button>`;
            });
          this.that.append(html);
        }
        creatContents(){
            let html=``;
            this.opt.contents.forEach((e,i)=>{
    
                html+=`<div class="${i===0?'show':''}">${e}</div>`;
            });
            this.that.append(html);
        }
    
        events(evName){
    
            let buts=this.that.find('button'),
                contents=this.that.find('div');
                buts.on(evName,function () {
                   buts.removeClass('action');
                   contents.removeClass('show');
    
                   $(this).addClass('action');
                   let inx=$(this).index('button');
                   contents.eq(inx).addClass('show');
               });
    
        }
    }
    $.fn.extend({
        tabs:function (opt) {
            let t=new Tabs(this);//this是jq对象
            t.init(opt);
        }
    })

    调用方式:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>vue</title>
        <style>
            #app{
                width: 210px;
                height: 100px;
    
            }
            #app button{
                width: 70px;
                height: 44px;
                line-height: 44px;
                background: yellow;
                border:0;
                cursor: pointer;
            }
            #app button.action{
    
                background: darkorange;
            }
            #app div{
                display: none;
                width: 210px;
                background: slateblue;
            }
            #app div.show{
                display: block;
            }
    
        </style>
    
    </head>
    <body>
    
    <section id="app">
    </section>
    <script src="./jquery.js"></script>
    <script src="./tabs.js"></script>
    <script>
    
        $('#app').tabs({
            eventN:'mouseover',//默认click
            btns:['新闻1','娱乐2','游戏1'],
            contents:['新闻内容','娱乐内容','游戏内容']
        });
    
    </script>
    </body>
    </html>

    赋值代码,效果就可以呈现!

  • 相关阅读:
    node cluster(集群) 模块可以创建共享服务器端口的子进程
    通过 Channel Messaging API的「MessageChannel」,实现iframe与主页面的双通讯
    5.nginx的keepalive和pipe
    4.nginx的server_name正则匹配
    3.nginx的特殊server_name及匹配
    2.nginx的server_name匹配顺序
    1.初识nginx
    flutter pub.get 没有反应
    linux cp拷贝文件时,不确认强制覆盖
    Cocos学习笔记
  • 原文地址:https://www.cnblogs.com/xinxinxiangrong7/p/9588355.html
Copyright © 2020-2023  润新知