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 ... 
随机推荐
- C# 使用AngleSharp 爬虫图片
			AngleSharp 简介 AngleSharp是基于.NET(C#)开发的专门解析HTML源码的DLL组件.根据HTML的DOM结构操作HTML,整个DOM已传输到逻辑类结构中.这种结构可以更好的操 ... 
- Office 365 共享链接直接进入编辑
			首先在Word online共享文档(不多赘述) 但这个链接打开的是预览视图,要点击右上角的"在浏览器中编辑"才能真正编辑. 但是很多情况都是没必要进入这个预览界面再编辑的.这多点 ... 
- 【转载】一行代码加载网络图片到ImageView——Android Picasso
			原文链接:一句代码加载网络图片到ImageView——Android Picasso 注意:此处使用下面代码需要先配置一下gradle,下载所需包. 具体操作如下图: compile 'com.sq ... 
- Linux文本的处理
			Linux最最最最重要的哲学思想就是:一切皆文件.文件以及文件的操作在LInux操作系统中是非常的重要.熟练使用精悍小巧快捷的文本处理方式让效率更高. 一.文件查看命令 less 分页查看 [root ... 
- dojo中的xhrPost请求(JSON)
			dojo中的xhrPost请求 dojo.xhrPost({ url:"../area.action", content:{ areaCode:areaCode }, handle ... 
- 图像采集系统的Camera Link标准接口设计
			高速数据采集系统可对相机采集得到的实时图像进行传输.实时处理,同时实现视频采集卡和计算机之间的通信.系统连接相机的接口用的是Camera Link接口,通过Camera Link接口把实时图像高速传输 ... 
- VxWorks中的中断应用设计要点
			硬件中断处理是实时系统设计中的关键性问题,设计人员有必要对其作深入研究,以更好地满足开发工作需要.文中以VxWorks操作系统为软件平台,讨论了在实时系统中进行中断应用设计时要注意的一些问题.由于软硬 ... 
- JXL组件生成报表报错(二)
			JXL组件生成报表 1.具体报错如下: usage: java org.apache.catalina.startup.Catalina [ -config {pathname} ] [ -nonam ... 
- Linux以列表格式显示块设备
			Linux以列表格式显示块设备 youhaidong@youhaidong-ThinkPad-Edge-E545:~$ lsblk -l NAME MAJ:MIN RM SIZE RO TYPE MO ... 
- dijit.byId("grid") is undefined
			1.错误描述 TypeError:dijit.byId(...) is undefined (68 out of range 3) 2.错误原因 var gridName = dijit ... 
