fabric.js+angular11 快捷键删除、保存、撤销、上下左右箭头

监听时,判断当前选择的是否text或者textbox,如果是text或textbox,查看当前是否是编辑状态,不是编辑状态可以进行删除,编辑状态不能进行删除。

撤销、保存,需要阻止默认的行为

@HostListener('document:keydown', ['$event'])
onkeydown(event: KeyboardEvent) {
  const activeObject = this.canvas.getActiveObject();
  if (event.code === 'Backspace' || event.code === 'Delete') {
    if (activeObject) {
       const objects = activeObject._objects
       if (activeObject.type == 'textbox' || activeObject.type == 'text') {
          if (!activeObject.isEditing) {
            if (objects && objects.length > 1) {
              objects.forEach(obj => {
                  this.canvas.remove(obj)
                });
                this.canvas.discardActiveObject().renderAll();
            } else {
                this.canvas.remove(activeObject); //删除
            }
          }
       } else {
          if (objects && objects.length > 1) {
              objects.forEach(obj => {
                this.canvas.remove(obj)
              });
              this.canvas.discardActiveObject().renderAll();

            } else {
              this.canvas.remove(activeObject); //删除
            }
       }
    }
  } else if ((event.metaKey || event.ctrlKey) && event.key === 's') {
    event.preventDefault(); // 阻止默认保存行为
      console.log('Ctrl/Cmd + S pressed');
      // 在这里执行保存操作,需定义你自己的保存方法
      this.save()
  } else if ((event.ctrlKey || event.metaKey) && event.key === 'z') {
      event.preventDefault(); // 阻止默认的撤销操作
      //撤销操作
      this.undo()
  } else if (event.key === 'ArrowUp') {
    // 处理向上箭头键的逻辑
      if (activeObject) {
        event.preventDefault();
        activeObject.top -= 1;
        activeObject.setCoords();
        // 触发canvas的重新渲染
        this.canvas.requestRenderAll();
      }
  }else if (event.key === 'ArrowDown') {
      // 处理向下箭头键的逻辑
      if (activeObject) {
        event.preventDefault();
        activeObject.top += 1;
        activeObject.setCoords();
        // 触发canvas的重新渲染
        this.canvas.requestRenderAll();
      }
    } else if (event.key === 'ArrowLeft') {
      // 处理向左箭头键的逻辑
      if (activeObject) {
        event.preventDefault();
        activeObject.left -= 1;
        activeObject.setCoords();
        // 触发canvas的重新渲染
        this.canvas.requestRenderAll();
      }
    } else if (event.key === 'ArrowRight') {
      // 处理向右箭头键的逻辑
      if (activeObject) {
        event.preventDefault();
        activeObject.left += 1;
        activeObject.setCoords();
        // 触发canvas的重新渲染
        this.canvas.requestRenderAll();
      }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值