锁定对角线运动

时间:2015-06-16 16:41:08

标签: javascript html5 fabricjs

如何使用FabricJS锁定对角线移动?我知道它可以垂直和水平锁定,但我找不到锁定对角线的简单方法。

我需要的是能够一次只在同一个X轴或Y轴上移动一个画布组。

1 个答案:

答案 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});
};