Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/423.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Snap.svg沿路径拖动组并保存位置_Javascript_Svg_Snap.svg - Fatal编程技术网

Javascript Snap.svg沿路径拖动组并保存位置

Javascript Snap.svg沿路径拖动组并保存位置,javascript,svg,snap.svg,Javascript,Svg,Snap.svg,我正在尝试Snap操作SVG,但在沿路径拖动一组元素时遇到了一些问题 我修改了我发现的这个 我可以拖动组,它会停留在我放下它的地方,但是当我再次开始拖动时,组会返回到它的原点,如果我发疯了,它就会开始真正有问题 我是SVG新手,我尝试了一些教程来学习,但是这些东西可能不适合我,我非常感谢您的一些见解 编辑:我的比较好,谢谢你指出伊恩。我想问题是你每次都在重置ox。在前面的示例中,他们使用attr('cx')而不是ox,因此他们总是引用要偏移的形状的原始位置。每次重置时,差值将始终为零,因此将重置

我正在尝试Snap操作SVG,但在沿路径拖动一组元素时遇到了一些问题

我修改了我发现的这个

我可以拖动组,它会停留在我放下它的地方,但是当我再次开始拖动时,组会返回到它的原点,如果我发疯了,它就会开始真正有问题

我是SVG新手,我尝试了一些教程来学习,但是这些东西可能不适合我,我非常感谢您的一些见解


编辑:我的比较好,谢谢你指出伊恩。

我想问题是你每次都在重置ox。在前面的示例中,他们使用attr('cx')而不是ox,因此他们总是引用要偏移的形状的原始位置。每次重置时,差值将始终为零,因此将重置为零。所以你需要做一些修改

因此,在我们做任何事情之前,让所有的“牛市”都回到“原始位置”。 把‘sx’称为‘起始位置’,我们可以计算出每次拖动的起始位置。我们需要这个来添加“dx”(拖动时添加的增量差)

我们可以先存储原始位置…然后稍后更改变换以引用该原始位置,而不是起始位置

group.drag(move, start, end);
group.data("ox", +group.getBBox().cx);
group.data("oy", +group.getBBox().cy);

start = function () {
    this.data("sx", +this.getBBox().cx);
    this.data("sy", +this.getBBox().cy);
},

move = function (dx, dy) {

    var tmpPt = {
        x: this.data('sx') + dx,
        y: this.data('sy') + dy
    };

    l = gradSearch(l, tmpPt);

    pt = path.getPointAtLength(l);

    // We change this!!!
    if (!isNaN(pt.x) && !isNaN(pt.y)) {
       this.transform('t' + (pt.x - this.data("ox")) + ',' + (pt.y - this.data("oy")) );
};
},

我认为问题在于每次都在重置ox。在前面的示例中,他们使用attr('cx')而不是ox,因此他们总是引用要偏移的形状的原始位置。每次重置时,差值将始终为零,因此将重置为零。所以你需要做一些修改

因此,在我们做任何事情之前,让所有的“牛市”都回到“原始位置”。 把‘sx’称为‘起始位置’,我们可以计算出每次拖动的起始位置。我们需要这个来添加“dx”(拖动时添加的增量差)

我们可以先存储原始位置…然后稍后更改变换以引用该原始位置,而不是起始位置

group.drag(move, start, end);
group.data("ox", +group.getBBox().cx);
group.data("oy", +group.getBBox().cy);

start = function () {
    this.data("sx", +this.getBBox().cx);
    this.data("sy", +this.getBBox().cy);
},

move = function (dx, dy) {

    var tmpPt = {
        x: this.data('sx') + dx,
        y: this.data('sy') + dy
    };

    l = gradSearch(l, tmpPt);

    pt = path.getPointAtLength(l);

    // We change this!!!
    if (!isNaN(pt.x) && !isNaN(pt.y)) {
       this.transform('t' + (pt.x - this.data("ox")) + ',' + (pt.y - this.data("oy")) );
};
},

不太清楚,您问题中的代码与小提琴中的代码不同,因此不确定这是否只是原始源代码。你能在问题的底部添加一个与你当前拥有的代码相匹配的JSFIDLE(或编辑上面的代码以匹配)。谢谢@Ian,我忘记了最重要的一点。它不是很清楚,你问题中的代码与fiddle中的不同,所以不确定这是否只是原始源代码。你能在问题的底部添加一个与你当前拥有的代码相匹配的JSFIDLE吗(或者编辑上面的代码以匹配)。谢谢你@Ian,我忘记了最重要的一点。非常感谢,可能看起来很简单,但我被阻止了这么久,祝你愉快,再次感谢。非常感谢,也许它看起来很简单,但我被封锁了这么长时间,祝你有一个美好的一天,再次感谢。