Désolé les gars .. avaient pas le temps d'expliquer davantage, puisque nous étions près de impasse. Voici ce que j'utilise:
Il ya trois divs avec la classe '.groupWrapper', #listaUno #listaDos #listaInicial. Il existe deux types de modules div, tous flottants à gauche, avec des largeurs fondamentalement différentes, 167x159 et 342x159, et les conteneurs #listaUno ont une largeur de 346px (peut contenir deux petits modules ou un grand), tandis que #listaDos a 690px (jusqu'à quatre petits modules).
En utilisant Sortables de la jQuery-UI ..
$(document).ready(function(){
//change png to gif for IE as its very jumpy
if ($.browser.msie) {
$("img.iconico").attr("src", function() {
valor = this.src.replace(".png",".gif");
return valor;
});
}
//all three groupWrapper div elements are now draggable
$(".groupWrapper").sortable({
connectWith: '.groupWrapper',
items: 'div',
scroll: true,
opacity: 0.6,
receive: function(event, ui) { hemosCambiado(); }
});
$(".groupWrapper").disableSelection();
});
function init() {
$(".groupWrapper").sortable({
connectWith: '.groupWrapper',
items: 'div',
scroll: true,
opacity: 0.6,
receive: function(event, ui) { hemosCambiado(); }
});
$(".groupWrapper").disableSelection();
};
function hemosCambiado() {
var obj;
elemListaUno = $('#listaUno div').size(); //num elements in listaUno
elemListaDos = $('#listaDos div').size(); //num elements in listaDos
elemListaInicial = $('#listaInicial div').size(); //num elements in listaInicial
anchoLista1 = $('#izquierda').width(); //should be 346px;
anchoLista2 = $('#caja-modulos2').width(); //should be 690px;
//listaUno should have 2 or less elements, less than given width
anchoElems1 = 0;
$('#listaUno div').each(function(i,elem) {
anchoElems1 += $(elem).width();
});
if((elemListaUno>2) || (anchoElems1>anchoLista1)){
//surplus elements are sent back to listaInicial
$('#listaInicial').append($('#listaUno div:last-child'));
}
//listaUno should have 4 or less elements, less than given width
anchoElems2 = 0;
$('#listaDos div').each(function(i,elem) {
anchoElems2 += $(elem).width();
});
if((elemListaDos>4) || (anchoElems2>anchoLista2)){
//surplus elements are sent back to listaInicial
$('#listaInicial').append($('#listaDos div:last-child'));
}
$(".groupWrapper").sortable('refresh');
init(); //for some reason, elements appended aren't included as dragable again in IE versions, so the need to be initialized again.
}
Cela fonctionne assez bien sur FireFox, IE7, Safari, etc ... mais sur IE6, des éléments qui sont traînés, font des choses sautille autres éléments de la page, ou se connecter à la souris, mais 500px loin de lui, et d'autres choses désordonnées ..
S'il vous plaît vous poster HTML et Javascript, même si les noms de variables et fonctions sont en espagnol. Vous aurez toujours plus de chances d'obtenir une réponse si vous postez un code que si vous ne le faites pas. – ichiban