- 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.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函式用於此目的。它用於使用者設定的每個單獨選項。這裡我們正在設定按鈕的width和background-color。
<!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以外時觸發一個事件。您只需新增到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.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的標準瀏覽器中開啟它,就會彈出一個警示框。