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

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

时间:2024-06-17 22:32:24浏览次数:7  
标签:触摸板 const 16 Konva transformer height 源码 对齐

这一章解决两个缺陷,一是调整一些快捷键,使得 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源码

示例地址

标签:触摸板,const,16,Konva,transformer,height,源码,对齐
From: https://www.cnblogs.com/xachary/p/18253370

相关文章

  • 海思SD3403,SS928/926,hi3519dv500,hi3516dv500移植yolov7,yolov8(22)hi3516dv500/19dv5
     最近太忙更新不及时,SS928跑yolov8的文章各位朋友不要催,最近在测试自己魔改的yolov8,测完有结论了跟大家分享。魔改的yolov8在dv500系列里有些小问题,能正常运行,但是优化报错,在做更细致的测试。 先分享一下最近对比RK3588做的测试结果。RK3588算是嵌入式AI里的顶配级别存在......
  • 6.16 学习心得
    《梦断代码》一书记录的是作者罗森伯格对OSAF主持的Chandler项目进行田野调查,通过Chandler开发过程来揭示软件开发过程中一些根本性的大问题。对本书才刚刚阅读了三分之一,就已经忍不住对作者描述的开发过程所感叹,虽然刚进入软件领域不久,但是仍旧有感于这本书中的现实,对自己也很有......
  • 处理问题:windows server 2016由于没有远程桌面授权服务器可以提供许可证,远程会话被中
      windowsserver可以多用户同时登陆,默认最大远程登录数量为2,如果有更多人需要同时远程登录,则需要安装远程桌面授权服务,第一次安装后,免费期为120天,超过则无法正常远程登录。解决办法如下:Windowsserver2016服务器远程桌面登录时出现错误提示:“由于没有远程桌面授权服务器......
  • 内存:M321RYGA0PB2-CCP 96G DDR5 RDIMM,KHAA44801B-MC16、KHAA84901B-MC17、KHAA44801B-
    1、M321RYGA0PB2-CCP是一款带存储器的双列直插式存储模块,可通过添加8位奇偶校验信号,实现错误纠正。该器件支持x4/x8组织/每个DIMM和3DPC配置最高2个级别。规格类型:DDR5DIMM类型:RDIMM容量:96GB组织:2Rx4组件成分:(4Gx4)x40速率:6400Mbps工作电压:1.1V针脚数:288应......
  • 3.16博客
    演示数据库在本教程中,我们将使用RUNOOB样本数据库。下面是选自"Websites"表的数据:+----+--------------+---------------------------+-------+---------+|id|name|url|alexa|country|+----+--------------+-------------------......
  • 1604:理想的正方形
    //1604:理想的正方形.cpp:此文件包含"main"函数。程序执行将在此处开始并结束。//#include<iostream>#include<deque>#include<algorithm>usingnamespacestd;/*https://loj.ac/p/10182http://ybt.ssoier.cn:8088/problem_show.php?pid=1604原题来自:HAOI20......
  • Java 6.16 DeepClone and ShallowClone
    浅克隆:复制对象的引用地址,导致克隆对象和原始对象共享引用类型字段的实际对象。classPersonimplementsCloneable{Stringname;Addressaddress;publicPerson(Stringname,Addressaddress){this.name=name;this.address=add......
  • 我的收藏周刊116
    文章分享拯救小米路由器R1D第一代小米路由器(R1D)的七年之痒:拆硬盘和导出EXT4数据的艰苦历程两篇关于小米路由器R1D的文章,因为手头有一台小米R1D,目前只能进入安全模式使用,可以WIFI上网,但是很多配置管理功能用不了了,有时间考虑修复一下。其实现在的很长一段时间小米路由器R1D......
  • Day24| 77. 组合 、216.组合总和III 、17.电话号码的字母组合
    77.组合对着在回溯算法理论基础给出的代码模板,来做本题组合问题,大家就会发现写回溯算法套路。在回溯算法解决实际问题的过程中,大家会有各种疑问,先看视频介绍,基本可以解决大家的疑惑。本题关于剪枝操作是大家要理解的重点,因为后面很多回溯算法解决的题目,都是这个剪枝套路......
  • 2024.6.16
    publicclassSparkSQL09_Source_Req{publicstaticvoidmain(String[]args){//TODO在编码前,设定Hadoop的访问用户System.setProperty("HADOOP_USER_NAME","atguigu");finalSparkSessionsparkSession=SparkSession......