美文网首页
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、插件封装

    如何封装自定义插件? 两种方式: 两种方法的区别就在于,js代码中的自启动函数中,添加方法的对象不同,实例方法是添...

  • Vue封装插件并发布到npm上

    目录 Vue封装插件创建项目修改配置测试插件 发布插件到npm 文章参考 Vue封装插件 1. 创建项目 这里采用...

  • jQuery插件封装

    jQuery插件封装 自定义插件:...

  • jQuery插件

    1.jQuery插件分类 封装对象方法的插件 应用最广 封装全局函数的插件 作为jQuery全局函数插件 选择器插...

  • 树形结构菜单

    不使用插件封装 使用插件封装 html js/zTree-plugin. reset.min.css

  • JQ 插件

    jquey的插件主要分为3中类型1.封装对象方法的插件2.封装全局函数的插件3.选择器插件 jquery插件的文件...

  • 从零开始的jQuery插件封装

    jQuery插件简易封装方法。 jQuery插件机制 jQuery.extend( [deep ], target...

  • 使用vueCropper插件封装一个图片裁剪组件

    1. 组件封装 2. 使用插件

  • 搭建Vue项目

    初始化Vue前端项目 安装插件 封装 token.js 封装 axios 动态路由

  • 基于原生JS封装的Modal对话框插件

    基于原生JS封装Modal对话框插件 原生JS封装Modal对话框插件,个人用来学习原理与思想,只有简单的基本框架...

网友评论

      本文标题:26、插件封装

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