- jQuery UI 教程
- jQuery UI - 首頁
- jQuery UI - 概述
- jQuery UI - 環境設定
- jQuery UI 互動
- jQuery UI - 可拖動物件
- jQuery UI - 可放置物件
- jQuery UI - 可調整大小物件
- jQuery UI - 可選擇物件
- jQuery UI - 可排序物件
- jQuery UI 小部件
- jQuery UI - 手風琴
- jQuery UI - 自動完成
- jQuery UI - 按鈕
- jQuery UI - 日期選擇器
- jQuery UI - 對話方塊
- jQuery UI - 選單
- jQuery UI - 進度條
- jQuery UI - 滑塊
- jQuery UI - 微調器
- jQuery UI - 標籤頁
- jQuery UI - 工具提示
- jQuery UI 效果
- jQuery UI - 新增類
- jQuery UI - 顏色動畫
- jQuery UI - 效果
- jQuery UI - 隱藏
- jQuery UI - 刪除類
- jQuery UI - 顯示
- jQuery UI - 切換類
- jQuery UI - 切換
- jQuery UI - 切換類
- jQuery UI 實用工具
- jQuery UI - 定位
- jQuery UI - 小部件工廠
- jQuery UI 有用資源
- jQuery UI - 快速指南
- jQuery UI - 有用資源
- jQuery UI - 討論
jQuery UI - 可放置物件
jQuery UI 提供了 `droppable()` 方法,可以使任何 DOM 元素在指定的 target(可拖動元素的目標)處成為可放置物件。
語法
`droppable()` 方法可以兩種形式使用:
$(selector, context).droppable (options) 方法
`droppable (options)` 方法宣告一個 HTML 元素可以用作可以將其他元素拖放到其中的元素。`options` 引數是一個物件,用於指定所涉及元素的行為。
語法
$(selector, context).droppable (options);
您可以使用 JavaScript 物件一次提供一個或多個選項。如果要提供多個選項,則使用逗號分隔,如下所示:
$(selector, context).droppable({option1: value1, option2: value2..... });
下表列出了可與此方法一起使用的不同`options`:
| 序號 | 選項及描述 |
|---|---|
| 1 | accept
此選項用於控制要接受哪些可拖動元素進行放置。預設值為`*`。
|
| 2 | activeClass
此選項是一個字串,表示當接受的元素(`options.accept` 中指示的元素之一)正在拖動時要新增到可放置元素的一個或多個 CSS 類。預設值為`false`。 |
| 3 | addClasses
如果將此選項設定為`false`,則會阻止將`ui-droppable` 類新增到可放置元素。預設值為`true`。 |
| 4 | disabled
如果將此選項設定為`true`,則會停用可放置物件。預設值為`false`。 |
| 5 | greedy
此選項用於控制在巢狀的可放置物件上要接受哪些可拖動元素進行放置。預設值為`false`。如果將此選項設定為`true`,則任何父可放置物件都不會接收元素。 |
| 6 | hoverClass
此選項是`字串`,表示當接受的元素(`options.accept` 中指示的元素)移入可放置元素時要新增到該元素的一個或多個 CSS 類。預設值為`false`。 |
| 7 | scope
此選項用於將可拖動元素的可放置操作限制為僅具有相同`options.scope`(在 `draggable (options)` 中定義)的專案。預設值為`"default"`。 |
| 8 | tolerance
此選項是一個`字串`,用於指定用於測試可拖動物件是否懸停在可放置物件上的模式。預設值為`"intersect"`。 |
下一節將向您展示一些可放置功能的有效示例。
預設功能
以下示例演示了可放置功能的簡單示例,未將任何引數傳遞給`droppable()` 方法。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style>
#draggable-1 {
width: 100px; height: 50px; padding: 0.5em; float: left;
margin: 22px 5px 10px 0;
}
#droppable-1 {
width: 120px; height: 90px;padding: 0.5em; float: left;
margin: 10px;
}
</style>
<script>
$(function() {
$( "#draggable-1" ).draggable();
$( "#droppable-1" ).droppable();
});
</script>
</head>
<body>
<div id = "draggable-1" class = "ui-widget-content">
<p>Drag me to my target</p>
</div>
<div id = "droppable-1" class = "ui-widget-header">
<p>Drop here</p>
</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出。現在,您可以使用結果:
使用 addClass、disabled 和 tolerance
以下示例演示了在 jQuery UI 的放置函式中使用三個選項`(a) addClass (b) disabled` 和`(c) tolerance`。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style>
#draggable-2 {
width: 100px; height: 50px; padding: 0.5em;
margin: 0px 5px 10px 0;
}
#droppable-2,#droppable-3, #droppable-4,#droppable-5 {
width: 120px; height: 90px;padding: 0.5em; float: left;
margin: 10px;
}
</style>
<script>
$(function() {
$( "#draggable-2" ).draggable();
$( "#droppable-2" ).droppable({
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
$( "#droppable-3" ).droppable({
disabled : "true",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
$( "#droppable-4" ).droppable({
tolerance: 'touch',
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped with a touch!" );
}
});
$( "#droppable-5" ).droppable({
tolerance: 'fit',
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped only when fully fit on the me!" );
}
});
});
</script>
</head>
<body>
<div id = "draggable-2" class = "ui-widget-content">
<p>Drag me to my target</p>
</div>
<div id = "droppable-2" class = "ui-widget-header">
<p>Drop here</p>
</div>
<div id = "droppable-3" class = "ui-widget-header">
<p>I'm disabled, you can't drop here!</p>
</div>
<div id = "droppable-4" class = "ui-widget-header">
<p>Tolerance Touch!</p>
</div>
<div id = "droppable-5" class = "ui-widget-header">
<p>Tolerance Fit!</p>
</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出。現在,您可以使用結果:
現在將元素放置在“Tolerance Touch!”框上(只需接觸此框的邊緣),然後檢視目標元素的變化。現在要將元素放置在“Tolerance Fit!”目標上,可拖動元素必須完全重疊目標元素,即“Tolerance Fit!”目標。
選擇要放置的元素
以下示例演示了在 jQuery UI 的拖動函式中使用`accept` 選項和`scope` 選項。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style>
.wrap {
display: table-row-group;
}
#japanpeople,#indiapeople, #javatutorial,#springtutorial {
width: 120px; height: 70px; padding: 0.5em; float: left;
margin: 0px 5px 10px 0;
}
#japan,#india,#java,#spring {
width: 140px; height: 100px;padding: 0.5em; float: left;
margin: 10px;
}
</style>
<script>
$(function() {
$( "#japanpeople" ).draggable();
$( "#indiapeople" ).draggable();
$( "#japan" ).droppable({
accept: "#japanpeople",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
$( "#india" ).droppable({
accept: "#indiapeople",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
$( "#javatutorial" ).draggable({scope : "java"});
$( "#springtutorial" ).draggable({scope : "spring"});
$( "#java" ).droppable({
scope: "java",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
$( "#spring" ).droppable({
scope: "spring",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
});
</script>
</head>
<body>
<div class = "wrap" >
<div id = "japanpeople" class = "ui-widget-content">
<p>People to be dropped to Japan</p>
</div>
<div id = "indiapeople" class = "ui-widget-content">
<p>People to be dropped to India</p>
</div>
<div id = "japan" class = "ui-widget-header">
<p>Japan</p>
</div>
<div id = "india" class = "ui-widget-header">
<p>India</p>
</div>
</div>
<hr/>
<div class = "wrap" >
<div id = "javatutorial" class = "ui-widget-content">
<p>People who want to learn Java</p>
</div>
<div id = "springtutorial" class = "ui-widget-content">
<p>People who want to learn Spring</p>
</div>
<div id = "java" class = "ui-widget-header">
<p>Java</p>
</div>
<div id = "spring" class = "ui-widget-header">
<p>Spring</p>
</div>
</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出。現在,您可以使用輸出:
在這裡您可以看到,您只能將“People from Japan”元素放置在“Japan”目標上,將“People from India”元素放置在“India”目標上。類似地,“People who want to learn Java”的範圍設定為“Java”目標,“People who want to learn Spring”的範圍設定為“Spring”目標。
管理外觀
以下示例演示了 jQuery UI 類的`activeClass` 和`hoverClass` 選項的使用,這些選項有助於我們管理外觀。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style type = "text/css">
#draggable-3 {
width: 100px; height: 50px; padding: 0.5em; float: left;
margin: 21px 5px 10px 0;
}
#droppable-6 {
width: 120px; height: 90px;padding: 0.5em; float: left;
margin: 10px;
}
.active {
border-color : blue;
background : grey;
}
.hover {
border-color : red;
background : green;
}
</style>
<script>
$(function() {
$( "#draggable-3" ).draggable();
$( "#droppable-6" ).droppable({
activeClass: "active",
hoverClass: "hover",
drop: function( event, ui ) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
}
});
});
</script>
</head>
<body>
<div id = "draggable-3" class = "ui-widget-content">
<p>Drag me to my target</p>
</div>
<div id = "droppable-6" class = "ui-widget-header">
<p>Drop here</p>
</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出:
您可以注意到,當拖動或懸停(在目標上)“Drag me to my target”元素時,會更改目標元素“Drop here”的顏色。
$(selector, context).droppable ("action", params) 方法
`droppable ("action", params)` 方法可以在可放置元素上執行操作,例如阻止可放置功能。操作在第一個引數中指定為字串(例如,將“disable”用於阻止放置)。請查看下錶中可以傳遞的操作。
語法
$(selector, context).droppable ("action", params);;
下表列出了可與此方法一起使用的不同`actions`:
| 序號 | 操作及描述 |
|---|---|
| 1 | destroy
此操作會完全銷燬元素的可放置功能。元素將恢復到其初始化前的狀態。 |
| 2 | disable
此操作會停用可放置操作。元素不再是可放置元素。此方法不接受任何引數。 |
| 3 | enable
此操作會重新啟用可放置操作。元素可以再次接收可放置元素。此方法不接受任何引數。 |
| 4 | option
此操作獲取一個物件,其中包含表示當前可放置選項雜湊的鍵/值對。 |
| 5 | option( optionName )
此操作獲取當前與指定的`optionName`關聯的可放置元素的值。此操作接受一個字串值作為引數。 |
| 6 | option( optionName, value )
此操作設定與指定的`optionName`關聯的可放置選項的值。 |
| 7 | option( options )
此操作為可放置物件設定一個或多個選項。引數`options`是要設定的選項-值對的對映。 |
| 8 | widget
此操作返回一個包含可放置元素的 jQuery 物件。此方法不接受任何引數。 |
示例
現在讓我們看一個使用上表中操作的示例。以下示例演示了`destroy()` 方法的使用。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style>
.draggable-4 {
width: 90px; height: 50px; padding: 0.5em; float: left;
margin: 0px 5px 10px 0;
border: 1px solid red;
background-color:#B9CD6D;
}
.droppable-7 {
width: 100px; height: 90px;padding: 0.5em; float: left;
margin: 10px;
border: 1px solid black;
background-color:#A39480;
}
.droppable.active {
background-color: red;
}
</style>
<script>
$(function() {
$('.draggable-4').draggable({ revert: true });
$('.droppable-7').droppable({
hoverClass: 'active',
drop: function(e, ui) {
$(this).html(ui.draggable.remove().html());
$(this).droppable('destroy');
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "i'm destroyed!" );
}
});
});
</script>
</head>
<body>
<div class = "draggable-4"><p>drag 1</p></div>
<div class = "draggable-4"><p>drag 2</p></div>
<div class = "draggable-4"><p>drag 3</p></div>
<div style = "clear: both;padding:10px"></div>
<div class = "droppable-7">drop here</div>
<div class = "droppable-7">drop here</div>
<div class = "droppable-7">drop here</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出:
如果您將“drag1”放置在名為“drop here”的任何元素上,您會注意到此元素被放置,此操作會完全銷燬元素的可放置功能。您不能再次將“drag2”和“drag3”放置在此元素上。
可放置元素上的事件管理
除了我們在上一節中看到的 `droppable (options)` 方法外,jQuery UI 還提供了在特定事件觸發時觸發的事件方法。這些事件方法列在下面:
| 序號 | 事件方法及描述 |
|---|---|
| 1 | activate(event, ui)
當接受的可拖動元素開始拖動時,會觸發此事件。如果您想在可以將元素放置到可放置物件時使其“亮起”,這將非常有用。 |
| 2 | create(event, ui)
建立可放置元素時會觸發此事件。其中`event` 的型別為`Event`,`ui` 的型別為`Object`。 |
| 3 | deactivate(event, ui)
當接受的可拖動元素停止拖動時,會觸發此事件。其中`event` 的型別為`Event`,`ui` 的型別為`Object`。 |
| 4 | drop(event, ui)
當元素放置到可放置物件上時,會觸發此操作。這基於`tolerance` 選項。其中`event` 的型別為`Event`,`ui` 的型別為`Object`。 |
| 5 | out(event, ui)
當已接受的可拖動元素從可放置區域拖出時,將觸發此事件。這基於tolerance選項。其中event的型別為Event,ui的型別為Object。 |
| 6 | over(event, ui)
當已接受的可拖動元素拖過可放置區域時,將觸發此事件。這基於tolerance選項。其中event的型別為Event,ui的型別為Object。 |
示例
以下示例演示了拖放功能期間事件方法的使用。此示例演示了drop、over和out事件的使用。
<!doctype html>
<html lang = "en">
<head>
<meta charset = "utf-8">
<title>jQuery UI Droppable - Default functionality</title>
<link href = "https://code.jquery.com/ui/1.10.4/themes/ui-lightness/jquery-ui.css"
rel = "stylesheet">
<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>
<style>
#draggable-5 {
width: 100px; height: 50px; padding: 0.5em; float: left;
margin: 22px 5px 10px 0;
}
#droppable-8 {
width: 120px; height: 90px;padding: 0.5em; float: left;
margin: 10px;
}
</style>
<script>
$(function() {
$( "#draggable-5" ).draggable();
$("#droppable-8").droppable({
drop: function (event, ui) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "Dropped!" );
},
over: function (event, ui) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "moving in!" );
},
out: function (event, ui) {
$( this )
.addClass( "ui-state-highlight" )
.find( "p" )
.html( "moving out!" );
}
});
});
</script>
</head>
<body>
<div id = "draggable-5" class = "ui-widget-content">
<p>Drag me to my target</p>
</div>
<div id = "droppable-8" class = "ui-widget-header">
<p>Drop here</p>
</div>
</body>
</html>
讓我們將上述程式碼儲存在一個名為`dropexample.htm` 的 HTML 檔案中,並在支援 JavaScript 的標準瀏覽器中開啟它,您應該會看到以下輸出:
您會注意到,當您拖動元素時,可放置元素中的訊息是如何變化的。