编写JQuery UI 插件

JQuery UI简介

JQuery UI源自于一个jQuery插件-Interface.Interface插件是由StefanPetre创建的,Paul Bakaus液位该插件的开发做出了重大贡献。

jQueryUI主要分为3个部分,交互、微件和效果库:

- 交互。这里都是一些与鼠标交互相关的内容。包括拖动(Draggable)、 置放(Droppable)、缩放(Resizable)、选择(Selectable)和排序(Sortable)等。微件(Widget)中有部分是基于这些交互组件来制作的。此库需要一个jQueryUI核心库——ui.core.js 支持。

- 微件。这里主要是一些界面的扩展。里边包括了手风琴导航(Accordion)、自动完成(Autocomplete)、取色器(Colorpicker)、对话框(Dialog)、滑块(Slider)、标签(Tabs)、日历(Datepicker)、放大镜(Magnifier)、进度条(Prigressbar)和微调控制器(Spinner)等

- 效果库 。此库用于提供丰富的动画效果,让动画不再局限于animate()方法。

插件的种类

编写插件的目的是给已经有的一系列方法或函数做一个封装,以便在其他地方重复使用,后期维护和提高开发效率。
jQuery的插件主要分为3种类型。
1、封装对象方法的插件
这种插件是将对象方法封装起来,用于对通过选择器获取的jQuery对象进行操作,是最常见的一种插件。
2、封装全局函数的插件
可以将独立的函数加到jQuery命名空间之下。例如解决冲突用的jQuery.noConflict()方法、常见的jQuery.ajax()方法以及去除首位空格的jQuery.trim()方法等,都是jQuery内部作为全局函数的插件附加到内核上去的。
3、选择器插件
个别情况下,会需要用到选择器插件。虽然jQuery的选择器十分强大,但还是会需要扩充一些自己喜欢的选择器,例如 :color (red)来选择所有红色字的元素之类的想法。

插件的基本要点

- jQuery插件的文件名推荐命名为jquery.[插件名].js,以免和其他JavaScript库插件混淆。例如命名为jquery.color.js。
- 所有的对象方法都应当附加到jQuery.fn对象上,而所有的全局函数都应当附加到jQuery对象本身上。
- 在插件内部,this指向的是当前通过选择器获取的jQuery对象,而不像一般的方法那样,例如click()方法,内部的this指向的是DOM元素。
- 可以通过this.each来遍历所有元素。
- 所有的方法或函数插件,都应当以分号结尾,否则压缩的时候可以出现问题。为了更稳妥些,甚至可以在插件头部先加上一个分号,以免他人的不规范代码给插件带来影响。具体方法可以参考后面的代码。
- 插件应该返回一个jQuery对象,以保证插件的可链式操作。除非插件需要返回的是一些需要获取的量,例如媳妇串或者数组等。

插件中的闭包

闭包的解释
简单的描述:允许使用内部函数,而且,这些内部函数可以访问他们所在的外部函数中声明的所有局部变量、参数和声明的其他内部函数,当其中一个这样的内部函数在包含它们的外部函数之外被调用时,就会形成闭包。即内部函数会在外部函数放回后被执行。

利用闭包的特性,既可以避免内部临时变量影响全局变量,又可以在插件内部继续使用$作为jQuery的别名,常见的jQuery插件都是以下这种形式的:

(function(){
    /*这里放置代码*/
})();

首先定义一个匿名函数,然后用括号括起来,最后通过()这个运算符来执行。可以传递参数进去,以供内部函数使用。

    //为了更好的兼容性,开始有个分号
    ;(function($){//此处将$作为匿名函数的形参
        /* 这里置放代码,可以使用$作为jQuery的缩写别名*/
    }(jQuery));//这里就将jQuery作为实参传递给匿名函数了

上段代码时一种常见的jQuery插件的结构。
接下来看这段jQuery代码

;(function($){
    //这里编写插件的代码,可以继续使用$作为jQuery的别名
    //定义一个局部变量foo;仅函数内部可以访问,外部无法访问
    var foo;
    var bar =function(){
        /*
         在匿名函数内部的函数都可以访问foo,即便是在匿名 函数的外部,
         调用bar()的时候,也可以在bar()的内部访问到foo,但在匿名函
         数的外部直接访问foo是做不到的。
        */
    }
        /*
         下面的语句让匿名函数内部的函数bar()逃逸到全局可访问的范围内
         这样就可以在匿名函数的外部通过调用jQuery.BAR()来访问内部
         定义的函数bar(),并且内部函数bar()也能访问匿名函数内的变量foo  
    */
    $.BAR = bar;
})(jQuery);

只需要知道所有的插件代码必须放置在下面的两句代码内就可以

    ;(function($){
        //此处编写jQuery插件代码
    })(jQuery);

JQuery插件的机制

jQuery提供了两个用于扩展jQuery功能的方法,即jQuery.fn.extend()方法和jQuery.extend()方法。
前者用于扩展之前提到的3种类型插件中的第1种,后者用于扩展后两种插件。
这两个方法都接受一个参数,类型为Object。Object对象的”名/值对”分别代表”函数或方法名/函数主体”。
jQuery.extend()方法除了可以用于扩展对象之外,还有一个很强大的功能,就是用于扩展已有的Object对象。
jQuery代码如下:

jQuery.extend(target.obj1,...[objN])

用一个或多个其他对象来扩展一个对象,然后返回被扩展的对象
例如合并settings对象和options对象,修改并返回settings对象。
var settings={validate:false,limit:5,name:”foo”};
var options={validate:true,name:”bar”};
var newOptions=jQuery.extend(settings,options);
结果为:
newOptions={validate:true,limit:5,name:”bar”};
jQuery.extend()方法经常被用于设置插件方法的一系列默认参数,如下代码:

function foo(options){
    options=jQuery.extend({
        name:"bar",
        length:5,
        dataType:"xml"  /*默认参数*/
            }.options); /*options为传递的参数*/
    });
如果用户调用foo()方法的时候,在传递的参数options对象中设置了相应的值,那么久使用设置的值,否则使用默认值,代码如下:
foo({name:"a",length:"4",dataType:"json"});
foo({name:"a",length:"4"});
foo({name:"a"});
foo();

一个例子

<script type="text/javascript">
    //插件编写
    ;(function($){
        jQuery.fn.extend({
            "color":function(value){
                return this.css("color",value); 
            }
        });
    })(jQuery);
    //插件应用
    $(function(){
        //查看第1个div的color样式值
        alert($("div").color()+"\n 返回字符串,证明此插件可以。");
        //把所有的div的字体颜色都设为红色
        alert($("div").color("red")+"\n 放回object证明得到的是jQuery对象。");
    })
</script>
<div class="a">red</div>
<div style="color:blue">blue</div>
<div style="color:green">green</div>
<div style="color:yellow">yellow</div>


如果要定义一组插件,可以使用如下所示写法:

;(function($){
    $.fn.extend({
        "color":function(value){
        //插件代码
        },
        "border":function(value){
         //插件代码 
        },
        "background":function(value){
         //插件代码
        }
    })
})
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值