自定义jQuery插件(一)

自定义jQuery插件(一)

虽然现在有大量的插件可供我们选择使用,但实际开发过程中,使用别人的插件难免会带来问题,比如

  • 插件功能强大,代码行数也随着激增,但是我们只使用其中一小部分。
  • 使用别人的插件,很难看懂别人的代码,特别是压缩成min.js,为后期维护,需求变更等带来很严重问题。
  • 同样想在现有插件上做进一步开发也没那么容易。
  • 装逼

所以学习jQuery插件开发很有必要。

自定义插件的类型

自定义插件的类型主要有两种(我猜的)

1. 类级别插件

类级别插件比较简单,通过$.extend()直接给jQuery添加静态方法,通过$.extend()来扩展,调用方法形如

$.ajax(),$.trim(),$.each()等。

    <script type="text/javascript">
        $.extend({
            pluginName: function(str) {
                str = (str ? str : ‘helloWorld‘);
                alert(str);
            }
        })
        $.pluginName();
        $.pluginName(‘helkyle‘);
    </script>

不出意外地话,窗口会弹出两个alert。类级别插件通常适合用来封装一下方法。更常见的jQuery插件是对象级别的插件。

2.对象级别插件

对象级别插件调用方法为首先通过jquery选择器获取对象并为对象添加方法,然后把方法封装成一个插件,这种插件使用很广泛,使用简单。形如:

    $("selector").pluginName({
                option1: "option1",
                option2: "option2",
                ...
    });

插件大概长这样

    $.fn.pluginName = function(options) {
        you code...
    }

我们的重点放在对象级别的插件开发,后面会补上一个完整的插件案例(如果可以的话)

插件开发要点

  • 命名规则通常为jQuery.pluginName.js,压缩过后的文件为jQuery.pluginName.min.js。
  • 为了尽量避免其它代码冲突,通常把jQuery当成函数参数传递。
    (function($) {
            your code...
        })(jQuery);
  • 通常会在插件开始前增加一个分号’;’,这样做的目的是避免其它文件最后的语句忘记添加’;’的时候报错。
    ;(function($) {
            your code...
        })(jQuery);
  • 为了保证链式调用,我们需要插件本身放回一个jQuery对象。
    ;(function($) {
        $.fn.pluginName = function(options) {
            return this...;
        }
    })(jQuery);
  • 又为了避免使用者调用的时候是使用类名.className(可能传过来一个集合),我们需要做多一步。
    ;(function($) {
        $.fn.pluginName = function(options) {
            return this.each(function() {
                your code...
            });
        }
    })(jQuery);
  • 为了避免名称空间污染,通常表现为,你定义了一个全局变量,而别人在开发的时候也定义了一个相同名字的变量,一不小心就出大问题,所以插件改成带有匿名闭包的。
    ;(function($) {
        var Plugin = function(options) {
        }
        Plugin.prototype = {
            fun1: function() {
            },
            fun2: function() {
            }
            your code ...
        }
        $.fn.pluginName = function(options) {
            return this.each(function() {
                return new Plugin(options);
            });
        }
    })(jQuery);
  • 通常选择为插件配置默认参数,代码执行完,会把this.defaults 和 options合并,合并规则为options的参数会替换掉defaults中的值,如果只传部分值,则只替换部分,其余的使用defaults的值,最后合并完的结果并到匿名变量’{}‘,传给this.options,这样可以保证defaults的值不会被改动。
    ;(function($) {
        var Plugin = function(options) {
            this.defaults = {
            ‘color‘: ‘red‘,
            ‘fontSize‘: ‘12px‘,
            ‘textDecoration‘: ‘none‘
            },
           this.options = $.extend({}, this.defaults, options)
        }
        Plugin.prototype = {
            fun1: function() {
            },
            fun2: function() {
            }
            your code ...
        }
        $.fn.pluginName = function(options) {
            return this.each(function() {
                return new Plugin(options);
            });
        }
    })(jQuery);

暂时先写这么多,因为怕自己会忘记所以写得比较啰嗦~~~

时间: 2024-10-25 09:54:48

自定义jQuery插件(一)的相关文章

自定义jQuery插件

jQuery编写插件的两种方法 1.添加jQuery对象级的插件,是给jQuery类添加方法 写法: (function($){ $.fn.extend({ "函数名":function(自定义参数){ //这里写插件代码 } }); })(jQuery); 或者 (function($){ $.fn.函数名=function(自定义参数){ //这里写插件代码 } })(jQuery); 调用方法:$("#id").函数名(参数); 2.jQuery类级别的插件,

jQuery插件编写规范

第一种方法: 在很多基于jQuery或基于Zepto的插件中,在立即函数执行前面会加上";"这个符号. 这是为了防止前面的其他插件没有正常关闭. 在立即执行函数执行时,会一般会传入jQuery,window等.举个例子: ;(function($,window,undefined){ //..... })(jQuery,window) window传递进来作为局部变量存在,而非全局变量,这样可以加快解析流程,以及影响最小化. undefined没有传进来,以便可以确保此undefine

自己做jQuery插件:将audio5js封装成jQuery语音播放插件

日前的一个项目需要用到语音播放功能.发现Audio5js符合需求且使用简单,又鉴于jQuery控件便于开发操作,于是有了以下的封装. 首先先简单介绍一下Audio5js吧. Audio5js是一个能够帮助你解决类似这样的浏览器兼容性问题的js类库,轻量级并且能够很优雅的使用flash向前兼容老版本的浏览器. 其主要特性: 拥有完整API来控制“加载”,“播放”,“暂停”,“音量”和“查找” 并且可以得到播放内容的具体相关信息 不依赖任何类库 兼容版本浏览器,包括:IE8, IE9, Chrome

DOM笔记(七):开发JQuery插件

在上一篇笔记本中,讲解了如何利用jQuery扩展全局函数和对象:DOM笔记(六):怎么进行JQuery扩展? 在这篇笔记本中,将开发一个简单的动画插件,名称是example-plugin,用其实现一个简单的功能:光标移动到目标标签,标签移动,改变背景色:光标离开时,标签恢复原来的样式. 因为是jQuery对象的扩展,采用jQuery.fn.extend()进行扩展,插件名是dwqs,并且使用闭包: /* *示例插件功能: *光标移动到目标标签,标签移动,改变背景色:光标离开时,标签恢复原来的样式

jquery学习(四)-如何书写自定义的jquery插件

来自锋利的jquery第二版 下面我们开始介绍如何通过现有的方法和函数,封装出既符合自己需求,有高效的插件. Jquery插件公分为3类,分别为:封装对象方法的插件.封装全局函数的插件.自定义选择器插件,在介绍插件的三种类型之前,我们先来了解书写插件的基本要点(这里转自aspwzmuma和锋利的jquery): a.插件的文件命名推荐遵循jQuery.[插件名].js的规则,以便于与其他的js文件的区分,如新插件文件jquery.newplugin.js. b.对象级别插件,所有的方法都应依附于

炫酷JQUERY自定义对话框插件JDIALOG_JDIALOG弹出对话框和确认对话框插件

多种类型自定义对话框插件jDialog是一款基于jquery实现的轻量级多种类型的自定义对话框插件 在项目开发中.一般会美化 alert(); 的样式.那么今天我就和大家分享一款非常炫的插件 先来看一下程序最后的效果图片吧 下面是HTMl代码 <center> <button id="test1">alert方式调用</button> <br/><br/> <button id="test2">

jquery插件-自定义select

由于原生select在各个浏览器的样式不统一,特别是在IE67下直接不可以使用样式控制,当PM让你做一个样式的时候,那是相当的痛苦.最好的办法就是使用自定义样式仿select效果.这里写了一个jquery插件,实现自定义的select(阉割了不少原生select的事件,但是最主要的都还在) 需要引用的样式: .self-select-wrapper{ position: relative; display: inline-block; border: 1px solid #d0d0d0; wid

angular2采用自定义指令(Directive)方式加载jquery插件

由于angular2兴起不久,相关插件还是很少,所以有时候不得不用一些jquery插件来完成项目, 那么如何把jquery插件放到angular2中呢?采用自定义指令! 在上下文之前要引入jquery,这点不再描述 首先创建一个指令,采用@input方式,来获取jquery插件所需要的参数. 在ngOnChanges时,也就是参数通过@input传入时,初始化jquery插件, 初始化jquery插件需要获取dom元素,所以我们引入ElementRef,用来获取dom元素 这里需要讲一下,jqu

使用jQuery.fn自定义jQuery翻页插件

第一次写jQuery插件.自己感觉写的也不怎么样.写jQuery插件利用的就是这个东东 jQuery.fn,例如 jQuery.fn.pluginName=function(){}; 这个是我写的分页插件的样子 插件通过一个外放的函数来进行翻页操作,无论是点击前进.后退.还是改变页面大小,都会调用该函数. 先看看插件的代码结构 (function ($) { //存放插件所需的属性字段 var PagerFields = { }; //插件的私有函数 function setImageButto