我正在尝试在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;
}
}
Run Code Online (Sandbox Code Playgroud)
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()
});
Run Code Online (Sandbox Code Playgroud)
onMouseMove(e: fabric.IEvent, mousedownPointer: fabric.ICoords2d, object: Circle) {
... update Circle object here
}
Run Code Online (Sandbox Code Playgroud)
onMouseUp(e: fabric.IEvent, object: Circle) {
... final logic here
}
Run Code Online (Sandbox Code Playgroud)
export class Highlighter extends fabric.BaseBrush implements ExtendedFabricOptions {
uuid: string;
createdBy: string;
constructor() {
...
}
}
Run Code Online (Sandbox Code Playgroud)
要么:
export class Highlighter extends fabric.Path implements ExtendedFabricOptions
Run Code Online (Sandbox Code Playgroud)
并且基于扩展对象,创建它的最佳方式是:如果路径可能存在mousedown,mousemove和mouseup处理和更新该类的新创建实例的事件.
先感谢您.这是非常重要的话题,因为有很多人以最恰当的方式尝试相同的行为!
覆盖 的鼠标处理程序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)
})Run Code Online (Sandbox Code Playgroud)
canvas{
border:1px solid;
}Run Code Online (Sandbox Code Playgroud)
<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>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
524 次 |
| 最近记录: |