在canvas上画图的撤销功能,怎么实现

我现在唯一想到的就是每画完一个图形就把当前canvas保存到数组中,撤销的时候再从数组中取出来

阅读 8.4k
4 个回答

这个挺好解决的,画板上所有的图形都放在一个数组里。也就是说,每个图形是一个对象,内部有这个图形的所有信息,包括x, y, width, height等,然后操作这个数组即可完成撤销。
array.pop(); array.forEach(a => a.draw());

当然,有更简单的解决方法,给你推荐一个canvas 2d渲染库,https://www.github.com/PengJi...
这是一个canvas 2d 渲染库,体量小,功能强大,支持画图,图形绑定时间,拖拽,放大缩小等。

你的撤销需求很容易就能实现。

保存canvas太麻烦了. 可以把绘制的信息保存起来,比如说绘制的区域.
撤销在把这片区域清空就可以了.

将每一个操作作为一个记录, 存在栈(可以用数组模拟)中, 用户每操作一个记录, 就入栈, 撤销就出栈, 并且清除这条记录对应的图形。

记录每一步操作的行为和初始位置,放到数组里

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题