• 利用原型对象来实现 隔行变色 全选不选反选 以及选项卡的功能


    先上代码

    ;(function(){
        var momiji={};
        window.mo=momiji;
        /***********************隔行变色开始 ***********************/
        momiji.setBg={
            oldColor:null,
        }
        momiji.setBg.inti=function(option){//存放默认数据
            this.opt={
                'Ctx':'#contain_1',
                'ele':"div",
                'even':'even-color',
                'odd':'odd-color',
                'act':'active',
            }
            for(var key in option){             //通过option来遍历更新this.opt里面的数据
                this.opt[key]=option[key];
            }
            if(this.opt.ele=='table'){  //
                this.contain=document.querySelector(this.opt.Ctx);
                this.elements=this.contain.querySelectorAll(this.opt.ele+' tr');
                for(var i=0;i<this.elements.length;i++){                             //剔除th部分
                    if(this.elements[i].children[0].nodeName.toLowerCase()=='th'){
                        this.elements=[].slice.call(this.elements);
                        this.elements.splice(i,1);
                    }
                }
            }else{
                this.contain=document.querySelector(this.opt.Ctx);
                this.elements=this.contain.querySelectorAll(this.opt.ele);
            }
        }
        momiji.setBg.inti.prototype.setBgColor=function(){//为 奇数行 偶数行添加背景颜色
            for(var i=0;i<this.elements.length;i++){
                if(i%2==0){
                    this.elements[i].className=this.opt.even;
                }else{
                    this.elements[i].className=this.opt.odd;
                }
            }
        }
        momiji.setBg.inti.prototype.hover=function(){   //鼠标移动事件
            var that=this;
            for(var i=0;i<this.elements.length;i++){
                this.elements[i].onmouseover=function(){  //移进
                    that.addBg(this);
                }
                this.elements[i].onmouseout=function(){     //移出
                    that.removeBg(this);
                }
            }
        }
        momiji.setBg.inti.prototype.addBg=function(obj){//添加 className
            this.oldColor=obj.className;
            obj.className=this.opt.act;
        }
        momiji.setBg.inti.prototype.removeBg=function(obj){//将 className 恢复到原来的配置
            obj.className=this.oldColor;
        }
        /**************************隔行变色结束 ************************/
    
    
        /**************************全选 不选 反选 开始**********************/
        momiji.cCheck={}
        momiji.cCheck.inti=function(option){
            this.opt={
                'ctx':'#contain',
                'ele_1':'input[type=checkbox]',
                'ele_2':'input[type=button]',
            }
            for(var key in option){
                this.opt[key]=option[key];
            }
            this.contain=document.querySelector(this.opt.ctx);
            console.log(this.contain);
            this.elements_1=this.contain.querySelectorAll(this.opt.ele_1);
            this.elements_2=this.contain.querySelectorAll(this.opt.ele_2);
        }
        momiji.cCheck.inti.prototype.choose=function(){
            var that=this;
            for(var i=0;i<this.elements_2.length;i++){
                if(this.elements_2[i].value=='全选'){
                    this.elements_2[i].onclick=function(){
                        that.checkAll();
                    }
                }else if(this.elements_2[i].value=='不选'){
                    this.elements_2[i].onclick=function(){
                        that.unCheck();
                    }
                }else{
                    this.elements_2[i].onclick=function(){
                        that.reverseCheck();
                    }
                }
            }
        }
        momiji.cCheck.inti.prototype.checkAll=function(){
            for(var i=0;i<this.elements_1.length;i++){
                this.elements_1[i].checked=true;
            }
        }
        momiji.cCheck.inti.prototype.unCheck=function(){
            for(var i=0;i<this.elements_1.length;i++){
                this.elements_1[i].checked=false;
            }
        }
        momiji.cCheck.inti.prototype.reverseCheck=function(){
            for(var i=0;i<this.elements_1.length;i++){
                this.elements_1[i].checked=!this.elements_1[i].checked;
            }
        }
         /**************************全选 不选 反选 结束**********************/
    
    
        /**************************选项卡 开始**********************/
        momiji.Tab={}
        momiji.Tab.inti=function(option){
            this.opt={
                'ctx':'#tab',
                'act':'active',
                'ele':'div',
                'btn':'button'
            }
            for(var key in option){
                this.opt[key]=option[key];
            }
            this.contain=document.querySelector(this.opt.ctx);
            this.btn=this.contain.querySelectorAll(this.opt.btn);
            this.elements=this.contain.querySelectorAll(this.opt.ele);
            this.btn[0].className=this.opt.act;
        }
        momiji.Tab.inti.prototype.tabTab=function(){
            var that=this;
            for(var i=0;i<this.btn.length;i++){
                this.btn[i].index=i;
                this.btn[i].onclick=function(){
                    that.start(this);
                }
            }
        }
        momiji.Tab.inti.prototype.start=function(obj){
            for(var i=0;i<this.btn.length;i++){
                this.btn[i].className='';
                this.elements[i].style.display='none';
            }
            obj.className=this.opt.act;
            this.elements[obj.index].style.display='block';
        }
        /**************************选项卡 结束**********************/
    
        
    })()
    在一个效果中,在setBg的init函数里面通过外部传入的参数来修改setBg的默认参数,Ctx为实现特效的节点,ele判断节点使table还是div,其他步骤只是通过这些参数,实现一个小小的功能。
    在通过如下方式调用
    window.onload=function(){
                var obj= new mo.setBg.inti({'Ctx':'#contain_2','ele':'table','even':'even-color_1','odd':'odd-color_1'});
                obj.setBgColor();
                obj.hover();
    
                var obj_w=new mo.setBg.inti({'Ctx':'#www','ele':'div','act':'active_1'});
                obj_w.setBgColor();
                obj_w.hover();
    
                var obj_1=new mo.setBg.inti({'Ctx':'#contain_1','ele':'div','act':'active'});
                obj_1.setBgColor();
                obj_1.hover();
            }

    当然,也可以在原型对象上每个函数添加一个retrun this 这样就可以实现链式调用了

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Document</title>
        <style>
            *{
                margin: 0px;
                padding: 0px;
            }
            #contain_1 div{
                padding: 10px;
                border: 1px solid #666;
                margin: 10px;
            }
            #www div{
                padding: 10px;
                border: 1px solid #666;
                margin: 10px;
            }
            .even-color{
                background: #eee;
            }
            .even-color_1{
                background: #0f0;
            }
            .odd-color{
                background: #aaa;
            }
            .odd-color_1{
                background: #0a0;
            }
            .active{
                background: yellow;
            }
            .active_1{
                background: red;
            }
            table{
                border-collapse: collapse;
                width: 100%;
            }
            tr,td,th{
                border: 1px solid #666;
                text-align: center;
                padding: 10px;
            }
        </style>
        <script src="./momiji.js"></script>
        <script>
            window.onload=function(){
                var obj= new mo.setBg.inti({'Ctx':'#contain_2','ele':'table','even':'even-color_1','odd':'odd-color_1'});
                obj.setBgColor();
                obj.hover();
    
                var obj_w=new mo.setBg.inti({'Ctx':'#www','ele':'div','act':'active_1'});
                obj_w.setBgColor();
                obj_w.hover();
    
                var obj_1=new mo.setBg.inti({'Ctx':'#contain_1','ele':'div','act':'active'});
                obj_1.setBgColor();
                obj_1.hover();
            }
        </script>
    </head>
    <body>
        <div id="contain_1">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
        <div id="www">
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
            <div></div>
        </div>
        <div id="contain_2">
            <table>
                <tr>
                    <th>姓名</th>
                    <th>种类</th>
                    <th>出自</th>
                </tr>
                <tr>
                    <td>momiji</td>
                    <td>dog/wolf</td>
                    <td>th project</td>
                </tr>
                <tr>
                    <td>momiji</td>
                    <td>dog/wolf</td>
                    <td>th project</td>
                </tr>
                <tr>
                    <td>momiji</td>
                    <td>dog/wolf</td>
                    <td>th project</td>
                </tr>
            </table>
        </div>
    </body>
    </html>

    效果图如下

  • 相关阅读:
    Debian8搭建LEMP环境
    ProjectManager Beta 7 项目管理器发布
    我的Linux软件集
    修改/home内子目录的名字
    Nginx配置特定二级域名
    Debian8 安装wordpress博客
    LinuxMint18使用单独分区作为Home挂载点
    LinuxMint18配置Grub2默认启动操作系统
    《失恋33天》从绝境中走出来的故事
    爱的世界很拥挤,写在读《爱,就这么简单》之后
  • 原文地址:https://www.cnblogs.com/momomiji/p/8512688.html
Copyright © 2020-2023  润新知