me ocurrió con esta solución: http://jsfiddle.net/FabienDemangeat/TBYWw/
La idea es elegir el índice de la Elemento Li que se moverá y su destino. Si el valor de destino es inferior al índice del elemento li para mover, el efecto se invertirá.
Algunas piezas no son perfectas pero pueden ser un punto de partida.Me inspiré en el fragmento proporcionado por "Sin sorpresas"
La función principal swapLiElements
intercambia dos elementos li y la función de devolución de llamada como parámetros permite hacer más de un intercambio fácilmente (see fiddle).
function swapLiElements($northLi, $southLi, isPushingDown, duration, easing, callbackFunction) {
var movement = $northLi.outerHeight();
// Set position of the li elements to relative
$northLi.css('position', 'relative');
$southLi.css('position', 'relative');
// Set the z-index of the moved item to 999 to it appears on top of the other elements
if(isPushingDown)
$northLi.css('z-index', '999');
else
$southLi.css('z-index', '999');
// Move down the first li
$northLi.animate({'top': movement}, {
duration: duration,
queue: false,
easing: easing,
complete: function() {
// Swap the li in the DOM
if(isPushingDown)
$northLi.insertAfter($southLi);
else
$southLi.insertBefore($northLi);
resetLiCssPosition($northLi);
resetLiCssPosition($southLi);
callbackFunction();
}
});
$southLi.animate({'top': -movement}, {
duration: duration,
queue: false,
easing: easing,
});
}
Guau, que parece muy interesante, definitivamente voy a probar esto. Votado! – Fabian
¿Hay alguna versión que mueva los elementos li por uno? – crosenblum