Một khác biệt với kéo là chuyển không nằm trên bản thân các yếu tố, nhưng trên phụ huynh. Vì vậy, nó thay đổi một chút logic.
Đây là giải pháp cho trường hợp cụ thể này, nhưng bạn sẽ thấy tùy thuộc vào tình huống có thể thay đổi. Ví dụ: nếu bạn thay đổi chuyển đổi nguồn gốc hoặc nếu bạn có thể sắp xếp theo chiều ngang, nó sẽ phải được điều chỉnh. Nhưng logic vẫn như cũ:
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:
câu trả lời trước sẽ làm việc cho vị trí, nhưng khi được trỏ bởi Dabbler Decent, có một lỗ hổng với chức năng ngã tư mà xác nhận khi một phân loại nên xảy ra. Về cơ bản, các vị trí được tính toán chính xác, nhưng các mục giữ cho các chiều cao chiều rộng và chiều cao giá trị không được chuyển đổi gây ra sự cố. Bạn có thể điều chỉnh các giá trị này bằng cách sửa đổi chúng trên sự kiện bắt đầu để tính đến yếu tố tỷ lệ. Như thế này ví dụ:
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/
Nguồn
2016-04-18 03:04:57
tôi bắt đầu một bounty cho câu hỏi này.Mặc dù tôi không nhất thiết nghĩ rằng câu hỏi này được áp dụng rộng rãi cho một lượng lớn khán giả, tôi * làm * thích xem câu trả lời chính xác để điều chỉnh chính xác những gì cần được điều chỉnh trong các trình xử lý sự kiện có thể sắp xếp và tại sao giải pháp có thể kéo được trong [câu hỏi SO được tham chiếu] của OP (https://stackoverflow.com/q/10212683/165154), không áp dụng cho các sắp xếp jquery. –