jQuery UI: Interaction Plugins
In this post
you will learn all about jQuery UI’s Interaction Plugins. You can find all the available
plugins on the official website here http://jqueryui.com/.
For now, there is only 5 Plugins available in Interaction section that is Draggable,
Droppable, Resizable, Selectable and Sortable. Interaction Plugins handles complex
behaviors like drag and drop, resizing, selection and sorting.
Graphical
representation of jQuery UI subordinates:
In the above image, I have highlighted the jQuery UI
Interaction Plugins in rectangular region and in this post we will cover all of
them.
You need to setup a demo project to learn Interaction
Plugins, please read this post
as this post will guide you how to setup the demo project for jQuery UI.
Draggable
It enables draggable functionality on any DOM element.
Move the draggable object by clicking on it with the mouse and dragging it
anywhere within the viewport.
Let’s create a demonstration page:
In above code, I have a <div> by id
‘draggableDIV’ and it has a button. Remember we can’t drag button control
directly because it holds click event by default; we need to do some extra work
for this. But if you place button inside <div> tag then you can drag it
easily. And the same, I have a label control by id ‘draggableLabel’.
In above jQuery methods, $(“draggableDIV”).draggable()
will enable the drag feature in <div> tag. And the same
$(“draggableLabel”).draggable() will enable the drag feature in Label control.
If you look at
the output screen in browser given below, think we have not applied any
<div> background color instead of width, height and padding but still you
can see the color. Why? This is because; remember in last post here, we were
selected theme option to download jQuery UI Library. So, in <div> tag you
can see class attribute that is ‘ui-widget-content’ and this style rule is
defined in file ‘jquery-ui-1.8.21.custom.css’.
Open the code in browser to see draggable in action.
Droppable
It enables any DOM element to be droppable, a target
for draggable elements.
Let’s create a demonstration page:
Frist of all let’s look at the applied styles and then
we’ll talk on jQuery methods:
#draggable { width: 100px; height: 100px; padding: 0.5em; float: left; margin: 10px 10px 10px 0; }
#droppable { width: 150px; height: 150px; padding: 0.5em; float: left; margin: 10px; }
Just applying the styles width, height, padding, float
and margin to both <div>’s.
$(function () {
$("#draggable").draggable();
$("#droppable").droppable({
drop: function (event, ui) {
$(this)
.addClass("ui-state-highlight")
.find("p")
.html("Dropped!");
}
});
});
The very first line of the method is simple; it will
add draggable feature to <div> which has id = ‘draggable’. The second
method is bit fancy, adding the droppable feature to <div> which has id =
‘droppable’.
All callbacks receive two arguments: The original
browser event and a prepared ui object, view below for a documentation of this
object (if you name your second argument 'ui'):
ui.draggable - current draggable element, a jQuery
object.
ui.helper - current draggable helper, a jQuery object
ui.position - current position of the draggable helper
{ top: , left: }
ui.offset - current absolute position of the draggable
helper { top: , left: }
See the page in action.
Let’s assume if you want multiple draggable elements
on the page, then you can use following coding.
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Multiple Draggable</title>
<link type="text/css" href="Scripts/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="Scripts/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
#draggable-1 {
background-color:#CCC;
width: 100px;
height: 100px;
padding: 0.5em;
float: left;
margin: 10px 10px 10px 0;
}
#draggable-2 {
background-color:#E34E47;
width: 100px;
height: 100px;
padding: 0.5em;
float: left;
margin: 10px 10px 10px 0;
}
#droppable {
background-color:#0F0;
width: 150px;
height: 150px;
padding: 0.5em;
float: left;
margin: 10px;
}
</style>
<script type="text/javascript">
$(function () {
$("#draggable-1").draggable();
$("#draggable-2").draggable();
$("#droppable").droppable({
drop: function (event, ui) {
var currentId =
$(ui.draggable).attr('id');
if (currentId == "draggable-1") {
$(this)
window.location = "http://www.itorian.com/search/label/jQuery"
alert("You
are going to learn jQuery.")
} else {
$(this)
window.location = "http://www.itorian.com/search/label/ASP.NET"
alert("You
are going to learn ASP.NET.")
}
}
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="draggable-1">
<p>Let's go to learn jQuery.</p>
</div>
<div id="draggable-2">
<p>Let's go to learn ASP.NET.</p>
</div>
<div id="droppable">
<p>Please come, i'll teach you.</p>
</div>
</form>
</body>
</html>
See the page in action.
Read more about droppable options, events and methods here.
Resizable
It enables any DOM element to be resizable. With the
cursor grab the right or bottom border and drag to the desired width or height.
Let’s create a demonstration page:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>One Draggable</title>
<link type="text/css" href="Scripts/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="Scripts/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
#resizable { width: 150px; height: 150px; padding: 0.5em; }
#resizable h3 { text-align: center; margin: 0; }
</style>
<script type="text/javascript">
$(function () {
$("#resizable").resizable();
});
</script>
</head>
<body>
<form id="form1" runat="server">
<div id="resizable" class="ui-widget-content">
<h3 class="ui-widget-header">Resizable</h3>
</div>
</form>
</body>
</html>
Nothing new here, let’s look it in bowser.
Selectable
It enables a DOM element (or group of elements) to be
selectable. Draw a box with your cursor to select items. Hold down the Ctrl key
to make multiple non-adjacent selections.
Let’s create a demonstration page:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>One Draggable</title>
<link type="text/css" href="Scripts/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="Scripts/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
#feedback {
font-size: 1.4em; }
#selectable .ui-selecting { background: #FECA40; }
#selectable .ui-selected { background: #F39814; color: white; }
#selectable {
list-style-type: none; margin: 0; padding: 0; width: 60%; }
#selectable li { margin: 3px; padding: 0.4em; font-size: 1.4em; height: 18px; }
</style>
<script type="text/javascript">
$(function
() {
$("#selectable").selectable();
});
</script>
</head>
<body>
<form id="form1" runat="server">
<ol id="selectable">
<li class="ui-widget-content">Item 1</li>
<li class="ui-widget-content">Item 2</li>
<li class="ui-widget-content">Item 3</li>
<li class="ui-widget-content">Item 4</li>
<li class="ui-widget-content">Item 5</li>
<li class="ui-widget-content">Item 6</li>
<li class="ui-widget-content">Item 7</li>
</ol>
</form>
</body>
</html>
The jQuery UI Selectable plugin allows for elements to
be selected by dragging a box (sometimes called a lasso) with the mouse over
the elements. Also, elements can be selected by click or drag while holding the
Ctrl/Meta key, allowing for multiple (non-contiguous) selections. Let’s look it
in bowser.
Sortable
It enables a group of DOM elements to be sortable.
Click on and drag an element to a new spot within the list, and the other items
will adjust to fit. By default, sortable items share draggable properties.
Let’s create a demonstration page:
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
<title>One Draggable</title>
<link type="text/css" href="Scripts/css/ui-lightness/jquery-ui-1.8.20.custom.css" rel="Stylesheet" />
<script type="text/javascript" src="Scripts/js/jquery-1.7.2.min.js"></script>
<script type="text/javascript" src="Scripts/js/jquery-ui-1.8.20.custom.min.js"></script>
<style type="text/css">
#sortable {
list-style-type: none; margin: 0; padding: 0; width: 60%; }
#sortable li { margin: 0 3px 3px 3px; padding: 0.4em; padding-left: 1.5em; font-size: 1.4em; height: 18px; }
#sortable li span { position: absolute; margin-left: -1.3em; }
</style>
<script type="text/javascript">
$(function
() {
$("#sortable").sortable();
$("#sortable").disableSelection();
});
</script>
</head>
<body>
<form id="form1" runat="server">
<ul id="sortable">
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 1</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 2</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 3</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 4</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 5</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 6</li>
<li class="ui-state-default"><span class="ui-icon
ui-icon-arrowthick-2-n-s"></span>Item 7</li>
</ul>
</form>
</body>
</html>
The jQuery UI Sortable plugin makes selected elements
sortable by dragging with the mouse. All callbacks receive two arguments: The
original browser event and a prepared ui object, view below for a documentation
of this object (if you name your second argument 'ui'):-
ui.helper - the current helper element (most often a
clone of the item)
ui.position - current position of the helper
ui.offset - current absolute position of the helper
ui.item - the current dragged element
ui.placeholder - the placeholder (if you defined one)
ui.sender - the sortable where the item comes from
(only exists if you move from one connected list to another)
Let’s look it in bowser.
I hope you like it. Thanks.
UL LI multiple selection and drag/drop is working fine but I need a solution for multiple TR selection and drag and drop. can you provide me a solution for that.
ReplyDelete