colors - Fabric.js:如果边框样式为虚线,如何指定选择框辅助边框颜色
问题描述
我想在选择框上指定辅助边框颜色。
示例为什么需要这样做。如果我有两个黑色矩形,并选择一个矩形,则选择边框的某些部分在另一个矩形上方不可见:
var canvas = window.__canvas = new fabric.Canvas('canvas');
var rect = new fabric.Rect({left: 10, strokeWidth: 0, top: 10, width: 100, height: 100, fill: 'black'});
var rect2 = new fabric.Rect({left: 40, strokeWidth: 0, top: 60, width: 200, height: 200, fill: 'black'});
rect.cornerSize = 8;
rect.padding = 0;
canvas.add(rect);
canvas.add(rect2);
canvas.setActiveObject(rect2);
fabric.Object.prototype.set({
borderColor: 'black',
cornerColor: 'black',
cornerSize: 6,
transparentCorners: true,
borderDashArray: [4, 4],
rotatingPointOffset: 20,
});
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="canvas" width="400" height="400"></canvas>
解决方案
选择对象后,将其stroke
属性设置为您想要的颜色。此解决方法将达到目的。
选择对象,取消选择或选择的更新后,我只是设置对象的属性stroke
和strokeWidth
属性。
var canvas = window.__canvas = new fabric.Canvas('canvas');
var activeObject;
var lastActiveObject;
canvas.on('selection:created', onObjectSelection);
canvas.on('selection:cleared', onObjectClear);
canvas.on('selection:updated', onselectionUpdate);
function onObjectSelection() {
activeObject = canvas.getActiveObject();
lastActiveObject = activeObject;
activeObject.set({
stroke: 'red',
strokeWidth: 3,
dirty: true
});
canvas.requestRenderAll();
}
function onObjectClear() {
lastActiveObject.set({
stroke: 'black',
strokeWidth: 0,
dirty: true
});
canvas.requestRenderAll();
}
function onselectionUpdate() {
activeObject = canvas.getActiveObject();
activeObject.set({
stroke: 'red',
strokeWidth: 4,
dirty: true
});
lastActiveObject.set({
stroke: 'black',
strokeWidth: 0,
dirty: true
});
canvas.requestRenderAll();
lastActiveObject = activeObject;
}
var rect = new fabric.Rect({
left: 10,
strokeWidth: 0,
top: 10,
width: 100,
height: 100,
fill: 'black'
});
var rect2 = new fabric.Rect({
left: 40,
strokeWidth: 0,
top: 60,
width: 200,
height: 200,
fill: 'black'
});
rect.cornerSize = 8;
rect.padding = 0;
canvas.add(rect);
canvas.add(rect2);
canvas.setActiveObject(rect2);
fabric.Object.prototype.set({
borderColor: 'black',
cornerColor: 'black',
cornerSize: 6,
transparentCorners: true,
borderDashArray: [4, 4],
rotatingPointOffset: 20,
});
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<canvas id="canvas" width="400" height="400"></canvas>
推荐阅读
- vhdl - VHDL 2008 宽度不匹配
- android - 如何使用自定义背景颜色动态设置圆形图像视图
- php - Laravel 8分页返回空白页
- r - 使用带有 stringr 函数的重置匹配令牌 \K
- c# - 创建使用模式但没有模式注册表 url 的 Kafka Producer
- php - 有没有办法使用 PHP 访问 json 对象元素
- python - 如何在 python 的另一列中的字符串值中从数据框中的一列中搜索字符串?
- sql - SQL 预期输入结束,但得到关键字 WHERE
- rpm - 使用 rpmbuild 创建 rpm 时源文件损坏
- selenium - Selenium:我应该在 find_element 中使用什么正确的对象类型和名称?