簡體   English   中英

垂直/水平線的FabricJs targetFindTolerance

[英]FabricJs targetFindTolerance for horizontal/vertical lines

我正在創建行並將“ perPixelTargetFind”值設置為true。 如果一條線是對角線,則可以完美工作,可以在我的targetFindTolerance的邊界(當前為20像素)中找到它。 但是,如果Line是水平或垂直的,則似乎targetFindTolerance不起作用。

這是jsfiddle的鏈接: http : //jsfiddle.net/droeqgro/

如果將鼠標移到對角線附近,則可以在到達對角線之前選擇它20像素,但是如果您對其他兩條線嘗試相同的操作,則它將不起作用。 如果選擇水平線並將其旋轉到對角線位置,則不能在20像素邊界中選擇它。

這是我的代碼:

var canvas  = new fabric.Canvas('c', {
    targetFindTolerance: 15
});

/*_____________Adding shapes_______________*/
canvas.add(new fabric.Line([50, 100, 200, 200], {
  left: 50,
  top: 50,
    stroke: 'black',
    perPixelTargetFind: true,
  strokeWidth: 5
}));

canvas.add(new fabric.Line([50, 100, 200, 100], {
  left: 50,
  top: 250,
    stroke: 'green',
    perPixelTargetFind: true,
  strokeWidth: 5
}));


canvas.add(new fabric.Line([50, 100, 50, 200], {
  left: 140,
  top: 350,
    stroke: 'green',
    perPixelTargetFind: true,
  strokeWidth: 5
}));

有關示例,請參見Jsfiddle並選擇三行。

非常感謝。 :)

這似乎是FabricJS中的錯誤。 一個駭人聽聞的解決方案是重寫此類的containsPoint函數:

function fakeContainsPointFunction(point) { 
  var isTransparent = canvas.isTargetTransparent(this, point.x, point.y);
  return !isTransparent; 
}

canvas.item(1).containsPoint = fakeContainsPointFunction.bind(canvas.item(1));
canvas.item(2).containsPoint = fakeContainsPointFunction.bind(canvas.item(2));

在此處查看更新的小提琴: http : //jsfiddle.net/droeqgro/3/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM