Ein Unterschied mit ziehbar ist, dass die Transformation ist nicht auf die Elemente selbst, aber auf dem Elternteil. Es ändert sich also ein bisschen die Logik.
Hier ist eine Lösung für diesen speziellen Fall, aber Sie werden sehen, dass sich dies je nach Situation ändern kann. Zum Beispiel, wenn Sie transform-Herkunft ändern, oder wenn Sie eine horizontale Sortierung haben, muss es angepasst werden. Aber die Logik bleibt gleich:
var zoomScale = 0.5;
$(".container")
.sortable({
sort: function(e, ui) {
console.log(ui.position.left)
var changeLeft = ui.position.left - ui.originalPosition.left;
// For left position, the problem here is not only the scaling,
// but the transform origin. Since the position is dynamic
// the left coordinate you get from ui.position is not the one
// used by transform origin. You need to adjust so that
// it stays "0", this way the transform will replace it properly
var newLeft = ui.originalPosition.left + changeLeft/zoomScale - ui.item.parent().offset().left;
// For top, it's simpler. Since origin is top,
// no need to adjust the offset. Simply undo the correction
// on the position that transform is doing so that
// it stays with the mouse position
var newTop = ui.position.top/zoomScale;
ui.helper.css({
left: newLeft,
top: newTop
});
}
});
http://jsfiddle.net/aL4ntzsh/5/
EDIT:
vorherige Antwort wird für die Positionierung arbeiten, aber wie durch Decent Dabbler zeigt, gibt es einen Fehler mit der Schnittfunktion, die überprüft, wenn Eine Sortierung sollte erfolgen. Grundsätzlich werden Positionen korrekt berechnet, aber die Elemente behalten Breite und Höhe Werte, die nicht transformiert werden, was das Problem verursacht. Sie können diese Werte anpassen, indem Sie sie beim Start-Ereignis ändern, um den Skalierungsfaktor zu berücksichtigen. Wie dies zum Beispiel:
start: function(e, ui) {
var items = $(this).data()['ui-sortable'].items;
items.forEach(function(item) {
item.height *= zoomScale;
item.width *= zoomScale;
});
}
http://jsfiddle.net/rgxnup4v/2/
begann ich für diese Frage eine Prämie.Obwohl ich nicht unbedingt der Meinung bin, dass diese Frage auf ein großes Publikum anwendbar ist, möchte ich eine kanonische Antwort sehen, die genau anpasst, was in den sortierbaren Ereignishandlern angepasst werden muss und warum die jquerybare Lösung vorgeschlagen wurde in OPs [referenzierte SO-Frage] (https://stackoverflow.com/q/10212683/165154), gilt nicht für jQuery-Sorables. –