Różnica z Draggable jest to, że przekształcić nie jest na same elementy, ale na rodzica. Więc zmienia nieco logikę.
Oto rozwiązanie dla tego konkretnego przypadku, ale zobaczysz, że w zależności od sytuacji może się zmienić. Na przykład, jeśli zmienisz przekształcenie-pochodzenie, lub jeśli masz poziomy do sortowania, będzie musiał zostać dostosowany. Ale logika pozostaje taka sama:
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:
Poprzednia odpowiedź będzie działać do pozycjonowania, ale jak wskazano przez godnej dyletant, nie jest to wada z funkcją przecięcia, który sprawdza poprawność kiedy powinno nastąpić sortowanie. Zasadniczo pozycje są poprawnie obliczane, ale te wartości mają wartości width i , które nie są przekształcane, co jest przyczyną problemu. Można dostosować te wartości, modyfikując je w zdarzeniu początkowym, aby uwzględnić współczynnik skali. Jak to na przykład:
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/
zacząłem bounty na to pytanie.Chociaż niekoniecznie myślę, że to pytanie jest szeroko stosowane w przypadku dużej grupy odbiorców, to lubię * zobaczyć kanoniczną odpowiedź, która dotyczy tego, co dokładnie musi zostać poprawione w sortowalnych procedurach obsługi zdarzeń i dlaczego zaproponowano rozwiązanie, które można przeciągnąć za pomocą jquery. w OP [odwołanie do pytania SO] (https://stackoverflow.com/q/10212683/165154), nie ma zastosowania do sortables jquery. –