前端使用 Konva 实现可视化设计器(16)- 旋转对齐、触摸板操作的优化

这一章解决两个缺陷,一是调整一些快捷键,使得 Mac 触摸板可以正常操作;二是修复一个 Issue,使得即使素材节点即使被旋转之后,也能正常触发磁贴对齐效果,有个小坑需要注意。

请大家动动小手,给我一个免费的 Star 吧~

大家如果发现了 Bug,欢迎来提 Issue 哟~

github源码

gitee源码

示例地址

快捷键、触摸板的优化

  • 兼容 MacOS Command 键
  • Ctrl(Win)/Command(Mac) + R 刷新
  • 退格键也作为删除键
  • 缩放以触摸板双指缩放为准(即鼠标改为上滚轮放大、下滚轮缩小)

请移步查看代码差异,比较简单。

旋转对齐的支持

把磁贴 attract 移动至新增的 AttractTool 中,并新增 AttractDraw 方便调试

先看看 Issue 反馈的问题:

以水平方向上为例,没有旋转之前,逻辑上的对齐线大概如此:

只是,旋转之后,按原来计算坐标+宽高的方式就不合适了:

这里,符合直觉的,应该如下:

正好,官方有个合适的 API 可以获得上面黄线的矩形区域信息,就是 getClientRect。

如果仅考虑单个素材节点,直接获取该节点的 getClientRect 信息,替换掉此前的计算逻辑即可。

可是,这里考虑的还有多选的情况,这个时候就应该通过 transformer 获取了,这里有一个坑,如下:

通过 transformer 的 getClientRect,以为获得左边的区域信息,可事实是左边那样。

这就导致了,计算的磁贴坐标都出现的偏移。

上结论,按 Konva 定结构特点, transformer 必定包含一个 name 为 back 的层,正正是上面左边需要的区域,获取该区域信息就正确了。

ts 复制代码
// /src/Render/handlers/SelectionHandlers.ts

// 原来通过以下的 x、y、width、height 信息计算:
const pos = this.render.transformer.position()
const width = this.render.transformer.width()
const height = this.render.transformer.height()

需改为

ts 复制代码
// /src/Render/handlers/SelectionHandlers.ts

// 现在改为通过以下 rect 信息的 x、y、width、height 信息计算:
const rect = this.render.transformer.findOne('.back')!.getClientRect()

最新在线示例,提供了测试调试用例,可以查看连接线的变化:

这样,按新的区域信息计算就满足了:

More Stars please!勾勾手指~

源码

gitee源码

示例地址

相关推荐
YWL6 小时前
OpenLayers测距测面:完整测量工具
前端·javascript·vue.js·信息可视化·openlayers
zhanghaha13146 小时前
HTML系列教程:2_HTML 编辑器(零基础超详细讲解
前端·编辑器·html
半旧5186 小时前
【Java Web02】WEB服务器内部实现技术揭秘
java·服务器·前端
拿本唠嗑AI研究7 小时前
现代前端架构爬虫指南:从静态页面到 React/Vue 单页应用
前端·爬虫·架构
独孤九剑打醒他7 小时前
【原创开源】双层Master‑Worker软硬协同调度架构:从根源解决分布式数据一致性难题
前端·嵌入式硬件·架构·前端框架·硬件工程
程序员黑豆13 小时前
Java包装类:基本类型与对象的桥梁
java·前端·ai编程
bugcome_com15 小时前
JWT 知识小课堂:从入门到精通,一文吃透 JSON Web Token
前端·json
To_OC16 小时前
写了三天 Next.js,我的 React 世界观被拆了又装回去
前端·全栈·next.js
独泪了无痕16 小时前
viewer.js 安装与配置指南:实现图片预览功能
前端·vue.js
Fluxart.ai18 小时前
电商商品图审核怎么自动化?规则引擎、人工复核与发布门禁
java·前端·自动化