我正在尝试在Fabric Js的上下文中创建自定义绘图工具。
自定义,我的意思是将其应用于每个绘制的自由行自定义属性例如:
1)-创建对象的ID;
2)-谁创建的;
3)-创建时间
4)-何时更新
5)-等
export class Circle extends fabric.Circle implements ExtendedFabricOptions {
id: string;
createdBy: string;
editedBy: string;
createdOn: string;
updatedOn: string;
constructor(props: ICircleOptions) {
super(props);
this.id = props.id;
this.createdBy = props.createdBy;
this.editedBy = props.editedBy;
this.createdOn = props.createdOn;
this.updatedOn = props.updatedOn;
}
}
onMouseDown(e: fabric.IEvent) {
const mousedownPointer: fabric.ICoords2d = {
x: e.pointer.x,
y: e.pointer.y
};
const object: Circle = new Circle({
radius: 1,
fill: this.fillColor,
stroke: this.strokeColor,
strokeWidth: this.strokeThickness,
left: e.pointer.x,
top: e.pointer.y,
includeDefaultValues: false,
id: this.whiteboardService.generateUUID(),
createdBy: this.attendeeId,
createdOn: (new Date()).getTime()
});
onMouseMove(e: fabric.IEvent, mousedownPointer: fabric.ICoords2d, object: Circle) {
... update Circle object here
}
onMouseUp(e: fabric.IEvent, object: Circle) {
... final logic here
}
export class Highlighter extends fabric.BaseBrush implements ExtendedFabricOptions {
uuid: string;
createdBy: string;
constructor() {
...
}
}
或:
export class Highlighter extends fabric.Path implements ExtendedFabricOptions
基于对象的扩展,创建对象的最佳方法是: 如果路径存在,可能会发生以下事件:mousedown,mousemove和mouseup处理以及更新该Class的新创建实例。
先谢谢您。这是非常重要的主题,因为许多人都以最适当的方式尝试相同的行为!
答案 0 :(得分:2)
覆盖freeDrawingBrush
的鼠标处理程序。如果要更改canvas.freeDrawingBrush
,则需要定义相同的内容。
var canvas = new fabric.Canvas('c');
canvas.freeDrawingBrush = new fabric.CircleBrush(canvas)
canvas.isDrawingMode = 'true';
var pathId = 0;
canvas.freeDrawingBrush.onMouseDown = (function(onMouseDown) {
return function(pointer) {
console.log('down');
this.createdOn = Date.now();
onMouseDown.call(this, pointer);
}
})(canvas.freeDrawingBrush.onMouseDown);
canvas.freeDrawingBrush.onMouseMove = (function(onMouseMove) {
return function(pointer) {
onMouseMove.call(this, pointer);
}
})(canvas.freeDrawingBrush.onMouseMove);
canvas.freeDrawingBrush.onMouseUp = (function(onMouseUp) {
return function(pointer) {
console.log('up');
this.updatedOn = Date.now();
onMouseUp.call(this, pointer);
}
})(canvas.freeDrawingBrush.onMouseUp);
canvas.on('path:created',function({path}){
path.createdOn = canvas.freeDrawingBrush.createdOn;
path.updatedOn = canvas.freeDrawingBrush.updatedOn;
path.pathId = pathId++;
console.log(path.createdOn)
console.log(path.updatedOn)
});
function onSelect(){
canvas.isDrawingMode = false;
canvas.selection = true;
}
function onDrawing(){
canvas.isDrawingMode = true;
canvas.selection = false;
}
canvas.on('object:selected',function(options){
console.log(options.target)
})
canvas{
border:1px solid;
}
<script src="https://rawgit.com/kangax/fabric.js/master/dist/fabric.js"></script>
<button onClick='onSelect()'>select</button>
<button onClick='onDrawing()'>drawing</button>
<canvas id='c' width=300 height=300>