使元素可沿对角线/在路径上拖动

rickey.minor

在使用jQuery UI之前,我已经使元素在直线路径上可拖动并固定在轴上,如下所示:

$('#element').draggable({
    axis:'y'
});

但是,我想知道如何在遵循一定路径的同时使元素可拖动,而该路径本质上是可拖动的线。

我基本上在元素的开头有一个样式/位置,在结束位置有另一个样式/位置,我希望它可以在这两个位置之间的路径上拖动。

我该如何使用javascript或jQuery?

Derek 朕会功夫

我认为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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

动画SVG路径对角线

来自分类Dev

创建矩阵的非对角线元素

来自分类Dev

矩阵C ++对角线元素的总和

来自分类Dev

创建矩阵的非对角线元素

来自分类Dev

NumPy:对角线元素的点积

来自分类Dev

在背景上平行的对角线

来自分类Dev

UIPageViewController内的UITableViewController,如何防止对角线拖动

来自分类Dev

提取矩阵的对角线(非对角线)元素

来自分类Dev

主对角线和反对角线的C矩阵元素相同

来自分类Dev

视线对角线

来自分类Dev

映射对角线

来自分类Dev

插补路径以消除对角线移动

来自分类Dev

插补路径以消除对角线移动

来自分类Dev

如何按行替换矩阵的非对角线元素?

来自分类Dev

返回稀疏矩阵的对角线元素

来自分类Dev

从R中的对角线逐行减去负矩阵元素

来自分类Dev

R:替换随机矩阵的“非对角线”元素

来自分类Dev

根据对角线以外的元素创建向量

来自分类Dev

如何交换根据右对角线对称的矩阵元素

来自分类Dev

R中对角线之间的矩阵元素总和

来自分类Dev

如何仅注释海上热图的对角线元素?

来自分类Dev

查找矩阵大对角线以下的所有元素

来自分类Dev

测试嵌套列表中对角线相邻的元素

来自分类Dev

使用Java脚本对角线来回移动元素

来自分类Dev

在div元素的底部/顶部添加对角线边框?

来自分类Dev

响应性对角线划分块元素

来自分类Dev

如何省略对角线元素的行操作

来自分类Dev

如何使用numpy将对角线元素彼此相乘?

来自分类Dev

pcolor上的对角线(刻面边缘不匹配!)