- 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 Factory 只是一个函数 ($.widget),它接受字符串名称和对象作为参数,并创建 jQuery 插件和“类”来封装其功能。
句法
以下是 jQueryUI Widget Factory 方法的语法 -
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 | 禁用隐藏
如果设置为true,此选项将禁用小部件。默认情况下它的值为false。 |
2 | 隐藏
此选项确定如何为元素的隐藏设置动画。默认情况下它的值为null。 |
3 | 展示
此选项确定如何对元素的显示进行动画处理。默认情况下它的值为null。 |
方法
下表列出了可与基本小部件一起使用的不同方法-
先生。 | 动作与描述 |
---|---|
1 | _创造()
该方法是小部件的构造函数。没有参数,但this.element和this.options已经设置。 |
2 | _delay( fn [, 延迟 ] )
此方法在指定的延迟后调用提供的函数。返回与clearTimeout()一起使用的超时ID 。 |
3 | _破坏()
公共destroy()方法清理所有常见数据、事件等,然后委托给此_destroy()方法进行自定义、特定于小部件的清理。 |
4 | _focusable( 元素 )
此方法设置元素以在焦点上应用ui-state-focus类。事件处理程序在销毁时会自动清理。 |
5 | _getCreateEventData()
所有小部件都会触发创建事件。默认情况下,事件中不提供任何数据,但此方法可以返回一个对象,该对象将作为创建事件的数据传递。 |
6 | _getCreateOptions()
此方法允许小部件定义用于在实例化期间定义选项的自定义方法。用户提供的选项会覆盖此方法返回的选项,从而覆盖默认选项。 |
7 | _hide( 元素, 选项 [, 回调 ] )
此方法使用内置动画方法或使用自定义效果立即隐藏元素。请参阅隐藏选项以了解可能的选项值。 |
8 | _hoverable( 元素 )
此方法设置元素在悬停时应用 ui-state-hover 类。事件处理程序在销毁时会自动清理。 |
9 | _在里面()
任何时候不带参数或仅使用选项哈希调用插件时,都会初始化小部件;这包括创建小部件的时间。 |
10 | _off( 元素, 事件名称 )
此方法解除事件处理程序与指定元素的绑定。 |
11 | _on( [suppressDisabledCheck ] [, 元素 ], 处理程序 )
将事件处理程序绑定到指定的元素。通过事件名称中的选择器支持委派,例如“click .foo”。 |
12 | _setOption(键,值)
对于每个单独的选项,从_setOptions()方法调用此方法。小部件状态应根据更改进行更新。 |
13 | _setOptions( 选项 )
每当调用 option() 方法时都会调用此方法,无论调用 option() 方法的形式如何。 |
14 | _show( 元素, 选项 [, 回调 ] )
使用内置动画方法或使用自定义效果立即显示元素。请参阅显示选项以了解可能的选项值。 |
15 | _super( [arg ] [, ... ] )
此方法使用任何指定的参数从父窗口小部件调用同名的方法。本质上是.call()。 |
16 | _superApply( 参数 )
使用参数数组从父窗口小部件调用同名的方法。 |
17 号 | _trigger( 类型 [, 事件 ] [, 数据 ] )
此方法触发事件及其关联的回调。名称等于 type 的选项将作为回调被调用。 |
18 | 破坏()
此方法完全删除了小部件功能。这将使元素返回到其预初始化状态。 |
19 | 禁用()
此方法禁用该小部件。 |
20 | 使能够()
此方法启用小部件。 |
21 | 选项(选项名称)
此方法获取当前与指定optionName关联的值。 |
22 | 选项()
此方法获取一个对象,其中包含表示当前小部件选项哈希的键/值对。 |
23 | 选项(选项名称,值)
此方法设置与指定 optionName 关联的小部件选项的值。 |
24 | 选项(选项)
此方法为小部件设置一个或多个选项。 |
25 | 小部件()
此方法返回一个包含原始元素或其他相关生成元素的 jQuery 对象。 |
活动
先生。 | 活动方式及说明 |
---|---|
1 | 创建(事件,用户界面)
创建小部件时会触发此事件。 |
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.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jquery.com/jquery-1.10.2.js"></script> <script src = "https://code.jquery.com/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函数就是用于此目的。用户设置的每个单独选项都会调用它。这里我们设置按钮的宽度和背景颜色。
<!DOCTYPE html> <html> <head> <meta charset = "utf-8"> <title>jQuery UI Widget - Default functionality</title> <link rel = "stylesheet" href = "//code.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jquery.com/jquery-1.10.2.js"></script> <script src = "https://code.jquery.com/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.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jquery.com/jquery-1.10.2.js"></script> <script src = "https://code.jquery.com/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 时,我们将触发一个事件。您所要做的就是添加到移动功能 -
if(x<400) { this._trigger("outbounds",{}, {position:x}); }
在这种情况下,事件称为出站,并且空事件对象与自定义事件对象一起传递,该对象仅提供位置作为其唯一属性。
整个移动函数是 -
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.jquery.com/ui/1.10.4/themes/smoothness/jquery-ui.css"> <script src = "https://code.jquery.com/jquery-1.10.2.js"></script> <script src = "https://code.jquery.com/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 的标准浏览器中打开它,将打开一个警告框。