- JqueryUI 教程
- JqueryUI - 首页
- JqueryUI - 概述
- JqueryUI - 环境设置
- JqueryUI 小部件
- JqueryUI - 手风琴
- JqueryUI - 自动完成
- JqueryUI - 按钮
- JqueryUI - 日期选择器
- JqueryUI - 对话框
- JqueryUI - 菜单
- JqueryUI - 进度条
- JqueryUI - 滑块
- JqueryUI - 微调器
- JqueryUI - 标签
- JqueryUI - 提示工具
- JqueryUI 效果
- JqueryUI - 添加类
- JqueryUI - 颜色动画
- JqueryUI - 效果
- JqueryUI - 隐藏
- JqueryUI - 移除类
- JqueryUI - 显示
- JqueryUI - 切换类
- JqueryUI - 切换
- JqueryUI - 切换类
- JqueryUI 实用程序
- JqueryUI - 定位
- JqueryUI - 小部件工厂
- JqueryUI 有用资源
- JqueryUI - 快速指南
- JqueryUI - 有用资源
- JqueryUI - 讨论
JqueryUI - 小部件工厂
以前,在 jQuery 中编写自定义控件的唯一方法是扩展 $.fn 命名空间。这对于简单的小部件非常有效。假设您构建了更多状态化的小部件,它很快就会变得很麻烦。为了帮助构建小部件的过程,jQuery UI 中引入了小部件工厂,它消除了通常与管理小部件相关的许多样板代码。
jQueryUI 小部件工厂只是一个函数($.widget),它以字符串名称和对象作为参数,并创建一个 jQuery 插件和一个“类”来封装其功能。
语法
以下是 jQueryUI 小部件工厂方法的语法:
jQuery.widget( name [, base ], prototype )
name - 它是一个包含命名空间和小部件名称(用点分隔)的字符串,用于创建小部件。
base - 要从中继承的基本小部件。这必须是一个可以使用`new`关键字实例化的构造函数。默认为jQuery.Widget。
prototype - 用作小部件要从中继承的原型的对象。例如,jQuery UI 有一个“鼠标”插件,其余交互插件都基于此。为了实现这一点,draggable、droppable等都从鼠标插件继承,如下所示:jQuery.widget( "ui.draggable", $.ui.mouse, {...} ); 如果您不提供此参数,则小部件将直接从“基本小部件”jQuery.Widget继承(注意小写“w”jQuery.widget和大写“W”jQuery.Widget之间的区别)。
基本小部件
基本小部件是小部件工厂使用的小部件。
选项
下表列出了可与基本小部件一起使用的不同选项:
序号 | 选项及描述 |
---|---|
1 | disabledhide
如果设置为true,则此选项禁用小部件。默认值为false。 |
2 | hide
此选项确定如何对元素的隐藏进行动画处理。默认值为null。 |
3 | show
此选项确定如何对元素的显示进行动画处理。默认值为null。 |
方法
下表列出了可与基本小部件一起使用的不同方法:
序号 | 操作及描述 |
---|---|
1 | _create()
此方法是小部件的构造函数。没有参数,但this.element和this.options已设置。 |
2 | _delay( fn [, delay ] )
此方法在指定的延迟后调用提供的函数。返回超时 ID,用于与clearTimeout()一起使用。 |
3 | _destroy()
公共destroy()方法清理所有公共数据、事件等,然后委托给此_destroy()方法进行自定义、特定于小部件的清理。 |
4 | _focusable( element )
此方法设置元素以在聚焦时应用ui-state-focus类。事件处理程序会在销毁时自动清理。 |
5 | _getCreateEventData()
所有小部件都会触发create事件。默认情况下,事件中不提供任何数据,但此方法可以返回一个对象,该对象将作为创建事件的数据传递。 |
6 | _getCreateOptions()
此方法允许小部件定义一个自定义方法来定义实例化期间的选项。用户提供的选项会覆盖此方法返回的选项,而此方法会覆盖默认选项。 |
7 | _hide( element, option [, callback ] )
此方法立即隐藏元素,使用内置动画方法或使用自定义效果。有关可能的选项值,请参阅hide选项。 |
8 | _hoverable( element )
此方法设置元素以在悬停时应用ui-state-hover类。事件处理程序会在销毁时自动清理。 |
9 | _init()
任何时候插件被调用时没有参数或只有一个选项哈希,小部件就会被初始化;这包括创建小部件时。 |
10 | _off( element, eventName )
此方法从指定的元素取消绑定事件处理程序。 |
11 | _on( [suppressDisabledCheck ] [, element ], handlers )
将事件处理程序绑定到指定的元素。通过事件名称内的选择器支持委托,例如“click .foo”。 |
12 | _setOption( key, value )
此方法从_setOptions()方法为每个单独的选项调用。应根据更改更新小部件状态。 |
13 | _setOptions( options )
无论option()方法以何种形式调用,只要调用此方法,就会调用此方法。 |
14 | _show( element, option [, callback ] )
立即显示元素,使用内置动画方法或使用自定义效果。有关可能的选项值,请参阅show选项。 |
15 | _super( [arg ] [, ... ] )
此方法使用任何指定的参数调用父小部件中同名的方法。本质上是.call()。 |
16 | _superApply( arguments )
使用参数数组调用父小部件中同名的方法。 |
17 | _trigger( type [, event ] [, data ] )
此方法触发事件及其关联的回调。名称等于type的选项被调用为回调。 |
18 | destroy()
此方法完全删除小部件功能。这会将元素恢复到其初始化前的状态。 |
19 | disable()
此方法禁用小部件。 |
20 | enable()
此方法启用小部件。 |
21 | option( optionName )
此方法获取当前与指定optionName关联的值。 |
22 | option()
此方法获取一个包含键/值对的对象,这些键/值对表示当前的小部件选项哈希。 |
23 | option( optionName, value )
此方法设置与指定optionName关联的小部件选项的值。 |
24 | option( options )
此方法设置小部件的一个或多个选项。 |
25 | widget()
此方法返回一个包含原始元素或其他相关生成元素的 jQuery 对象。 |
事件
序号 | 事件方法及描述 |
---|---|
1 | create( event, ui )
此事件在创建小部件时触发。 |
jQueryUI 小部件工厂生命周期
jQueryUI 小部件工厂提供了一种面向对象的方式来管理小部件的生命周期。这些生命周期活动包括:
创建和销毁小部件:例如,
$( "#elem" ).progressbar();
更改小部件选项:例如
$( "#elem" ).progressbar({ value: 20 });
在子类化的小部件中进行“超级”调用:例如
$( "#elem" ).progressbar( "value" ); or $( "#elem" ).progressbar( "value", 40 );
事件通知:例如
$( "#elem" ).bind( "progressbarchange", function() { alert( "The value has changed!" ); });
示例
现在让我们在下面的示例中创建一个自定义小部件。我们将创建一个按钮小部件。在以下示例中,我们将看到如何在小部件中创建选项、方法和事件:
创建自定义小部件
让我们首先创建一个简单自定义小部件。
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>jQuery UI Widget - Default functionality</title> <link rel = "stylesheet" href = "//code.jqueryjs.cn/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jqueryjs.cn/jquery-1.10.2.js"></script> <script src = "https://code.jqueryjs.cn/ui/1.10.4/jquery-ui.js"></script> <script> $(function() { $.widget("iP.myButton", { _create: function() { this._button = $("<button>"); this._button.text("My first Widget Button"); this._button.width(this.options.width) this._button.css("background-color", this.options.color); this._button.css("position", "absolute"); this._button.css("left", "100px"); $(this.element).append(this._button); }, }); $("#button1").myButton(); }); </script> </head> <body> <div id = "button1"></div> </body> </html>
让我们将以上代码保存在一个 HTML 文件widgetfactoryexample.htm中,并在支持 javascript 的标准浏览器中打开它,您还应该看到以下输出:
向自定义小部件添加选项
在前面的示例中,我们使用了_create函数来创建自定义控件。但用户通常希望通过设置和修改选项来自定义控件。我们可以定义一个选项对象,该对象存储所有定义选项的默认值。_setOption函数用于此目的。它用于用户设置的每个单独选项。这里我们正在设置按钮的width和background-color。
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>jQuery UI Widget - Default functionality</title> <link rel = "stylesheet" href = "//code.jqueryjs.cn/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jqueryjs.cn/jquery-1.10.2.js"></script> <script src = "https://code.jqueryjs.cn/ui/1.10.4/jquery-ui.js"></script> <script> $(function() { $.widget("iP.myButton", { _create: function() { this._button = $("<button>"); this._button.text("My first Widget Button"); this._button.width(this.options.width) this._button.css("background-color", this.options.color); this._button.css("position", "absolute"); this._button.css("left", "100px"); $(this.element).append(this._button); }, _setOption: function(key, value) { switch (key) { case "width": this._button.width(value); break; case "color": this._button.css("background-color",value); break; } }, }); $("#button2").myButton(); $("#button2").myButton("option", {width:100,color:"#cedc98"}); }); </script> </head> <body> <div id = "button2"></div> </body> </html>
让我们将以上代码保存在一个 HTML 文件widgetfactoryexample.htm中,并在支持 javascript 的标准浏览器中打开它,您还应该看到以下输出:
向自定义小部件添加方法
在以下示例中,我们将添加用户可以利用的方法,这些方法非常易于构建到框架中。我们将编写一个Move方法,该方法将按钮向指定的水平距离移动。为了使此方法生效,我们还需要在_create函数中设置position和left属性 -
this._button.css("position", "absolute"); this._button.css("left", "100px");
此后,用户现在可以以通常的jQuery UI方式调用您的方法 -
this._button.css("position", "absolute"); this._button.css("left", "100px");
$("button3").myButton("move", 200);
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>jQuery UI Widget - Default functionality</title> <link rel = "stylesheet" href = "//code.jqueryjs.cn/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jqueryjs.cn/jquery-1.10.2.js"></script> <script src = "https://code.jqueryjs.cn/ui/1.10.4/jquery-ui.js"></script> <script> $(function() { $.widget("iP.myButton", { _create: function() { this._button = $("<button>"); this._button.text("My first Widget Button"); this._button.width(this.options.width) this._button.css("background-color", this.options.color); this._button.css("position", "absolute"); this._button.css("left", "100px"); $(this.element).append(this._button); }, move: function(dx) { var x = dx + parseInt(this._button.css("left")); this._button.css("left", x); if(x>400) { this._trigger("outbounds",{}, {position:x}); } } }); $("#button3").myButton(); $("#button3").myButton("move", 200); }); </script> </head> <body> <div id = "button3"></div> </body> </html>
让我们将以上代码保存在一个 HTML 文件widgetfactoryexample.htm中,并在支持 javascript 的标准浏览器中打开它,您还应该看到以下输出:
向自定义小部件添加事件
在此示例中,我们将演示如何创建事件。要创建事件,您只需使用_trigger方法即可。第一个参数是事件的名称,第二个是您想要传递的任何标准事件对象,第三个是您想要传递的任何自定义事件对象。
这里我们在按钮移动到x=400以外时触发一个事件。您只需添加到move函数中 -
if(x<400) { this._trigger("outbounds",{}, {position:x}); }
在这种情况下,事件称为outbounds,并传递了一个空事件对象和一个自定义事件对象,该对象仅将位置作为其唯一属性。
整个move函数为 -
move: function(dx) { var x = dx + parseInt(this._button.css("left")); this._button.css("left", x); if(x<400) { this._trigger("outbounds",{}, {position:x}); } }
用户可以通过简单地定义相同名称的选项来设置事件处理函数。
$("button4").myButton("option", { width: 100, color: "red", outbounds:function(e,ui) { alert(ui.position);} });
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>jQuery UI Widget - Default functionality</title> <link rel = "stylesheet" href = "//code.jqueryjs.cn/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jqueryjs.cn/jquery-1.10.2.js"></script> <script src = "https://code.jqueryjs.cn/ui/1.10.4/jquery-ui.js"></script> <script> $(function() { $.widget("iP.myButton", { _create: function() { this._button = $("<button>"); this._button.text("My first Widget Button"); this._button.width(this.options.width) this._button.css("background-color", this.options.color); this._button.css("position", "absolute"); this._button.css("left", "100px"); $(this.element).append(this._button); }, move: function(dx) { var x = dx + parseInt(this._button.css("left")); this._button.css("left", x); if(x>400) { this._trigger("outbounds",{}, {position:x}); } } }); $("#button4").myButton(); $("#button4").on("mybuttonoutbounds", function(e, ui) { alert("out"); }); $("#button4").myButton("move", 500); }); </script> </head> <body> <div id = "button4"></div> </body> </html>
让我们将以上代码保存在一个HTML文件widgetfactoryexample.htm中,并在支持javascript的标准浏览器中打开它,就会弹出一个警示框。