Я не думаю, что jQuery предоставляет такую функциональность. Тем не менее, вы можете сделать это в чистом JavaScript, или использовать этот плагин, который я сделал:
$.fn.dragBetween = function(eles) {
var dragEle = this,
md = false, offset, a, b, ab;
eles[0] = $(eles[0])[0];
eles[1] = $(eles[1])[0];
dragEle.on("mousedown", function(e) {
if (e.which == 1) {
mD = true;
offset = new Vector(
e.clientX - this.offsetLeft,
e.clientY - this.offsetTop
);
a = new Vector(eles[0].offsetLeft, eles[0].offsetTop);
b = new Vector(eles[1].offsetLeft, eles[1].offsetTop);
ab = b.sub(a);
}
});
$(window).on("mousemove", function(e) {
if (!mD) return false;
var cursor = new Vector(e.clientX, e.clientY).sub(offset).sub(a),
mag = cursor.dot(ab)/ab.dot(ab),
proj = ab.times(Math.max(0, Math.min(1, mag)));
var final = proj.add(a);
dragEle.css({
top: final._arr[1],
left: final._arr[0]
});
e.preventDefault();
}).mouseup(function() {
mD = false;
});
};
И это Vector
класс я писал в спешке:
function Vector(x, y) {
this._arr = [x, y];
}
Vector.prototype.dot = function(v2) {
var v1 = this;
return v1._arr[0] * v2._arr[0] + v1._arr[1] * v2._arr[1];
}
Vector.prototype.add = function(v2) {
var v1 = this;
return new Vector(v1._arr[0] + v2._arr[0], v1._arr[1] + v2._arr[1]);
}
Vector.prototype.sub = function(v2) {
var v1 = this;
return new Vector(v1._arr[0] - v2._arr[0], v1._arr[1] - v2._arr[1]);
}
Vector.prototype.times = function(n) {
var v = this;
return new Vector(v._arr[0] * n, v._arr[1] * n);
}
назвать, просто сделать:
$("#drag").dragBetween(["#a", "#b"]);
Демо: http://jsfiddle.net/DerekL/0j6e60d8/
Для формулы объяснения, см: https://www.desmos.com/calculator/tpegbbk8gt
Вы, возможно, придется сделать это проверка х, у вручную (вручную, я имею в виду написать собственный кода) вместо использования методов jQuery UI. –
@Derek 朕 會 功夫 О, ладно. Это кажется неэффективным, хотя, проверяя положение для каждого пикселя, который он перемещает. Есть ли способ, который я могу сказать, если он вдоль линии, тогда пусть он будет перетаскиваться по этой линии. –
Честно говоря, я не думаю, что будет большая разница в производительности, поскольку jQuery делает то же самое, чтобы проверить, находятся ли ваши координаты внутри определенного диапазона. Насколько я знаю, это единственное, что нужно сделать. [Это] (https://en.wikipedia.org/wiki/Bresenham%27s_line_algorithm) может помочь вам, если вы хотите найти каждый пиксель между ними. –