在fabric.js中,每个事件都会触发按钮单击事件

加密货币

我在fabricjs画布上的事件有两天了。我猜这是关于fabricjs的。我发现了问题,但是我不明白为什么这是一个问题。

我有一个鼠标事件和两个调用函数clip1和clip2的按钮(单击事件)。

  1. 鼠标事件正常工作,直到我通过button1调用clip1为止。
  2. 只需对clip1进行一次调用,它就可以处理所有down事件。
  3. 通过button2调用的clip2函数没有问题。

clip1和clip2之间的区别:clip1使用this.canvas和clip2创建一个新的canvas。似乎button1 click事件会将其自身注册到画布的所有事件。像个虫子,对吗?

.HTML

<canvas id="c" width="800" height="800" style="border:1px solid #000"></canvas>
<img src="../../clips/kupurFirst.jpg" id="my-image1" hidden>
<button (click)="clip1()">Clip1 </button>
<button (click)="clip2()">Clip2</button>

.TS

import { Component, OnInit } from '@angular/core';

@Component({
  moduleId: module.id,
  selector: 'app-fabric',
  templateUrl: 'fabric.component.html',
  styleUrls: ['fabric.component.css']
})
export class FabricComponent implements OnInit {

  public canvas: any;
  public src: string;

  constructor() { }

  ngOnInit() {

    this.canvas = new fabric.Canvas('c');
    this.src = "../../clips/kupurSecond.jpg";

    loadCanvas(this.src, this.canvas);

    // Works normally until click event (clip1) fires
    this.canvas.on('mouse:down', function (event) {
      console.log("Down");
    });
  }

  // Problem with this.canvas
  public clip1() {
    loadCanvas(this.src, this.canvas);
    this.canvas.clipTo = function (ctx) {
      console.log("clip1");
    };
  }
  // No problem with new canvas element
  public clip2() {
    var canvas = new fabric.Canvas('c');
    loadCanvas(this.src, canvas);

    canvas.clipTo = (ctx) => {
      console.log("clip2");
    };
  }

}

var loadCanvas = (src: string, canvas: any) => {
  fabric.Image.fromURL(src, (oImg) => {
    canvas.add(oImg);
  }, { hasControls: false, selectable: false, evented: false, strokeDashArray: [2, 2], opacity: 1 });

}
加密货币

我找到了解决方案。看起来并不完美,但对我有用:

this.canvas.clipTo = null; // Prevents fire of clipTo function at every event.

我将此行放入新按钮(函数)中,并将其命名为“撤消”。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章