如何使用FabricJS锁定对角线移动?我知道它可以垂直和水平锁定,但我找不到锁定对角线的简单方法。
我需要的是能够一次只在同一个X轴或Y轴上移动一个画布组。
答案 0 :(得分:3)
FabricJS没有本地API挂钩来锁定对象沿着对角线。
您必须侦听对象:移动事件,然后手动重置其x& y位置让它保持在线。这是一个报告线上哪个[x,y]最接近鼠标[x,y]的函数:
// calculate the point on the line that's
// nearest to the mouse position
// line={x0:10,y0:10,x1:100,y1:25}
function linepointNearestMouse(line,mouseX,mouseY) {
//
lerp=function(a,b,x){ return(a+x*(b-a)); };
var dx=line.x1-line.x0;
var dy=line.y1-line.y0;
var t=((mouseX-line.x0)*dx+(mouseY-line.y0)*dy)/(dx*dx+dy*dy);
var lineX=lerp(line.x0, line.x1, t);
var lineY=lerp(line.y0, line.y1, t);
return({x:lineX,y:lineY});
};