【问题标题】:Move a object within the canvas after scaling and rotating fabrics缩放和旋转织物后在画布内移动对象
【发布时间】:2015-12-03 04:38:52
【问题描述】:

当对象被旋转/缩放时,我可以在画布边界内移动它。请看下面的小提琴 - http://jsfiddle.net/JtRhX/33/

问题步骤:

  1. 缩放图像> 大于画布宽度/高度。
  2. 问题1:尝试将obj向任意方向移动1px,obj会立即转到object的另一端原因:moving event
  3. 问题2:缩放图像后,obj的移动也是反向的。

我使用下面的代码来检查他的边框在顶部的位置,类似于 bot

if(obj.getBoundingRect().top < 0 || obj.getBoundingRect().left < 0){
    obj.top = Math.max(obj.top, obj.top-obj.getBoundingRect().top);
    obj.left = Math.max(obj.left, obj.left-obj.getBoundingRect().left);
}

【问题讨论】:

  • 图像大于画布时的预期行为是什么?

标签: javascript html canvas fabricjs


【解决方案1】:

对于小提琴代码中的 cmets

//如果对象太大忽略

您似乎希望在这种情况下允许越过画布的边缘。

如果是这样,您只需要更改此行:

if(obj.currentHeight > obj.canvas.height || obj.currentWidth > obj.canvas.width) {

对于这个:

if(obj.getBoundingRect().height > canvas.height || obj.getBoundingRect().width > obj.canvas.width) {

请注意obj.currentHeightobj.currentWidth 都是未定义

希望对你有帮助!

【讨论】:

  • 我需要的是,假设我将 obj 的宽度增加到大于画布并将 obj 向左/向右移动,obj 应该像在我的示例中那样锁定在左/右边缘。
  • 但是当物体比画布大时,它已经通过了一个边缘。在这种情况下,您只想锁定对面的,不是吗?而且,如果用户在使对象变大的同时,两边都溢出了怎么办?
  • 尝试使对象大于画布并移动对象。我需要相同的行为,但要注意问题中提到的要点。
猜你喜欢
  • 2017-11-14
  • 2013-02-23
  • 1970-01-01
  • 2017-02-22
  • 2017-06-20
  • 2018-06-24
  • 2014-07-11
  • 2016-06-27
  • 1970-01-01
相关资源
最近更新 更多