You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PaperJS的KeyDown事件中删除选中的图形项

PaperJS 选中项删除功能异常解决方案

问题核心诱因

  • 仅用单个全局变量存储选中项时,新增图形会覆盖之前的选中项引用,导致按键删除时只能识别到最后添加的项
  • 给每个图形单独绑定键盘删除事件时,变量作用域冲突会导致只有最后绑定的图形能触发删除逻辑
  • 未正确在鼠标选中事件中同步更新当前选中项的引用

修复步骤

1. 声明全局存储变量

首先声明全局变量存储当前选中的图形项,避免作用域覆盖问题:

let currentSelectedItem = null

2. 修正鼠标选中逻辑

在鼠标悬停事件中同步更新选中状态与全局变量:

// 鼠标进入图形时触发选中
project.activeLayer.on('mouseenter', function(event) {
  // 清空上一个选中项的选中状态
  if (currentSelectedItem) {
    currentSelectedItem.selected = false
  }
  // 更新当前选中项
  currentSelectedItem = event.item
  currentSelectedItem.selected = true
})

// 鼠标移出图形时清空选中(可根据交互需求调整)
project.activeLayer.on('mouseleave', function(event) {
  if (currentSelectedItem) {
    currentSelectedItem.selected = false
    currentSelectedItem = null
  }
})

3. 统一绑定全局删除逻辑

不要给单个图形绑定删除事件,统一在全局监听键盘按键,读取当前选中项执行删除:

// 适配PaperJS内置事件的写法
view.on('keydown', function(event) {
  if (event.key.toLowerCase() === 'd' && currentSelectedItem) {
    currentSelectedItem.remove()
    currentSelectedItem = null
  }
})

扩展说明

如果需要支持多选删除,只需将全局存储的单个变量替换为数组:

  • 选中项时将图形项push到数组中,取消选中时splice对应项
  • 按下删除键时遍历数组逐个调用remove()方法,最后清空数组即可

内容的提问来源于stack exchange,提问作者Riccardo Volpe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 14:24:02