JQuery UI Sortable avec Défilement Horizontal se déplace tous les éléments vers le bas
Je veux permettre à l'utilisateur de trier les objets de gauche à droite avec une barre de défilement.
Les objets sont des boîtes avec HTML, tels que du texte, pas les images comme beaucoup d'autres exemples.
Le problème est que tant que l'utilisateur fait glisser l'un des objets, tous les autres décalent vers le bas pendant le déplacement.
Voici ce que j'ai:
HTML:
<div id="parent" class="parent">
<div id="list" class="list">
<div class="item">A</div>
<div class="item">B</div>
<div class="item">C</div>
</div>
</div>
CSS:
.parent {
height:64px;
width:280px;
}
.list {
background-color:#d0d0d0;
white-space:nowrap;
overflow-x:scroll;
overflow-y:hidden;
/*text-align:left;*/
}
.item {
background-color:#404040;
height:40px;
width:100px;
margin:4px;
cursor:pointer;
display:inline-block;
/*float:left;*/
/*float:none;*/
/*clear:both;*/
}
.placeholder {
height:40px;
width:20px;
display:inline-block;
margin:4px;
}
Javascript:
$(function() {
$('#list').disableSelection().sortable({
scroll: true,
placeholder: 'placeholder',
//containment:'parent',
axis: 'x'
});
})
J'ai essayé beaucoup de différents paramètres, et de gauche, certains d'entre eux en tant que commentaires.
Meilleure façon de voir le problème est ici: http://jsfiddle.net/francispotter/gtKtE/
- Regardez jsfiddle.net/sP3UZ de stackoverflow.com/questions/2544143/...
- Merci pour la réponse, mais qui ne traite pas le problème. Les exemples dans les liens que vous avez fournies utilise des float, ce qui est bien si vous voulez que les objets pour former une mosaïque de la grille. Je veux que les éléments ne soient disposées horizontalement, et pour la région de défilement gauche/droite pour s'adapter à tous les items. J'ai donc besoin d'utiliser display:inline-block.
- J'ai été de jongler avec le code, et aussi loin que je peux dire Sortable n'a jamais été conçu pour être utilisé à l'horizontale. Je pense que l'espace créé dans le haut de votre DIVs est invisible de l'espace réservé DIV d'une certaine sorte, qui ne peut pas être supprimé sans changer l'INTERFACE utilisateur de jQuery code lui-même. Voir aussi bugs.jqueryui.com/ticket/6702
Vous devez vous connecter pour publier un commentaire.
Une solution que j'ai trouvé qui fonctionne SANS avoir à réécrire la bibliothèque d'interface utilisateur et est propre et css correctif:
Cette réponse est sans doute trop tard pour vous aider, mais peut-être que cela aidera d'autres personnes dans la même situation. J'ai trouvé votre question il y a quelques jours que je suis en train de faire le même genre de chose pour permettre à un utilisateur de modifier l'ordre des "photos" à la une "bande de film". Le commentaire sur votre question, ce qui suggère l'utilisation de "flotter" plutôt que "inline-block" s'est avéré être la clé pour trouver la solution. Cela m'a conduit à l'utilisation d'une taille fixe DIV pour tenir le triable éléments, en évitant le changement de la hauteur causée par mot-emballage, puis ajouter une DIV extérieure avec overflow-x:scroll pour faire le défilement horizontal. Profitez-en!
https://jsfiddle.net/kmbro/y8ccza34/
HTML
CSS
jQuery 2.1.3 /jQuery UI 1.11.4
Une réponse (pas très élégant, mais il fonctionne) proposé par un collègue est de mettre en float:left sur le point, puis:
Je sais que c'est un peu de la réponse tardive, mais j'ai eu des problèmes avec cela.
Le correctif pour moi était en train de changer
à
à la ligne 659 dans l'actuelle version non compressée (v1.8.17).
J'espère que cela aide toujours pour vous en sortir.
start: function(event, ui) { ui.placeholder.html(' '); }
. N'oubliez pas de joindre ce fichier à la fois de l'listes.Comme @BertterHeide donc fait observer à juste titre, la bon solution à ce problème est de modifier votre
.sortable
appel, ajoutantstart: function(event, ui) { ui.placeholder.html(' '); }
, comme suit: