如何仅选择透明背景矩形中的笔画?

问题描述 投票:0回答:1

仅当我单击笔划时,如何才能使透明矩形成为可选择的?从下面的代码片段中可以看到,我尝试了两种不同的方法,左侧的对象是具有透明背景的矩形,右侧的对象是具有多行的组对象。我想知道如何仅在单击笔触时才能选择元素,如果单击内部透明区域,则两个对象都将被选中。

var canvas = new fabric.Canvas('a');
canvas.add(new fabric.Rect({
  left: 10,
  top: 20,
  height: 160,
  width: 80,
  fill: 'transparent',
  stroke: 'red'
}));
var rectLine1 = new fabric.Line([0, 0, 80, 0], {
  stroke: 'red',
  left: 100,
  top: 20
});
var rectLine2 = new fabric.Line([0, 160, 0, 0], {
  stroke: 'red',
  left: 100,
  top: 20
});
var rectLine3 = new fabric.Line([0, 160, 0, 0], {
  stroke: 'red',
  left: 180,
  top: 20
});
let rectLine4 = new fabric.Line([0, 0, 80, 0], {
  stroke: 'red',
  left: 100,
  top: 180
});
var group = new fabric.Group([rectLine1, rectLine2, rectLine3, rectLine4], {
  left: 110,
  top: 20
})
canvas.add(group)
canvas.renderAll();
.c {
  border: 2px solid black;
}
<script
  src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>
<script type='text/javascript' src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.19/fabric.js"></script>
<canvas id="a" class="c" width="200" height="200"></canvas>
javascript canvas fabricjs
1个回答
0
投票

我发现设置perPixelTargetFind: true可以解决问题,您也可以在画布targetFindTolerance: 10上设置公差以能够选择笔触较细的对象。如果有人需要,我将在下面粘贴工作代码。

var canvas = new fabric.Canvas('a', {
  targetFindTolerance: 10
});
canvas.add(new fabric.Rect({
  left: 10,
  top: 20,
  height: 160,
  width: 80,
  fill: 'transparent',
  stroke: 'red',
  perPixelTargetFind: true,
}));
canvas.renderAll();
.c {
  border: 2px solid black;
}
<script
  src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>
<script type='text/javascript' src="https://cdnjs.cloudflare.com/ajax/libs/fabric.js/1.7.19/fabric.js"></script>
<canvas id="a" class="c" width="200" height="200"></canvas>
© www.soinside.com 2019 - 2024. All rights reserved.