JqueryUI - Droppable

jQueryUI提供 droppable()方法,使任何DOM元素都可以在指定目标(可拖动元素的目标)上删除.

语法

droppable()方法可用于两种形式 :

  • $(selector, context).droppable (options) 方法

  • $(selector, context).droppable ("action", params) 方法


$(selector, context).droppable (options)方法

droppable(options)方法声明可以将HTML元素用作可以删除其他元素的元素. options 参数是一个对象,它指定所涉及元素的行为.

语法

$(selector, context).droppable (options);


您可以使用Javascript对象一次提供一个或多个选项.如果要提供多个选项,则使用逗号分隔它们,如下所示;

$(selector, context).droppable({option1: value1, option2: value2..... });


下表列出了可与此方法一起使用的不同选项 :

Sr.No.选项&安培;描述
1accept
当您需要控制哪些可拖动元素可以被删除时,使用此选项.默认情况下,其值为 * .

选项 - 接受

当您需要控制哪些可拖动元素时,使用此选项被接受放弃.默认情况下,其值为 * ,表示droppable接受每个项目.

这可以是 :

  • Function : 此类型表示接受哪些可拖动元素.

  • 功能 : 将为页面上的每个可拖动元素调用回调函数.如果droppable接受了可拖动元素,则此函数应返回 true .

语法

$( ".selector" ).droppable(
   { accept: ".special" }
);
2activeClass

此选项是一个String,表示在拖动一个接受的元素( options.accept 中指定的元素之一)时要添加到droppable元素的一个或多个CSS类.默认情况下,其值为 false .

选项 -  activeClass

此选项是一个String,表示在拖动一个接受的元素( options.accept 中指定的元素之一)时要添加到droppable元素的一个或多个CSS类.默认情况下,其值为 false .

语法

$( ".selector" ).droppable(
   { activeClass: "ui-state-highlight" }
);
3addClasses

当设置为 false 时,此选项将阻止将 ui-droppable 类添加到droppable元素.默认情况下,其值为 true .

选项 -  addClasses

设置为 false 时,此选项将阻止将 ui-droppable 类添加到droppable元素中.默认情况下,其值为 true .在数百个元素上调用 .droppable() init时,可能需要将其作为性能优化.

语法

$( ".selector" ).droppable(
   { addClasses: false }
);
4disabled

此选项设置为 true 时会禁用droppable.默认情况下,其值为 false .

选项 - 已停用

此选项设置为 true 时会禁用droppable,即禁用项目在指定元素上的移动以及删除这些元素.默认情况下,其值为 false .

语法

$( ".selector" ).droppable(
   { disabled: true }
);
5greedy

当您需要控制哪些可拖动元素可以放置在嵌套的droppable上时,可以使用此选项.默认情况下,其值为 false .如果此选项设置为 true ,则任何父级droppables都不会收到该元素.

选项 - 贪婪

当您需要控制哪些可拖动元素可以放置在嵌套的droppable上时,可以使用此选项.默认情况下,其值为 false .如果此选项设置为 true ,则任何父级droppables都不会收到该元素.

语法

$( ".selector" ).droppable(
   { greedy: true }
);
6hoverClass

此选项是 String ,表示当接受的元素( options.accept 中指示的元素)进入时,要添加到droppable元素的一个或多个CSS类它.默认情况下,其值为 false .

选项 -  hoverClass

此选项是 String ,表示当接受的元素( options.accept 中指示的元素)移动时,要添加到droppable元素的一个或多个CSS类进去.默认情况下,其值为 false .

语法

$( ".selector" ).droppable(
   { hoverClass: "drop-hover" }
);
7scope

此选项用于将可拖动元素的可放置操作仅限制为具有相同 options.scope (在draggable(options)中定义)的项目.默认情况下,其值为"默认".

选项 - 范围

此选项用于将可拖动元素的可放置操作仅限制为具有相同 options.scope (在draggable(options)中定义)的项目.默认情况下,其值为"默认".

语法

$( ".selector" ).droppable(
   { scope: "tasks" }
);
8tolerance

此选项是一个 String ,它指定用于测试拖动器是否悬停在droppable上的模式.默认情况下,其值为"相交".

选项 - 容差

此选项是 String ,它指定可拖动元素应如何覆盖正在接受的放置的droppable元素.默认情况下,其值为"相交".可能的值为 :

  • fit :  Draggable完全覆盖了droppable元素.

  • intersect :  Draggable在两个方向上至少50%与可放置元素重叠.

  • pointer : 鼠标指针与可放置元素重叠.

  • touch : 可拖动重叠可放置任何数量的触摸.

语法

$( ".selector" ).droppable(
   { tolerance: "fit" }
);

以下部分将向您展示一些丢弃功能的工作示例.

默认功能

以下示例演示了一个可放置功能的简单示例,没有参数 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>


让我们将上述代码保存在HTML文件 dropexample.htm 中,并在支持javascript的标准浏览器中打开它,你应该看到以下输出.现在,您可以使用结果 :

使用addClass,禁用和容差

以下示例演示了三个选项的使用(a)addClass(b)禁用和(c)JqueryUI的drop函数中的容差。

<!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>

让我们将上述代码保存在HTML文件dropexample.htm中,并在支持javascript的标准浏览器中打开它,您应该看到以下输出。 现在,你可以玩结果

现在将元素放在"Tolerance Touch"上! 框(只需触摸此框的边缘)并查看目标元素的更改。 现在将元素放在"Tolerance Fit!"上 目标,可拖动元素必须与目标元素完全重叠,即"Tolerance Fit!" 目标。

选择要删除的元素

以下示例演示了在JqueryUI的drag函数中使用选项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>

让我们将上述代码保存在HTML文件dropexample.htm中,并在支持javascript的标准浏览器中打开它,您应该看到以下输出。 现在你可以玩输出

在这里你可以看到你可以在"日本"目标和元素"来自印度的人"的目标印度上放弃元素"来自日本的人"。 类似"想要学习Java的人"的范围设置为"Java","想要学习Spring的人"设置为"Spring目标"。

管理外观

以下示例演示了如何使用JqueryUI类的选项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>

让我们将上面的代码保存在HTML文件dropexample.htm中,并在支持javascript的标准浏览器中打开它,你应该看到以下输出

您可以注意到,在"拖动我的目标"元素的拖动或悬停(在目标上)时,更改目标元素"Drop here"的颜色。


$ (selector, context).droppable ("action", params) 函数

droppable("action",params)方法可以对可放置元素执行操作,例如防止可放置的功能。 该动作在第一个参数中被指定为一个字符串(例如,"禁用"以防止丢弃)。 请查看下表中可以传递的操作。

语法

$(selector, context).droppable("action", params);

下表列出了可以与此方法一起使用的不同操作 :

Sr.No.Action & Description
1destroy

此操作完全破坏元素的可放置功能。 元素返回到pre-init状态。

Action - destroy

此操作完全破坏元素的可放置功能。 元素返回到pre-init状态。

Syntax

$( ".selector" ).droppable("destroy");
2disable

此操作将禁用可放置操作。 元素不再是可放置的元素。 此方法不接受任何参数。

Action - disable

此操作将禁用可放置操作。 元素不再是可放置的元素。 此方法不接受任何参数。

Syntax

$( ".selector" ).droppable("disable");
3enable

此操作将重新激活可放置操作。 元素可以再次接收可放置的元素。 此方法不接受任何参数。

Action - enable

此操作将重新激活可放置操作。 元素可以再次接收可放置的元素。 此方法不接受任何参数。

Syntax

$( ".selector" ).droppable("enable");
4option

此操作获取一个对象,该对象包含表示当前可放置选项哈希的键/值对。 此方法不接受任何参数。

Action - option

此操作获取一个对象,该对象包含表示当前可放置选项哈希的键/值对。 此方法不接受任何参数。

Syntax

var options = $( ".selector" ).droppable( "option" );
5option( optionName )

此操作使用指定的optionName获取当前关联的droppable元素的值。 这将String值作为参数。

Action - option( optionName )

此操作使用指定的optionName获取当前关联的droppable元素的值。 这将String值作为参数。

Syntax

var isDisabled = $( ".selector" ).droppable( "option", "disabled" );
6option( optionName, value )

此操作设置与指定的optionName关联的droppable选项的值。

Action - option( optionName, value )

此操作设置与指定的optionName关联的droppable选项的值。 参数optionName是要设置的选项的名称,value是要为该选项设置的值。

Syntax

$( ".selector" ).droppable( "option", "disabled", true );
7option( options )

此操作为droppable设置一个或多个选项。 参数选项是要设置的选项 - 值对的映射。

Action - option( options )

此操作为droppable设置一个或多个选项。 参数选项是要设置的选项 - 值对的映射。

Syntax

$( ".selector" ).droppable( "option", { disabled: true } );
8widget

此操作返回包含droppable元素的jQuery对象。 此方法不接受任何参数。

Syntax

var widget = $( ".selector" ).droppable( "widget" );

示例

现在让我们看一个使用上表中的操作的示例。 以下示例演示了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>

让我们将上面的代码保存在HTML文件dropexample.htm中,并在支持javascript的标准浏览器中打开它,你应该看到以下输出

如果在任何名为"drop here"的元素上删除"drag1",您会注意到此元素被删除,此操作会完全破坏元素的可放置功能。 你不能再次在这个元素上删除"drag2"和"drag3"。

可放置元素的事件管理

除了我们在前面部分中看到的droppable(options)方法之外,JqueryUI还提供了针对特定事件触发的事件方法。 这些事件方法如下所列:

Sr.No.Event Method & Description
1activate(event, ui)

当接受的可拖动元素开始拖动时,将触发此事件。 如果您想在可以放置的情况下使droppable"亮起",这将非常有用。

Event - activate(event, ui)

当接受的可拖动元素开始拖动时,将触发此事件。 如果您想在可以放置的情况下使droppable"亮起",这将非常有用。 其中event是Event类型,ui是Object类型。 ui的可能值是

  • draggable : 表示可拖动元素的jQuery对象。

  • helper : 表示正在拖动的帮助程序的jQuery对象。

  • position : 可拖动助手的当前CSS位置为{top,left}对象。

  • offset : 可拖动助手的当前偏移位置为{top,left}对象。

Syntax

$( ".selector" ).droppable({
   activate: function( event, ui ) {}
});
2create(event, ui)

创建可放置元素时会触发此事件。 其中event是Event类型,ui是Object类型。

Event - create(event, ui)

创建可放置元素时会触发此事件。 其中event是Event类型,ui是Object类型。

Syntax

$( ".selector" ).droppable({
   create: function( event, ui ) {}
});
3deactivate(event, ui)

当已接受的可拖动停止拖动时,将触发此事件。 其中event是Event类型,ui是Object类型。

Event - deactivate(event, ui)

当已接受的可拖动停止拖动时,将触发此事件。 其中event是Event类型,ui是Object类型

  • draggable : 表示可拖动元素的jQuery对象。

  • helper : 表示正在拖动的帮助程序的jQuery对象。

  • position : 可拖动助手的当前CSS位置为{top,left}对象。

  • offset : 可拖动助手的当前偏移位置为{top,left}对象。

Syntax

$(".selector").droppable(
   deactivate: function(event, ui) {}
);
4drop(event, ui)

在droppable上放置元素时会触发此操作。 这基于容差选项。 其中event是Event类型,ui是Object类型。

Event - drop(event, ui)

在droppable上放置元素时会触发此操作。 这基于容差选项。 其中event是Event类型,ui是Object类型,可能的类型是:

  • draggable : 表示可拖动元素的jQuery对象。

  • helper : 表示正在拖动的帮助程序的jQuery对象。

  • position : 可拖动助手的当前CSS位置为{top,left}对象。

  • offset : 可拖动助手的当前偏移位置为{top,left}对象。

Syntax

$(".selector").droppable(
   drop: function(event, ui) {}
);
5out(event, ui)

T当已接受的可拖动元素被拖出droppable时,将触发他的事件。 这基于容差选项。 其中event是Event类型,ui是Object类型。

Event - out(event, ui)

当已接受的可拖动元素被拖出droppable时,将触发他的事件。 这基于容差选项。 其中event是Event类型,ui是Object类型。

Syntax

$(".selector").droppable(
   out: function(event, ui) {}
);
6over(event, ui)

将可接受的可拖动元素拖过droppable时会触发此事件。 这基于容差选项。 其中event是Event类型,ui是Object类型。

Event - over(event, ui)

将可接受的可拖动元素拖过droppable时会触发此事件。 这基于容差选项。 其中event是Event类型,ui是Object类型,可能的类型是 :

  • draggable : 表示可拖动元素的jQuery对象。

  • helper : 表示正在拖动的帮助程序的jQuery对象。

  • position : 可拖动助手的当前CSS位置为{top,left}对象。

  • offset : 可拖动助手的当前偏移位置为{top,left}对象。

Syntax

$(".selector").droppable(
   over: function(event, ui) {}
);

示例

以下示例演示了删除功能期间的事件方法用法。 此示例演示了事件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>

让我们将上面的代码保存在HTML文件dropexample.htm中,并在支持javascript的标准浏览器中打开它,你应该看到以下输出

在这里,您将注意到在拖动元素时droppable元素中的消息如何变化。