Flexible jQuery Drag and Drop Sorting Plugin - Sortable
| File Size: | 104 KB |
|---|---|
| Views Total: | 9744 |
| Last Update: | |
| Publish Date: | |
| Official Website: | Go to website |
| License: | MIT |
Sortable is a jQuery based plugin that allows you to drag and drop any items to sort them in any contains.
You might also like:
- Html Elements Sorting and Filtering Plugin - List.js
- Sortable Lists and Grids with jQuery & HTML5 - html5sortable
- Animated Table Sorting Plugin For jQuery
- Flexible Client-Side Table Sorting Plugin - tablesorter
Features:
- Drop animation support
- Nested containers support
- Current container highlighting support
Basic Usage:
1. Include jQuery library and jQuery.Sortable on your web page
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> <script src='source/js/jquery-sortable.js'></script>
2. Markup
<ul class='example'> <li>First</li> <li>Second</li> <li>Third</li> </ul>
3. The CSS
body.dragging, body.dragging * {
cursor: move !important;
}
.dragged {
position: absolute;
opacity: 0.5;
z-index: 2000;
}
ul.example li.placeholder {
position: relative;/** More li styles **/
}
ul.example li.placeholder:before {
position: absolute;/** Define arrowhead **/
}
4. Call the plugin
$(function () {
$("ul.example").sortable()
})
5. Container options with defaults.
// If true, items can be dragged from this container drag: true, // If true, items can be droped onto this container drop: true, // Exclude items from being draggable, if the // selector matches the item exclude: "", // If true, search for nested containers within an item.If you nest containers, // either the original selector with which you call the plugin must only match the top containers, // or you need to specify a group (see the bootstrap nav example) nested: true, // If true, the items are assumed to be arranged vertically vertical: true
6. Group options with defaults.
// This is executed after the placeholder has been moved.
// $closestItemOrContainer contains the closest item, the placeholder
// has been put at or the closest empty Container, the placeholder has
// been appended to.
afterMove: function ($placeholder, container, $closestItemOrContainer) {
},
// The exact css path between the container and its items, e.g. "> tbody"
containerPath: "",
// The css selector of the containers
containerSelector: "ol, ul",
// Distance the mouse has to travel to start dragging
distance: 0,
// Time in milliseconds after mousedown until dragging should start.
// This option can be used to prevent unwanted drags when clicking on an element.
delay: 0,
// The css selector of the drag handle
handle: "",
// The exact css path between the item and its subcontainers.
// It should only match the immediate items of a container.
// No item of a subcontainer should be matched. E.g. for ol>div>li the itemPath is "> div"
itemPath: "",
// The css selector of the items
itemSelector: "li",
// The class given to "body" while an item is being dragged
bodyClass: "dragging",
// The class giving to an item while being dragged
draggedClass: "dragged",
// Check if the dragged item may be inside the container.
// Use with care, since the search for a valid container entails a depth first search
// and may be quite expensive.
isValidTarget: function ($item, container) {
return true
},
// Executed before onDrop if placeholder is detached.
// This happens if pullPlaceholder is set to false and the drop occurs outside a container.
onCancel: function ($item, container, _super, event) {
},
// Executed at the beginning of a mouse move event.
// The Placeholder has not been moved yet.
onDrag: function ($item, position, _super, event) {
$item.css(position)
},
// Called after the drag has been started,
// that is the mouse button is being held down and
// the mouse is moving.
// The container is the closest initialized container.
// Therefore it might not be the container, that actually contains the item.
onDragStart: function ($item, container, _super, event) {
$item.css({
height: $item.outerHeight(),
width: $item.outerWidth()
})
$item.addClass(container.group.options.draggedClass)
$("body").addClass(container.group.options.bodyClass)
},
// Called when the mouse button is being released
onDrop: function ($item, container, _super, event) {
$item.removeClass(container.group.options.draggedClass).removeAttr("style")
$("body").removeClass(container.group.options.bodyClass)
},
// Called on mousedown. If falsy value is returned, the dragging will not start.
// Ignore if element clicked is input, select or textarea
onMousedown: function ($item, _super, event) {
if (!event.target.nodeName.match(/^(input|select|textarea)$/i)) {
event.preventDefault()
return true
}
},
// The class of the placeholder (must match placeholder option markup)
placeholderClass: "placeholder",
// Template for the placeholder. Can be any valid jQuery input
// e.g. a string, a DOM element.
// The placeholder must have the class "placeholder"
placeholder: '<li class="placeholder"></li>',
// If true, the position of the placeholder is calculated on every mousemove.
// If false, it is only calculated when the mouse is above a container.
pullPlaceholder: true,
// Specifies serialization of the container group.
// The pair $parent/$children is either container/items or item/subcontainers.
serialize: function ($parent, $children, parentIsContainer) {
var result = $.extend({}, $parent.data())
if(parentIsContainer)
return [$children]
else if ($children[0]){
result.children = $children
}
delete result.subContainers
delete result.sortable
return result
},
// Set tolerance while dragging. Positive values decrease sensitivity,
// negative values increase it.
tolerance: 0
7. Public methods.
// Enable all instantiated sortables in the set of matched elements
.sortable("enable")
// Disable all instantiated sortables in the set of matched elements
.sortable("disable")
// Reset all cached element dimensions
.sortable("refresh")
// Remove the sortable plugin from the set of matched elements
.sortable("destroy")
// Serialize all selected containers.
// Returns a jQuery object .
// Use .get() to retrieve the array, if needed.
.sortable("serialize")
Change log:
v0.9.13 (2014-06-28)
- fix hovering over empty container
- allow custom drag classes
- support text areas inside sortables
- fix drag with placeholder issue
- user outer dimensions for dragged item
- support npm and bower
- fix issue with legacy jQuery 1.10
- fix for mobile chrome
v0.9.12 (2014-04-20)
- expose mouse events in callbacks
- add refresh method
- add destroy method
- add delay option
- falsy return value in onMousedown prevents dragging
- fix exclusion of items
- fix ignore for select element (abixalmon)
- fix touch events (prateekjadhwani)
- fix itemPath issues (appending and dragInit)
- improve documentation
v0.9.11 (2013-07-16)
- option tolerance accepts negative values
- rewrote enable/disable logic
- added (item|container)Path
This awesome jQuery plugin is developed by johnny. For more Advanced Usages, please check the demo page or visit the official website.










