On a long panel of 120 images (130x130px) with iosslider to give give it touch swiping sliding. i'm using jQuery quicksand to sort a collection of blocks that are in columns of 4. So i need to clone them, extract the item blocks, sort them and add them back into columns (panel) again.
<div id="tiles_viewport">
<div id="mouseSwipeScroll">
<div class="panel">
<div class="item" data-id="1" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="2" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="3" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="4" data-state="0"><img src="xxx" /></div>
</div>
<div class="panel">
<div class="item" data-id="5" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="6" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="7" data-state="1"><img src="xxx" /></div>
<div class="item" data-id="8" data-state="0"><img src="xxx" /></div>
</div>
<div class="panel">...
CSS...
#tiles_viewport {
position: relative;
top: 0;
left: 0;
width: 100%;
height: 535px;
margin: 5px 0;
padding: 0;
overflow: hidden;
z-index: 10;
}
#mouseSwipeScroll {
-webkit-user-select: none;
-moz-user-select: none;
position: relative;
margin: 0;
padding: 0;
width: 100%;
height: 100%;
}
#mouseSwipeScroll .panel {
float: left;
margin: 0;
padding: 0;
width: 130px;
height: 535px;
overflow: hidden;
}
#mouseSwipeScroll .panel .item {
position: relative;
margin: 0;
padding: 0 5px 5px 5px;
width: 120px;
height: 130px;
}
Javascript:
$(function() {
sortTiles = function() {
var panels = $('.panel');
var items = $(panels).children('.item');
var sortedItems = $(items).clone();
// sort //
sortedItems.sort(function(a, b) {
return parseInt($(b).data('state')) - parseInt($(a).data('state'));
});
// wrap into panels again //
$.each(sortedItems, function(i, el) {
if(i % 4 == 0) {
sortedItems.slice(i , i+4).wrapAll('<div class="panel">');
}
});
// animate //
$(panels).quicksand(sortedItems, {
duration: 800,
easing: 'easeInOutQuad'
});
}
});
$(document).ready(function() {
$('#tiles_viewport').iosSlider({
snapToChildren: true,
desktopClickDrag: true,
startAtSlide: 4
});
});
The sort isn't working, and also wrapAll doesn't add the enclosing panel div. been looking at this for quite some time, so would be great for some advice.
many thanks,
rob.
The flaw in your code is
sort()
only sorts the jQuery object but it doesn't change the DOM. Following simply adds one line to empty the existing content and changes thewrapAll
concept to creating a new div and immediately inserting it into the DOMDEMO: http://jsfiddle.net/yMtwp/