jQuery中的自定义插件之----工厂方法(Factory Widget)
jQuery赋予了我们很强大的插件自定义的功能,可以作为我们的武器库,应用到所有的网页中,使用的语法比较有意思,下面是对它的一些探讨.
遵循以下的原则:
1 IIFE 创建一个jQuery的scope
(function($){}(jQuery))
2 namespace要唯一.
$.widget('custom.colorize')
custom为命名空间,colorize为插件名
3 default options
options:{red:255,green:0,blue:0,change:null,random:null}
三个属性(red,green,blue),两个方法(change,random)初始化
4 可扩展option,使用工厂方法会自动进行检测输入参数和扩展.比如
$('#div1').colorize({
green:128,
random:function(event, ui) {
return ui.green > 128;
}
})
就会将option扩展为:
option = {
red:255,
green:128,
blue:0,
change:null,
random:function(event, ui) {
return ui.green > 128;
}
}
本质使用的应该是 $.extend({},default,options) 方法
5 添加私有方法:
(function($){
$.widget("custom.colorize",{
options:{
red:255,
green:0,
blue:0,
change:null,
random:null
},
// constructor
_create:function() {
this.element
.addClass("custom-colorize");
this.changer = $('<button>',{text:'change','class':'custom-colorize-changer'})
.appendTo(this.element)
.button();
// 绑定点击事件在该button上
this._on(this.charger, {
click:"random"
});
this._refresh();
},
// 更新,render
_refresh: function() {
this.element.css('background-color',`rgb(${this.options.red},${this.options.green},${this.options.blue})`);
// 触发回调函数change
this._trigger('change');
},
//销毁
_destroy: function() {
this.changer.remove();
this.element
.removeClass('custom-colorize')
.enableSelection()
.css('background-color', 'transparent');
},
// 设置,包含所有参数合并
_setOptions:function(){
this._superApply(arguments);
this._refresh();
},
// 设置,部分参数
_setOption:function(key,value){
if(/ref|green|blue/.test(key) && (value < 0 || value > 255)) {
return;
}
this._super(key,value);
}
});
}(jQuery))
6 公有方法,添加一个随机的方法
(function($){
$.widget("custom.colorize",{
//公有方法,可被colorize('random')访问
random:function(){
let color = {
red: Math.floor(Math.random() * 256),
green: Math.floor(Math.random() * 256),
blue: Math.floor(Math.random() * 256)
};
if (this._trigger("random",event,colors) !== false) {
this.option(colors);
}
}
});
然后来看一下怎么使用这个插件:
// 初始化默认参数
$('#my-widget1').colorize(); // 初始化并带有参数
$('#my-widget2').colorize({
green: 128,
random: function(event, ui) {
return ui.green > 128;
}
}); // 点击enable或disable
$('#disable').on('click',function(){
if ($(':custom-colorize').colorize('option','disabled')) {
$(':custom-colorize').colorize('enable');
} else {
$(':custom-colorize').colorize('disable');
}
}); // 点击设置运行后参数
$('#grenn').on('click',function() {
$(':custom-colorize').colorize('option', {
red: 64,
green: 250,
blue: 8
});
});
值得注意的是:
1 内置的插件selector, 如果是使用的工厂方法创建的插件,可以使用$(':插件名称')来获取所有应用了该插件的所有实例(instance),
2 使用"enable"和"disable"作为参数来操作插件是否有效
3 random里的ui是jQuery UI对象,详情请参见 https://jqueryui.com/
代码来自jQuery官方文档:http://jqueryui.com/widget/
希望对你有所帮助!
jQuery中的自定义插件之----工厂方法(Factory Widget)的更多相关文章
- Jquery中each的三种遍历方法
Jquery中each的三种遍历方法 $.post("urladdr", { "data" : "data" }, function(dat ...
- jquery中交替点击事件toggle方法的使用示例
jquery中交替点击事件toggle方法中有两个参数,分别是要交替执行的事件.如果不传参默认是显示隐藏功能,下面有个不错的示例,感兴趣的朋友可以参考下 复制代码代码如下: $('#clickId‘) ...
- jquery中获取iframe的id的方法:
jquery中获取iframe的id的方法: var frameId = window.frameElement && window.frameElement.id || ''; al ...
- jQuery中detach&&remove&&empty三种方法的区别
jQuery中empty&&remove&&detach三种方法的区别 empty():移除指定元素内部的所有内容,但不包括它本身 remove():移除指定元素内部的 ...
- Spring 通过工厂方法(Factory Method)来配置bean
Spring 通过工厂方法(Factory Method)来配置bean 在Spring的世界中, 我们通常会利用bean config file 或者 annotation注解方式来配置bean. ...
- 抽象工厂(Abstract Factory),工厂方法(Factory Method),单例模式(Singleton Pattern)
在谈工厂之前,先阐述一个观点:那就是在实际程序设计中,为了设计灵活的多态代码,代码中尽量不使用new去实例化一个对象,那么不使用new去实例化对象,剩下可用的方法就可以选择使用工厂方法,原型复制等去实 ...
- jQuery命名空间和自定义插件的的多种方法
jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jquery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...
- jquery中隐藏div的几种方法
//jQuery中的显示.隐藏方法 $("#id").show()://表示display:block, $("#id").hide()://表示disp ...
- JQuery中serialize()、serializeArray()和param()方法示例介绍
在项目中做form表单提交的时候,如果参数比较少,可以通过jquery一个个取得,但是当 form表参数很多的情况下,还是一一取得的话无疑是加大了工作量,那我们需要咱们获取到表单的所有参数呢,幸好,j ...
随机推荐
- Vijos 1404 遭遇战
Vijos 1404 遭遇战 背景 你知道吗,SQ Class的人都很喜欢打CS.(不知道CS是什么的人不用参加这次比赛). 描述 今天,他们在打一张叫DUSTII的地图,万恶的恐怖分子要炸掉藏在A区 ...
- Ajax简单总结
Ajax=异步JS和XML: 主要是局部的数据更新,即不需要刷新整个页面: 首先,需要新建一个XMLHttpRequest对象[这里注意如果是ie7以下的就是创建ActiveXObject]: var ...
- 有关datatables的非常规教程
有关datatables的非常规教程 1. //$.fn.dataTable.tables({ visible: true, api: true }).columns.adjust(); table. ...
- Navi.Soft31.产品.微信聊天(永久免费)
1系统简介 1.1功能简述 微信确实是一款优秀的社交的软件,被越来越多的人使用.它的电脑版最新版本是2.6,更新也比较及时,只是它有一个功能差强人意,就是同一台电脑只能运行一个微信号,不知道为何这样设 ...
- windows 下 Symfony的下载与安装
初始化项目 本篇教程我尽量按照Windows/*nix都可以运行的方式来讲解. 得益于Symfony installer,我们目前可以很方便的初始化一个Symfony2项目.不过首先,你得有一个Sym ...
- HDU - 1846 Brave Game 巴什博弈
思路:直接判断n是不是m+1的倍数,若是先手则输,否则赢. AC代码 #include <cstdio> #include <cmath> #include <algor ...
- hdu1556 Color the ball 线段树区间染色问题
都是老套路了,如果n=5,要把区间[1,4]染色,可以递归去染区间[1,3]和区间[4,4],如果区间相等就自加,不相等继续递归寻找对应区间. 打印结果时,把所有到达叶节点包含i的区间值相加,就是最后 ...
- POJ - 3087 模拟 [kuangbin带你飞]专题一
模拟洗牌的过程,合并两堆拍的方式:使先取s2,再取s1:分离成两堆的方式:下面C张放到s1,上面C张到s2.当前牌型与第一次相同时,说明不能搜索到答案. AC代码 #include<cstdio ...
- mybatis与spring的整合(使用接口实现crud)
本人刚刚接触mybatis,今天把它和spring整合起来用了一个上午==. 一开始是通过配置文件来配置,后来尝试用了一下注解,觉得mybatis的注解真的有点恶心...一大坨的,所以我还是建议使用配 ...
- Linux定时及mysql远程
(1)crontab crontab使用方法: (1)使用命令 crontab -e 然后直接编辑定时脚本. 这样执行以后,属于用户自定义的,会被写到 /var/spool/cron 目录下,生成一个 ...