jquery插件编写模版
jquery插件是什么??这里以讨论实力方法为主,比如 $("div").pluginname({});
他的最简单形势应该是
$.prototype.plugin = function(){}
我们一点点来加东西
1,自己的变量不污染全局,别人的变量不污染我们
(function($,undefined){
var window = Function("return this")();//一定是window
$.prototype.plugin = function(){ }
)(jQuery)
2,判断已加载或者处理其他附加数据,处理参数,实例化一个对象,实例化的方式不一定要new一个,你喜欢也可以拷贝一个,工厂一个等。。
function plugin(element, options) {
var self = this;
self.element = element;
self.$element = $(element);
if (typeof options == "object") {
self.opts = $.extend({}, defaults, options);
}
}
$.fn[pluginName] = function (options, callback) {
var dataname = "plugin_" + pluginName;
$(this).each(function (index, item) {
var hasObject = $(item).data(dataname);
if (!hasObject) {
var someobj = new plugin(item, options);
$(item).data(dataname, someobj);
}
});
}
return $.fn[pluginName];
3,AMD CMD加载
// 全局模式
var pluginobj = factory(jQuery);
//UMD
if (typeof exports === 'object') {
module.exports = pluginobj;
}
//AMD
if (typeof define === "function" && define.amd) {
define(pluginName, ["jquery"], function () {
return pluginobj;
});
}
//CMD
if (typeof define === "function" && define.cmd) {
define(pluginName, ['jquery'], function (require, exports, module) {
var $ = require('jQuery');
module.exports = pluginobj;
});
}
全局模式是否开放取决于你的依赖项是否必然加载。
此时把原来的自执行外面再套一层,把原来的自执行改成普通方法改名为factory方法。
完整版:
(function () {
var window = Function("return this")();
var applicationPath = window.applicationPath === "" ? "" : window.applicationPath || "../..";
var pluginName = "mypluginname";
function factory($) {
"use strict";
if ($.isFunction($.fn[pluginName])) {
return $.fn[pluginName];
}
function plugin(element, options) {
var self = this;
self.element = element;
self.$element = $(element);
if (typeof options == "object") {
self.opts = $.extend({}, defaults, options);
}
}
$.fn[pluginName] = function (options, callback) {
//something like old jquery plugin
var dataname = "plugin_" + pluginName;
$(this).each(function (index, item) {
var hasObject = $(item).data(dataname);
if (!hasObject) {
var someobj = new plugin(item, options);
$(item).data(dataname, someobj);
}
});
}
return $.fn[pluginName];;
}
var loaded = false;
//UMD
if (typeof exports === 'object') {
module.exports = factory();
}
//AMD
if (typeof define === "function" && define.amd) {
define(pluginName, ["jquery"], factory);
loaded = true;
}
//CMD
if (typeof define === "function" && define.cmd) {
define(pluginName, ['jquery'], function (require, exports, module) {
var $ = require('jQuery');
module.exports = factory($);
});
}
// other
if (!jQuery.xxx && jQuery.loadScript) {
$.loadScript("/scripts/plugins/xxx.js", function () {
pluginobj = factory(jQuery);
})
}
if (!loaded) {
// 全局模式 也可以不判断强制加载是执行一遍全局模式
factory(jQuery);
}
})();
jquery插件编写模版的更多相关文章
- jQuery插件编写及链式编程模型小结
JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我们就来看看如何把我们常用的功能做出JQu ...
- jQuery插件编写及链式编程模型
jQuery插件编写及链式编程模型小结 JQuery极大的提高了我们编写JavaScript的效率,让我们可以愉快的编写代码,做出各种特效.大多数情况下,我们都是使用别人开发的JQuery插件,今天我 ...
- jQuery插件编写,
jQuery插件编写 jQuery插件 最近搞jquery插件的编写这里做下笔记 给jquery扩展的方式很多,看的我眼花缭乱 方式1 $.fun=function(){} 方式2 $.fn.fun= ...
- 自己写jquery插件之模版插件高级篇(一)
需求场景 最近项目改版中,发现很多地方有这样一个操作(见下图gif动画演示),很多地方都有用到.这里不讨论它的用户体验怎么样. 仅仅是从复用的角度,如果每个页面都去写text和select元素,两个b ...
- (转)jQuery插件编写学习+实例——无限滚动
原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...
- jQuery插件编写学习+实例——无限滚动
最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简单学习了下jQuery的插件编写,然后分享出来. 先说下基础知识,基本上分为两种,一种是对象级别的插 ...
- jQuery插件编写步骤详解
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...
- jquery插件编写【转载】
如今做web开发,jquery 几乎是必不可少的,就连vs神器在2010版本开始将Jquery 及ui 内置web项目里了.至于使用jquery好处这里就不再赘述了,用过的都知道.今天我们来讨论下jq ...
- jQuery插件编写学习中遇见的问题--attr prop
个人博客: https://chenjiahao.xyz 最近在学习jQuery的插件的编写,有两种方式,$.fn.extend以及$.extend,一种是作用于对象原型上,一种是直接作用于jQuer ...
随机推荐
- Simulink Memory vs Unit Delay
Memoryブロック.Unit Delayブロック共に前回の入力値を出力しますが.動作するタイミングが異なります. ●Memoryブロック シミュレーションの各時刻(ステップ)で動作し.「1ステップ」 ...
- JS区分移动端和PC
var ua = navigator.userAgent.toLowerCase(); if (ua.match(/MicroMessenger/i) == "micromessenger& ...
- dotnetcore 单元测试
dotnetcore的单元测试目前支持的比较好的是xunit,首先通过nuget添加组件dotnet-test-xunit 和 xunit.如果有依赖注入可在构造方法中,相当于Nunit中的[Setu ...
- Font Squirrel
Font Squirrel FontSquirrel:国外免费字体下载网是一个提供高质量商业字体下载网站,提供海量的英文字体库,用户可以随意下载并应用于各种商业用字,无需考虑其版权问题. 官网地址:h ...
- Torch7学习笔记(二)nn Package
神经网络Package [目前还属于草稿版,等我整个学习玩以后会重新整理] 模块Module module定义了训练神经网络需要的所有基础方法,并且是可以序列化的抽象类. module有两种状态变量: ...
- cocospods 最新安装教程
Terminator 终端原来 安装 cocoa pods 终端命令 :sudo gem install cocoapods #已经无效系统更新后的 cocoa pods 终端命令 : sudo ...
- oracle导出一条二进制数据(二进制,long只能通过dmp导出)
exp jxfoc/JXFOC@ORCL file=d:\dd.dmp tables=(jxfoc.FLIGHT_PLAN_MAKE_LOG,jxfoc.METAR_CONTENT_FOR_MAIL) ...
- Linux 下安装中文 ctex 指南
大家在用 $\LaTeX$ 进行中文排版时相信会遇到不少问题,而$\textbf{ctex}$套装的出现则有效的解决了这一问题,只要安装了$\textbf{ctex}$那么在文中不用进行引用设置就可以 ...
- Ubuntu下安装mod_python报错(GIT错误)
Ubuntu下安装mod_python3.4.1版本报出如下错误: writing byte-compilation script '/tmp/tmpE91VXZ.py' /usr/bin/pytho ...
- linux下ftp配置文件详解
# 匿名用户配置 anonymous_enable=YES # 是否允许匿名ftp,如否则选择NO anon_upload_enable=YES # 匿名用户是否能上传 anon_mkdir_writ ...