【发布时间】:2014-02-18 13:25:38
【问题描述】:
我设法通过以下方式操纵 Fabric.js 以添加快照和缩放到网格功能:
var grid = 100;
//Snap to Grid
canvas.on('object:moving', function (options) {
options.target.set({
left: Math.round(options.target.left / grid) * grid,
top: Math.round(options.target.top / grid) * grid
});
});
canvas.on('object:scaling', function (options) {
options.target.set({
left: Math.round(options.target.left / grid) * grid,
top: Math.round(options.target.top / grid) * grid
});
});
现在我想为对象添加快照功能。我的想法是检查两个对象的交集,然后以某种方式锁定运动。我知道这不是最好的尝试,但至少它会捕捉到它,但不再允许将对象移开。并且:现在它没有很好地实施。见:http://jsfiddle.net/gcollect/y9kyq/
我有三个问题:
- “snap”不能很好地工作,因为对象 left 属性以某种方式依赖于指针。通过拖动对象并观察我的控件输出进行复制。例如,当将红色矩形移动到位置 left:62 时,矩形不会与蓝色矩形相交,仍然可以移开。如何重新加载矩形的实际左值。由于我对齐网格线,它位于左侧:100 而不是左侧:62。
- 知道如何向对象功能添加快照吗?并禁止路口?
- 如何检查 n 个对象而不是两个对象?
感谢您的 cmets。
PS: jsfiddle 示例没有显示缩放到网格功能,因为它需要 Fabric.js 在线操作:11100
var distroundedforgrid = Math.round(dist/100)*100;
transform.newScaleX = Math.round((transform.original.scaleX * distroundedforgrid / lastDist)*10)/10;
transform.newScaleY = Math.round((transform.original.scaleY * distroundedforgrid / lastDist)*10)/10;
target.set('scaleX', transform.newScaleX);
target.set('scaleY', transform.newScaleY);
}
【问题讨论】:
-
很遗憾,到目前为止,我在捕捉对象功能方面没有任何进展。
标签: javascript canvas fabricjs