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


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

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

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

    github源码

    gitee源码

    示例地址

    快捷键、触摸板的优化

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

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

    旋转对齐的支持

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

    先看看 Issue 反馈的问题:

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

    image

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

    image

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

    image

    正好,官方有个合适的 API 可以获得上面黄线的矩形区域信息,就是 getClientRect。
    如果仅考虑单个素材节点,直接获取该节点的 getClientRect 信息,替换掉此前的计算逻辑即可。
    可是,这里考虑的还有多选的情况,这个时候就应该通过 transformer 获取了,这里有一个坑,如下:

    image

    通过 transformer 的 getClientRect,以为获得左边的区域信息,可事实是左边那样。
    这就导致了,计算的磁贴坐标都出现的偏移。
    上结论,按 Konva 定结构特点, transformer 必定包含一个 name 为 back 的层,正正是上面左边需要的区域,获取该区域信息就正确了。

    // /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()
    

    需改为

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

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

    image

    image

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

    image

    More Stars please!勾勾手指~

    源码

    gitee源码

    示例地址

  • 相关阅读:
    线程应用实例
    处理过程与工具
    Blazor组件自做十二 : Blazor Pdf Reader PDF阅读器 组件(更新)
    Linux系统编程_进程间通信第1天:IPC、无名管道pipe和命名管道mkfifo(半双工)、消息队列msgget(全双工)
    【unity3D插件】Embedded Browser(ZFBrowser) — 快速实现PC端内嵌网页(有详细图解)
    【机器学习 之 Matplotlib】绘制折线图 基础练习
    MySQL 事务一致性的视线
    ISO体系认证办理流程
    Typecho编辑器,批量文章编辑伪原创改写
    内网穿透——Windows搭建服务器
  • 原文地址:https://www.cnblogs.com/xachary/p/18253370