Snap.svg沿着一条路径拖动一个组并保存位置
Snap.svg drag a group along a path and save position
我正在尝试Snap来操作SVG,但在沿路径拖动一组元素时遇到了一些问题。
我修改了我在这里找到的这个代码。
start = function () {
this.data("ox", +this.getBBox().cx);
this.data("oy", +this.getBBox().cy);
},
move = function (dx, dy) {
var tmpPt = {
x: this.data('ox') + dx,
y: this.data('oy') + dy
};
// move will be called with dx and dy
l = gradSearch(l, tmpPt);
pt = path.getPointAtLength(l);
if (!isNaN(pt.x) && !isNaN(pt.y)) {
this.transform('t' + (pt.x - this.data("ox")) + ',' + (pt.y - this.data("oy")));
};
},
end = function () {
console.log('End of drag');
}
我可以拖动组,它停留在我放下它的地方,但当我再次开始拖动时,组会回到它的原点,如果我疯了,它就会变得非常糟糕。
我是SVG的新手,我尝试了一些教程来学习,但这些东西超出了我的能力范围,我真的很感激你的一些见解
编辑:这与我的代码更好,谢谢你指出伊恩。
我认为问题在于您每次都在重置ox。在前面的例子中,他们使用attr('cx')而不是ox,所以他们总是引用要偏移的形状的原始位置。当你每次都重置这个时,差值总是零,所以它会重置为零。所以你需要一些修改。
因此,在我们做任何事情之前,让所有人都"锁定"原始位置"作为我们的基础。并将"sx"称为"起始位置",我们计算出每次拖动的起始位置。我们需要这个来添加"dx"(在拖动中添加的delta差)。
我们可以初始存储原始位置。。。然后稍后更改变换以参考原始位置而不是起始位置。
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")) );
};
},
jsfiddle
相关文章:
- 为什么我在 webpack 中需要 html 文件时会得到一个位置字符串
- Caret函数没有'如果插入符号在最后一个位置,就不能正常工作
- 是否可以将一个元素还原为它's上一个位置,而不将该位置作为参数传递
- 对jQuery UI可排序表应用包含可以防止将高行移动到最后一个位置
- 使用javascript和php,在单击图像时将其移动到另一个位置
- 创建从一个位置到另一个位置的路径动画
- 如何滚动到DIV顶部表格的最后一个位置(项目10)
- 将HTML元素的位置更改为另一个位置javascript
- 在站点的另一个位置运行 java 脚本
- 咖啡脚本数组查找下一个位置
- 如何将我的 Google 地图功能从自动查找我的位置更改为让我输入一个位置
- 当现有 Google 标记移动到另一个位置时,如何更新新的纬度和经度
- 使用 jquery 或 javascript 从一个位置导出 excel 文件
- 默认情况下,在 angularjs 中选择下拉列表中的最后一个位置显示占位符
- 如何将另一个 JSON 中的 JSON 对象移动到最后一个位置
- 用户在谷歌地图上标记一个位置
- 离开悬停后如何将P标签保持在上一个位置
- 使用jQuery单击时将元素移动/复制到另一个位置
- 将排序数组的数组元素移动到具有特殊逻辑的另一个位置
- 如何淡出图像,然后使其出现在jquery中的另一个位置