forked from madrobby/scriptaculous
-
Notifications
You must be signed in to change notification settings - Fork 0
Droppables
joe-loco edited this page Sep 12, 2010
·
11 revisions
Behaviours > Droppables
To make an element react when a Draggable is dropped onto it, you’ll add it to the Droppables of the page with the Droppables.add
class method.
Droppables.add('id_of_element',[options]);
Options | Description |
---|---|
accept | Set accept to a string or an array of strings describing CSS classes. The Droppable will only accept Draggables that have one or more of these CSS classes. |
containment | The droppable will only accept the Draggable if the Draggable is contained in the given elements (or element ids). Can be a single element or an array of elements. This option is used by Sortables to control Drag-and-Drop between Sortables. |
hoverclass | if set, the Droppable will have this additional CSS class when an accepted Draggable is hovered over it. |
overlap | If set to ‘horizontal’ or ‘vertical’ the droppable will only react to a Draggable if its overlapping by more than 50% in the given direction. Used by Sortables. |
greedy | boolean, defaults to true , stops processing hovering (don’t look for other Droppables that are under the Draggable) |
Callback | Description |
---|---|
onHover | Called whenever a Draggable is moved over the Droppable and the Droppable is affected (would accept it). The callback gets three parameters: the Draggable, the Droppable element, and the percentage of overlapping as defined by the overlap option. Used by Sortables. |
onDrop | Called whenever a Draggable is released over the Droppable and the Droppable is accepts it. The callback gets three parameters: the Draggable element, the Droppable element and the Event. You can extract additional information about the drop – like if the Ctrl or Shift keys were pressed – from the Event object. |
Droppables.add('shopping_card', {
accept: 'products',
onDrop: function(element) {
$('shopping_cart_text').update('Dropped the ' + element.alt + ' on me.');
}
});
When you delete a Node in the HTML Code that was droppable you will not be able to use any draggable Element. Before you delete a droppable element be sure to remove it first from the Droppables list:
Droppables.remove(element);
If you’re adding droppable elements that have other droppable elements inside of them, make sure that you add the droppables in reverse order of the nesting (i.e. most inner droppable first, then second most inner droppable second).
For example you have a nested list:
<ul>
<li>Parent
<ul>
<li>Child 1</li>
<li>Child 2</li>
<li>Child 3</li>
</ul>
</li>
</ul>
Make sure that the children get defined as droppables before the parent is.
Drag me!
Drop here!
<style type="text/css">
div#droppable_container { height:140px; width: 400px; }
div#draggable_demo { width:60px; height:60px; cursor:move; background:#9fcfba; border:1px solid #666; text-align:center; position:relative; top:30px; line-height:50px; }
div#droppable_demo { width:160px; height:120px; background:#ffffff; border:5px solid #ccc; text-align:center; position:relative; top:-60px; left:140px; line-height:100px; }
div#droppable_demo.hover { border:5px dashed #aaa; background:#efefef; }
</style>
<div class="demo" id="droppable_container">
<div id="draggable_demo" class="draggable">
Drag me!
</div>
<div id="droppable_demo">
Drop here!
</div>
</div>
<script type="text/javascript">
new Draggable('draggable_demo', {
revert: true
});
Droppables.add('droppable_demo', {
accept: 'draggable',
hoverclass: 'hover',
onDrop: function() { $('droppable_demo').highlight(); }
});
</script>