jquery插件及zepto插件,写法上有些区别。

区别点: 
1、自定义事件的命名空间 
jq的时间命名空间是用点“.”,而zepto是用冒号“:” 

//jquery
$(this).trigger('cusevent.pluginname'); //zepto
$(this).trigger('cusevent:pluginname');

2、data() 方法 
jq的data方法非常强大,可以存储字符串、对象、函数等一切js数据 
而zepto的data方法则非常简陋,只能纯一下字符串。 
由于写插件时,常用data方法来缓存插件实例化后的内容,所以这里需要做一下兼容修改。

// i is simply a counter, the rest
// of what is stored will be instances
$.waiting.lookup = {
i: 0
}; // store the new instance.. $t=$(this)
$.waiting.lookup[++$.waiting.lookup.i] = new $.waiting($t, o);
$t.data('waiting', $.waiting.lookup.i); // retrieve the instance
var inst = $.waiting.lookup[$(this).data('waiting')];

最后附上,JQ插件的编写模板,写插件的时候就不用考虑代码组织结构了。

/**
* Created by hugohua on 14-4-1.
* jQuery plugin template
*/ /**
* 将插件封装在一个闭包里面,防止外部代码污染 冲突
*/
(function ($) {
/**
* 定义一个插件 Plugin
*/
var Plugin,
privateMethod; //插件的私有方法,也可以看做是插件的工具方法集 /**
* 这里是插件的主体部分
* 这里是一个自运行的单例模式。
* 这里之所以用一个 Plugin 的单例模式 包含一个 Plugin的类,主要是为了封装性,更好的划分代码块
* 同时 也 方便区分私有方法及公共方法
* PS:但有时私有方法为了方便还是写在了Plugin类里,这时建议私有方法前加上"_"
*/
Plugin = (function () { /**
* 插件实例化部分,初始化时调用的代码可以放这里
* @param element 传入jq对象的选择器,如 $("#J_plugin").plugin() ,其中 $("#J_plugin") 即是 element
* @param options 插件的一些参数神马的
* @constructor
*/
function Plugin(element, options) {
//将dom jquery对象赋值给插件,方便后续调用
this.$element = $(element); //将插件的默认参数及用户定义的参数合并到一个新的obj里
this.settings = $.extend({}, $.fn.plugin.defaults,options);
//如果将参数设置在dom的自定义属性里,也可以这样写
this.settings = $.extend({}, $.fn.plugin.defaults, this.$element.data(), options); //初始化调用一下
this.init();
} /**
* 写法一
* 插件的公共方法,相当于接口函数,用于给外部调用
*/
Plugin.prototype.doSomething = function () {
/**
* 方法内容
*/
}; /**
* 写法二
* 将插件所有函数放在prototype的大对象里
* @type {{}}
*/
Plugin.prototype = { init:function(){
console.log('init');
}, doSomething2:function(){ }
}; return Plugin; })(); /**
* 插件的私有方法
*/
privateMethod = function () { }; /**
* 这里是将Plugin对象 转为jq插件的形式进行调用
* 定义一个插件 plugin
*/
$.fn.plugin = function (options) {
return this.each(function () {
var $me = $(this),
instance = $me.data('plugin');
if(!instance){
//将实例化后的插件缓存在dom结构里(内存里)
$me.data('plugin', new Plugin(this, options));
} /**
* 优雅处: 如果插件的参数是一个字符串,则 调用 插件的 字符串方法。
* 如 $('#id').plugin('doSomething') 则实际调用的是 $('#id).plugin.doSomething();
* doSomething是刚才定义的接口。
* 这种方法 在 juqery ui 的插件里 很常见。
*/
if ($.type(options) === 'string') instance[options]();
});
}; /**
* 插件的默认值
*/
$.fn.plugin.defaults = {
property1: 'value',
property2: 'value'
}; /**
* 优雅处: 通过data-xxx 的方式 实例化插件。
* 这样的话 在页面上就不需要显示调用了。
* 可以查看bootstrap 里面的JS插件写法
*/
$(function () {
return new Plugin($('[data-plugin]'));
});
})(JQuery);
/**
* Created by hugohua on 14-4-1.
* zepto plugin template
*/ /**
* 将插件封装在一个闭包里面,防止外部代码污染 冲突
*/
(function ($) {
/**
* 定义一个插件 Plugin
*/
var Plugin,
privateMethod; //插件的私有方法,也可以看做是插件的工具方法集 /**
* 这里是插件的主体部分
* 这里是一个自运行的单例模式。
* 这里之所以用一个 Plugin 的单例模式 包含一个 Plugin的类,主要是为了封装性,更好的划分代码块
* 同时 也 方便区分私有方法及公共方法
* PS:但有时私有方法为了方便还是写在了Plugin类里,这时建议私有方法前加上"_"
*/
Plugin = (function () { /**
* 插件实例化部分,初始化时调用的代码可以放这里
* @param element 传入jq对象的选择器,如 $("#J_plugin").plugin() ,其中 $("#J_plugin") 即是 element
* @param options 插件的一些参数神马的
* @constructor
*/
function Plugin(element, options) {
//将插件的默认参数及用户定义的参数合并到一个新的obj里
this.settings = $.extend({}, $.fn.plugin.defaults, options);
//将dom jquery对象赋值给插件,方便后续调用
this.$element = $(element);
//初始化调用一下
this.init();
} /**
* 写法一
* 插件的公共方法,相当于接口函数,用于给外部调用
*/
Plugin.prototype.doSomething = function () {
/**
* 方法内容
*/
}; /**
* 写法二
* 将插件所有函数放在prototype的大对象里
* @type {{}}
*/
Plugin.prototype = { init:function(){ }, doSomething2:function(){ }
}; return Plugin; })(); /**
* 插件的私有方法
*/
privateMethod = function () { }; /**
* 这里是将Plugin对象 转为jq插件的形式进行调用
* 定义一个插件 plugin
* zepto的data方法与jq的data方法不同
* 这里的实现方式可参考文章:http://trentrichardson.com/2013/08/20/creating-zepto-plugins-from-jquery-plugins/
*/
$.fn.plugin = function(options){
return this.each(function () {
var $this = $(this),
instance = $.fn.plugin.lookup[$this.data('plugin')];
if (!instance) {
//zepto的data方法只能保存字符串,所以用此方法解决一下
$.fn.plugin.lookup[++$.fn.plugin.lookup.i] = new Plugin(this,options);
$this.data('plugin', $.fn.plugin.lookup.i);
instance = $.fn.plugin.lookup[$this.data('plugin')];
} if (typeof options === 'string') instance[options]();
})
}; $.fn.plugin.lookup = {i: 0}; /**
* 插件的默认值
*/
$.fn.plugin.defaults = {
property1: 'value',
property2: 'value'
}; /**
* 优雅处: 通过data-xxx 的方式 实例化插件。
* 这样的话 在页面上就不需要显示调用了。
* 可以查看bootstrap 里面的JS插件写法
*/
$(function () {
return new Plugin($('[data-plugin]'));
});
})(JQuery);

jquery插件的写法的更多相关文章

  1. JQuery插件的写法和规范

    首先,在具体说明编写插件之前,我们先假定一个使用场景:有一个HTML页面(或.aspx页面),页面上放置了一个5行3列的表格,即:<table></table>标记,具体代码如 ...

  2. 闭包,jQuery插件的写法:图片预加载

    最近做的一些网页,单个网页图片量都比较大,网络不好的情况下,特别卡,这个图片预加载的方法可以牺牲一些时间换来网页的浏览顺畅,还是值得的. //闭包的写法,它内部的变量都是局部的,不会和外部巳有的变量进 ...

  3. JQuery插件的写法 (转:太棒啦!)

    JQuery插件写法的总结 最近Web应用程序中越来越多地用到了JQuery等Web前端技术.这些技术框架有效地改善了用户的操作体验,同时也提高了开发人员构造丰富客户 端UI的效率.JQuery本身提 ...

  4. jQuery插件的点点滴滴

    说起jQuery插件,很多人的脑海种已经有了一定的雏形,仿佛感觉仅仅就是那样子,事实呢?当你看了Bootstrap.js,品读了slidesjs,观摩了jquery.cycle2.js,不禁发现,原来 ...

  5. jQuery插件实践之轮播练习(二)

    所有文章搬运自我的个人主页:sheilasun.me 上一篇中学习了jQuery插件的写法,这篇该着手实现啦.首先明确一下轮播要具备哪些功能: 可以点击"向后"按钮向后翻页 可以点 ...

  6. jQuery插件实践之轮播练习(一)

    所有文章搬运自我的个人主页:sheilasun.me 因为从来没写过jQuery插件,所以本文要通过一个轮播的例子,练习jQuery插件的写法. 新建插件文件 在讨论细节之前,先新建插件文件(当然也可 ...

  7. jQuery插件写法总结以及面向对象方式写法总结

    前两个是jQuery插件,后面2个是以对象的形式开发,都类似. 写法一 (function($, window){ // 初始态定义 var _oDialogCollections = {}; // ...

  8. 第7章 jQuery插件的使用和写法

    第7章 jQuery插件的使用和写法 插件又称扩展,是一种遵循一定规范的应用程序接口写出来的程序. 插件的编写思想基于面向对象. 获取最新的插件可以查看jquery官网:http://plugins. ...

  9. Jquery插件写法及extentd函数

    JQuery插件写法 JQuery插件又分为类扩展方法和对象扩展方法两种,类插件是定义在JQuery命令空间的全局函数,直接通过可调用,如可调用,如可调用,如.ajax():对象插件是扩展JQuery ...

随机推荐

  1. Android 软件开发之 PreferenceActivity 中的组件

    1.PreferenceActivity 介绍 PreferenceActivity 继承ListActivity 它是以一个列表的形式在展现内容,它最主要的特点是添加Preference可以让控件的 ...

  2. 认识CoreData-基础使用

    第一篇文章中并没有讲CoreData的具体用法,只是对CoreData做了一个详细的介绍,算是一个开始和总结吧. 这篇文章中会主要讲CoreData的基础使用,以及在使用中需要注意的一些细节.因为文章 ...

  3. 解锁Dagger2使用姿势(一)

    毫无疑问,Dagger2的 上手是有门槛的,有门槛是因为它里边的概念多,用起来复杂,可是一旦你学会了Dagger2的使用,你一定会爱不释手的.与ButterKnife和AndroidAnnotatio ...

  4. Android5.0之Activity的转场动画

    Activity的转场动画很早就有,但是太过于单调,样式也不好看,于是Google在Android5.0之后,又推出的新的转场动画,效果还是非常炫的,今天我们一起来看一下. 1.旧转场动画回顾 首先我 ...

  5. Asp.Net分页存储过程

      SQL分页语句 一.比较万能的分页: sql代码: 1 2 3 select top 每页显示的记录数 * from topic where id not in  (select top (当前的 ...

  6. jquery知识 内部 外部插入元素

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. Orchard 学习-手动安装Orchard

    通过Orchard zip 文件手动配置网站 这篇文章将引导你如果通过Zip文件来安装Orchard. 我们会使用三种不同的方法来承载Orchard: IIS. WebMatrix and IIS E ...

  8. Android测试分析二

    什么是android测试,分为黑盒测试和白盒测试. 黑盒就是测试人员看不到代码的,针对需求而进行的一系列测试动作,看代码所展现出来的效果是否和需求一样,或者有什么意外的情况没有处理等,一般开发交给测试 ...

  9. MyEclipse常见配置及调试

    常见配置 1.配置workspace ----- 建议不要采用含有空格和中文目录 所有代码保存workspace空间中2.新建工程时,设置工程需要jre环境MyEclipse提供多种内置layout ...

  10. TS格式解析

    1.TS格式介绍 TS:全称为MPEG2-TS.TS即"Transport Stream"的缩写.它是分包发送的,每一个包长为188字节(还有192和204个字节的包).包的结构为 ...