Я хочу, чтобы функциональность сдерживания в плагине jquery dragsort
Если вы имеете в виду jQuery List DragSort , он закодирован, чтобы содержать перетаскиваемый элемент внутри контейнера, но только внутри UL, если вы не перетаскиваете между списками. Таким образом, чтобы указать пользовательский контейнер, вам нужно изменить код. Так что найдите это в коде:
if (!opts.dragBetween) {
var containerHeight = $(list.container).outerHeight() == 0 ? Math.max(1, Math.round(0.5 + list.getItems().size() * list.draggedItem.outerWidth() / $(list.container).outerWidth())) * list.draggedItem.outerHeight() : $(list.container).outerHeight();
list.offsetLimit = $(list.container).offset();
list.offsetLimit.right = list.offsetLimit.left + $(list.container).outerWidth() - list.draggedItem.outerWidth();
list.offsetLimit.bottom = list.offsetLimit.top + containerHeight - list.draggedItem.outerHeight();
}
И заменить на:
if (!opts.dragBetween || typeof opts.containment != "undefined") {
var box = typeof opts.containment != "undefined" ? $(opts.containment) : $(list.container);
var containerHeight = box.outerHeight() == 0 ? Math.max(1, Math.round(0.5 + list.getItems().size() * list.draggedItem.outerWidth() / box.outerWidth())) * list.draggedItem.outerHeight() : box.outerHeight();
list.offsetLimit = box.offset();
list.offsetLimit.right = list.offsetLimit.left + box.outerWidth() - list.draggedItem.outerWidth();
list.offsetLimit.bottom = list.offsetLimit.top + containerHeight - list.draggedItem.outerHeight();
}
Далее найдите это:
if (!opts.dragBetween) {
top = Math.min(this.offsetLimit.bottom, Math.max(top, this.offsetLimit.top));
left = Math.min(this.offsetLimit.right, Math.max(left, this.offsetLimit.left));
}
И заменить на это:
if (this.offsetLimit != null) {
top = Math.min(this.offsetLimit.bottom, Math.max(top, this.offsetLimit.top));
left = Math.min(this.offsetLimit.right, Math.max(left, this.offsetLimit.left));
}
Теперь вызовите dragsort следующим образом:
$("#container ul").dragsort({ containment: "#container", dragBetween: true });