This example makes multiple sortable lists that are separate from one another and do not interact with each other.
First we need to create the HTML structure for the lists. Since Sortable
uses Y.DD.Delegate
, we need to set up the delegation containers (#list1, #lists2
) and the list items (li
).
<div id="demo" class="yui3-g"> <div class="yui3-u-1-2"> <h4 class="no-toc">List 1</h4> <ul id="list1"> <li class="one">1</li> <li class="one">2</li> <li class="one">3</li> <li class="one">4</li> <li class="one">5</li> <li class="one">6</li> <li class="one">7</li> <li class="one">8</li> <li class="one">9</li> <li class="one">10</li> </ul> </div> <div class="yui3-u-1-2"> <h4 class="no-toc">List 2</h4> <ul id="list2"> <li class="two">A</li> <li class="two">B</li> <li class="two">C</li> <li class="two">D</li> <li class="two">E</li> <li class="two">F</li> <li class="two">G</li> <li class="two">H</li> <li class="two">I</li> <li class="two">J</li> </ul> </div> </div>
Now we give the lists some CSS to make them visible.
#demo h4 { margin: 10px auto; width: 165px; text-align: center; } #demo ul { margin: 0 auto; width: 165px; padding: 0; } #demo li { list-style-type: none; padding: 3px; width: 150px; margin: 6px; font-size: 114%; -moz-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.25); -webkit-box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.25); box-shadow: 3px 3px 5px rgba(0, 0, 0, 0.25); cursor: move; } #demo li.one { background-color: #B6BFDA; border: 1px solid #7E869D; } #demo li.two { background-color: #F2C89F; border: 1px solid #B19C87; text-align: center; }
Now we need to create our YUI instance and tell it to load the sortable
module.
In this example we are also going to attach a DD
plugin to the Sortable
instances.
YUI().use('dd-constrain', 'sortable', function (Y) { // Code here. });
Now that we have a YUI instance with the sortable
module, we need to instantiate a Sortable
instance on each of the lists.
YUI().use('dd-constrain', 'sortable', function(Y) { var list1 = new Y.Sortable({ container: '#list1', nodes: 'li', opacity: '.1' }); var list2 = new Y.Sortable({ container: '#list2', nodes: 'li', opacity: '.1' }); });
Since Sortable
uses DD.Delegate
, there is a dd instance available after instantiation.
The DD.Delegate
reference is found on the .delegate
property of the Sortable
.
This DD.Delegate
instance has a DD.Drag
instance bound to the dd
property on the DD.Delegate
list1.delegate.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#demo' }); list2.delegate.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#demo' });
Applying the Plugin.DDConstrained
to the Sortable
instance.
YUI().use('dd-constrain', 'sortable', function(Y) { var list1 = new Y.Sortable({ container: '#list1', nodes: 'li', opacity: '.1' }); var list2 = new Y.Sortable({ container: '#list2', nodes: 'li', opacity: '.1' }); list1.delegate.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#demo' }); list2.delegate.dd.plug(Y.Plugin.DDConstrained, { constrain2node: '#demo' }); });