jquery.widget开发(1)
jquery.widget是挂件,通过挂件模式挂载在jquery对象上,其实本质上也就是用了$.fn.extend和$.extend的扩展。
http://blog.sina.com.cn/s/blog_4a60ba9c01014dea.html
Jquery ui 提供了一些基本的widget,但是他提供了很好的机制来创建widget。在jquery css framework中包含了基本的css样式(视觉和感觉诸如颜色,字体大小,图标等),而在ui的css中,则需要定义构建widget结构的css,比如margin,padding,position等。在开发widget的时候也要尽量遵循这一原则,这样才能很好的利用jquery theme roller来应用样式,从而在整体上保持一致,在前面的文章中简单的 介绍了jquery css framework。下面就简单的介绍下jquery ui 的开发指引
Jquery的官方文档中对此写的很清晰。一般来说,jquery ui都是继承自jquery.ui.widget.js这个文件的。这个文件提供了一个工厂方法来创建widget对象。其方法是$.widget(String name, Options prototype).下面简单介绍下这个类提供的方法和属性。在创建widget的时候将重写这些。
destroy():将widget实例从dom对象上移除,在开发widget的时候一般此方法是必须的。就是移除你自己在dom element上添加的样式和行为以及dom结构
options:在这里面保存的是widget的配置信息,在创建widget的时候需要设置一些配置参数。
element:就是widget作用的dom对象。
enable()和disable()这两个方法就是禁用和启用widget的。其实是修改options.disabled。
还有两个私有方法是创建widget的时候要重写的。
_create() 这个方法就是创建widget的方法,在页面调用widget的时候,就会执行此方法,来构建widget。Widget的绝大大多数行为和结构都是在这里创建的。
_init() 这个方法大多数时候不会被重写,这个方法在构建widget的时候在_create后执行。从相关的文档上查询到:
_create()方法在widget构建的时候执行,而_init()方法在构建和重新初始化的时候执行。而destroy方法则是在移除widget的时候被执行。在widget中,所有的私有方法都将加以"_"前缀
_setOption():此方法提供了options的属性的设置,一般情况下如果options里面的参数不需要特殊处理(校验,类型转换,以及设置属性的时候触发某一操作等)的时候不需要对此方法进行重写
事件
如果有自定义的事件,可以采用widget为我们封装好的方法来处理_trigger()这个方法来处理,其调用方法 this._trigger(type, event, data),第一个参数为时间类型,第二个参数为事件event对象,第三个参数为事件要传递的参数。
例如:
//此widget是将textbox进行修饰一下的。自身没有css,采用的是jquery ui css framework的样式 
(function ($) { //ui默认采用jquery的ui前缀,后面的是widget名称     
    $.widget("ui.textboxdecorator", { //此widget中没有options         
        options: {},
        _init: function () { //验证是否是需要装饰的元素
if (!(this.element.attr("tagName").toLowerCase() === "input" || this.element.attr("tagName").toLowerCase() === "textarea")) {
                    return;
                }
                if (!(this.element.attr("type").toLowerCase() === "text" || this.element.attr("type").toLowerCase() === "password")) {
                    if (this.element.attr("tagName").toLowerCase() === "input") return;
                }
                //this.element也就是调用此widget的元素            
                var e = this.element;
                //ui-widget widget基本的样式,ui-state-default。默认状态的样式;ui- corner-all 圆角(基于css3,ie下不起作用)             
                this.element.addClass("ui-widget ui-state-default ui-corner-all");
                //添加hover效果和active效果                        
                this.element.mouseover(function () {
                    e.addClass("ui-state-hover");
                }).mouseout(function () {
                    e.removeClass("ui-state-hover");
                }).mousedown(function () {
                    e.addClass("ui-state-active");
                }).mouseup(function () {
                    e.removeClass("ui-state-active");
                });
            },
            //销毁时,移除widget增加的样式         
            destroy: function () {
                this.element.removeClass("ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active");
            }
    })
})(jQuery)
在使用该widget的时候,需要引用jquery,jquery.ui.core.js,jquery.ui.widget.js文件,css文件需要jquery.ui.core.css和jquery.ui.theme.css两个文件。在调用的时候采用$("***"). textboxdecorator();来调用此widget。
jQuery编写widget的一些窍门
在编写widget的时候,一般我们需要绑定一些事件,最好将这些widget的绑定事件加上当前widget的命名空间。如果同一个jQuery对象,使用了两个widget,而两个widget都绑定了相同的事件名称,可能会出现问题。在销毁widget的时候,去除绑定事件也很方便,只需要unbind(”.namespace“)就可以了。
在写jQuery的时候,因为jQuery对象是支持连写的。譬如:$(obj).css("height","20px").attr("title","abc")....
作者:大吉大利今晚学习
链接:http://www.imooc.com/article/75699
来源:慕课网
jquery.widget开发(1)的更多相关文章
- jquery widget开发——核心框架
		
框架代码: $.widget("myns.myplugin", { //默认参数 options: { }, //初始化,控件生命周期内只运行一次 _init: function ...
 - jQuery为开发插件提拱了两个方法:jQuery.fn.extend();  jQuery.extend();
		
jQuery为开发插件提拱了两个方法,分别是: jQuery.fn.extend(); jQuery.extend(); jQuery.fn jQuery.fn = jQuery.prototype ...
 - iOS widget开发
		
链接: iOS Widget开发 iOS开发之构建Widget iOS开发Widget iOS开发-widget基础 ios8新特性widget开发 ios 10 开发-widget实现 Widget ...
 - jQuery MiniUI 开发指南+API组件参考手册
		
jQuery MiniUI 开发指南 本文档将逐步的讲解jQuery MiniUI的方方面面,从此您将踏上jQuery MiniUI的深入探索之旅. 1.Hello M ...
 - (转)经典收藏 50个jQuery Mobile开发技巧集萃
		
(原)http://www.cnblogs.com/chu888chu888/archive/2011/11/10/2244181.html 经典收藏 50个jQuery Mobile开发技巧集萃 ...
 - 18个jQuery Mobile开发贴士和教程
		
jQuery Mobile 是 jQuery 在手机上和平板设备上的版本.jQuery Mobile 不仅会给主流移动平台带来jQuery核心库,而且会发布一个完整统一的jQuery移动UI框架.支持 ...
 - android widget 开发实例 : 桌面便签程序的实现具体解释和源代码 (上)
		
如有错漏请不吝拍砖指正,转载请注明出处,很感谢 桌面便签软件是android上经常使用软件的一种,比方比較早的Sticky Note,就曾很流行, Sticky Note的介绍能够參见 http:// ...
 - jQuery中开发插件的两种方式
		
jQuery中开发插件的两种方式(附Demo) 做web开发的基本上都会用到jQuery,jQuery插件开发两种方式:一种是类扩展的方式开发插件,jQuery添加新的全局函数(jQuery的全局函数 ...
 - jQuery框架开发一个最简单的幻灯效果
		
在线演示 在这个课程中,我们将介绍如何使用jQuery来开发一个最简单的图片幻灯效果. 立刻观看互动课程:jQuery框架开发一个最简单的幻灯效果 阅读原文:jQuery框架开发一个最简单的幻灯效果
 
随机推荐
- asp.net 的log4net的helper类
			
using log4net; using System; using System.Diagnostics; namespace MxWeiXinPF.Common.log { public stat ...
 - Java13新特性 -- 重新实现旧版套接字API
			
全新实现的 NioSocketImpl 来替换JDK1.0的PlainSocketImpl. 它便于维护和调试,与 NewI/O (NIO) 使用相同的 JDK 内部结构,因此不需要使用系统本地代码. ...
 - PAT-2019年冬季考试-甲级 7-3 Summit (25分) (邻接矩阵存储,直接暴力)
			
7-3 Summit (25分) A summit (峰会) is a meeting of heads of state or government. Arranging the rest ar ...
 - 使用pprof调试go程序
			
使用pprof调试go程序 pprof可以用来调试go程序,在go中有两个库可以使用,1. net/http/pprof 2. runtime/pprof 方法1 - net/http/pprof 测 ...
 - 使用极光第三方IM的时候服务器报错Caused by: java.net.UnknownHostException: api.im.jpush.cn
			
Caused by: java.net.UnknownHostException: api.im.jpush.cn 服务器报这个:首先查看服务器是否能ping通,如果能ping通,则看下 vi /et ...
 - lnmp卸载删除多余的php版本
			
/etc/init.d/php-fpm5.3 stoprm -rf /usr/local/php5.3rm -f /etc/init.d/php-fpm5.3rm -f /usr/local/ngin ...
 - QT+OPENCV实现录屏功能
			
本文使用QT+opencv来实现对指定窗体画面录制,并保存为avi文件. (1)获取窗体界面 QScreen类有一个grabWindow函数,可以用来获取窗体的画面,这个函数使用很简单,就是传入窗体句 ...
 - DS博客作业07--查找
			
1.本周学习总结(0--2分) 1.思维导图 2.谈谈你对查找运算的认识及学习体会. 2.PTA实验作业(6分) 本周要求挑3道题目写设计思路.调试过程.设计思路用伪代码描述.题目选做要求: 原则上题 ...
 - 030 SSM综合练习06--数据后台管理系统--SSM权限操作及Spring Security入门
			
1.权限操作涉及的三张表 (1)用户表信息描述users sql语句: CREATE TABLE users ( id ) DEFAULT SYS_GUID () PRIMARY KEY, email ...
 - Java Web报错:The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path
			
问题描述: 我们在用Eclipse进行Java web开发时,可能会出现这样的错误:The superclass javax.servlet.http.HttpServlet was not foun ...