美文网首页
26、插件封装

26、插件封装

作者: 一直流浪 | 来源:发表于2022-09-03 23:33 被阅读0次

    如何封装自定义插件?

    两种方式:

    $.fn.method = function(){}          //实例方法
    $.method = function(){}             //静态方法
    

    两种方法的区别就在于,js代码中的自启动函数中,添加方法的对象不同,实例方法是添加到 .fn上面,而静态方法是直接添加到上面。

    方法一:

    (1)创建jQuery-bgColor.js代码

    (function($){
        //需要给jQuery的原型添加方法
        $.fn.bgColor = function(color){
    //      console.log(this); // 获取到的this是当前的调用对象div
            this.css('background-color',color);
            //返回jQuery对象
            return this;
        }
    }(jQuery));
    

    (2)调用

    <script type="text/javascript" src="js/jQuery3.5.1.js" ></script>
    <script type="text/javascript" src="js/jQuery-bgColor.js" ></script>
    
    <script>
        $(function(){
            $('div').width(100).height(100).bgColor('red');
        })
    </script>
    

    方法二:

    (1)创建jQuery-add.js代码

    (function($){
        $.add = function(num1,num2){
            return num1 + num2;
        }
    }(jQuery))
    

    (2)调用

    <script type="text/javascript" src="js/jQuery3.5.1.js" ></script>
    <script type="text/javascript" src="js/jQuery-bgColor.js" ></script>
    <script type="text/javascript" src="js/jQuery-add.js" ></script>
    <script>
        $(function(){
            console.log($.add(10,20));
        })
    </script>
    

    案例:自定义表格插件

    html文件:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title></title>
            <style>
                table{
                    display: table;
                    border-spacing: 2px;
                    border: 1px solid hotpink;
                    width: 500px;
                    border-collapse: collapse;
                }
                thead{
                    display: table-header-group;
                    vertical-align: middle;
                    border-color: inherit;
                }
                th {
                    border: 1px solid hotpink;
                }
                
                tbody{
                    text-align: center;
                }
                
                td{
                    border: 1px solid hotpink;
                    
                }
            </style>
        </head>
        <body>
            <div id="c">
                
            </div>
        </body>
    </html>
    
    <script type="text/javascript" src="js/jQuery3.5.1.js" ></script>
    <script type="text/javascript" src="js/jQuery-table.js" ></script>
    <script>
        $('#c').table(['序号','姓名','年龄','工资'],[
        {n:'xy',age:20,s:10},
        {n:'wy',age:18,s:10},
        {n:'zf',age:18,s:9}
        ]);
        
    </script>
    

    jQuery-table.js文件

    (function($){
        /**
         * 给$原型添加table方法
         * @param {Object} arrTableHead 生成表格表头的数据
         * @param {Object} arrTableBody 生成表格主体的数据
         */
        $.fn.table = function(arrTableHead,arrTableBody){
    //      console.log(this); //调用table方法的jQuery对象
            var list = [];
            list.push('<table>');
            //生成表头
            list.push('<thead>');
            list.push('<tr>');
            for(var i = 0 ;i<arrTableHead.length;i++){
                list.push('<th>');
                list.push(arrTableHead[i]);
                list.push('</th>');
            }
            list.push('</tr>');
            list.push('</thead>');
            
            //生成表格主体
            for(var i = 0;i<arrTableBody.length;i++){
                list.push('<tr>');
                list.push('<td>');
                list.push(i+1);
                list.push('</td>');
                //遍历arrTableBody数组元素
                for(var key in arrTableBody[i]){
                    list.push('<td>');
                    list.push(arrTableBody[i][key]);
                    list.push('</td>');
                }
                list.push('</tr>');
            }
            
            
            list.push('</table>');
    //      console.log(list.join(""));
            this.html(list.join(""));
            
            return this;
        }
    }(window.jQuery));
    

    案例:自定义tab栏插件

    html文件:

    <!DOCTYPE html>
    <html>
        <head>
            <meta charset="UTF-8">
            <title>tab栏切换</title>
            
            <style>
                *{
                    margin: 0;
                    padding: 0;
                }
                
                
                ul{
                    list-style: none;
                }
                
                .wrapper{
                    width: 1000px;
                    height: 475px;
                    margin: 0 auto;
                    margin-top:100px ;
                }
                
                
                .tab{
                    border: 1px solid #ddd;
                    border-bottom: 0;
                    height: 36px;
                    width: 320px;
                }
                
                .tab li{
                    position: relative;
                    float: left;
                    width: 80px;
                    height: 34px;
                    line-height: 34px;
                    text-align: center;
                    cursor: pointer;
                    border-top: 4px solid #FFFFFF ;
                }
                
                .tab span{
                    position: absolute;
                    right: 0;
                    top:10px;
                    background: #DDDDDD;
                    width: 1px;
                    height: 14px;
                    overflow: hidden;
    
                }
                
                .products .main{
                    float: left;
                    display: none;
                }
                
                .products .main.selected{
                    display: block;
                }
                
                .tab li.active{
                    border-color: red;
                    border-bottom: 0;
                }
            </style>
            
        </head>
        <body>
            <div id="wrapper">
                <ul class="tab" id="tab-menu">
                    <li class="tab-item active">国际大牌</li>
                    <li class="tab-item">国妆名牌</li>
                    <li class="tab-item">清洁用品</li>
                    <li class="tab-item">男士精品</li>
                </ul>
                <div class ="products" id="tab-main">
                    <div class="main selected">
                        <a href=""><img src="img/2.jpg" alt="" /></a>
                    </div>
                    <div class="main ">
                        <a href=""><img src="img/3.jpg" alt="" /></a>
                    </div>
                    <div class="main ">
                        <a href=""><img src="img/4.jpg" alt="" /></a>
                    </div>
                    <div class="main ">
                        <a href=""><img src="img/5.jpg" alt="" /></a>
                    </div>
                </div>
            </div>
        </body>
    </html>
    <script type="text/javascript" src="js/jQuery3.5.1.js" ></script>
    <script type="text/javascript" src="js/jQuery-tabs.js" ></script>
    <script>
        $(function(){
            $('#wrapper').tabs({
                tabHeads:'#tab-menu>li',
                tabHeadsClass:'active',
                tabBodys:'#tab-main>div',
                tabBodysClass:'selected'
            })
            
        })
    </script>
    

    jQuery-tabs.js文件:

    $(function($){
        /**
         * 给$原型添加tabs()方法
         * @param option.tabHeads       需要注册事件的页签选择器
         * @param option.tabHeadsClass  触发事件页签需要给页签添加的类
         * @param option.tabBodys       需要显示的页面选择器
         * @param option.tabBodysClass  触发事件页签需要给页面添加的类
         * 
         */
        $.fn.tabs = function(option){
            var $bigDiv = this;
            
            //通过参数传递过来的页签选择器,获取到页签,给这些页签注册单击事件
            $bigDiv.find(option.tabHeads).on('click',function(){
                //给当前鼠标点击的页签添加option.tabHeadsClass类,其他的兄弟移除option.tabHeadsClass类
                $(this).addClass(option.tabHeadsClass).siblings().removeClass(option.tabHeadsClass);
            
                //获取当前点击的页签的索引
                var idx = $(this).index();
                console.log(idx);
                
                //获取索引一致的页面,给他添加option.tabBodysClass类,其他兄弟页面移除option.tabBodysClass类
                $bigDiv.find(option.tabBodys).eq(idx).addClass(option.tabBodysClass).siblings().removeClass(option.tabBodysClass);
            });
            
            return $bigDiv;
        };
    }(jQuery));
    
    

    相关文章

      网友评论

          本文标题:26、插件封装

          本文链接:https://www.haomeiwen.com/subject/nfbqwrtx.html