在 Konva.js 中使用相同的锚点调整线的大小和旋转

2023-12-31

我正在使用 Konva.js 在浏览器中对数据可视化进行注释。一个常见的用例是在形状(矩形、椭圆形)及其描述(文本节点)之间绘制线条。用户需要拖动、旋转线条并调整其大小。调整大小仅限于线宽。

目前正在添加线路及其变压器,如下:

var line = new Konva.Line({
    x: stage.getWidth() / 2,
    y: stage.getHeight() / 2,
    points: [0, 0, 100, 0],
    stroke: '#000',
    strokeWidth: 3,
    lineCap: 'round',
    lineJoin: 'round',
    draggable: true,
    id: id,
    strokeScaleEnabled: false,
    hitStrokeWidth: 15
});

layer.add(line);

var tr = new Konva.Transformer({
    node: line,
    enabledAnchors: ['middle-left', 'middle-right']
});

layer.add(tr);

目前,正确定位线条并不是很直观,因为它需要用户使用旋转、中左和中右锚点分别旋转线条和调整线条大小。

相反,我正在寻找一种使用中左和中右锚点同时旋转和调整线条大小的方法。我的灵感来自于 PowerPoint - 线条两端只有锚点,可用于同时调整大小和旋转:

我尝试在 Konva 的 Transformer _handleMouseMove 函数中组合旋转器和中左/中右功能,但这不能按预期工作。

有没有人找到一种方法可以使用左锚点和右锚点同时完成这两件事?


目前,我不建议使用Konva.Transformer对于一条简单的线。使用几个圆圈构建自定义解决方案很简单:

const line = new Konva.Line({
  points: [50, 50, 250, 50],
  stroke: 'green'
});
layer.add(line);

const anchor1 = new Konva.Circle({
  x: line.points()[0],
  y: line.points()[1],
  radius: 10,
  fill: 'red',
  draggable: true
})
layer.add(anchor1);

const anchor2 = new Konva.Circle({
  x: line.points()[2],
  y: line.points()[3],
  radius: 10,
  fill: 'red',
  draggable: true
})
layer.add(anchor2);


function updateLine() {
  const points = [
    anchor1.x(),
    anchor1.y(),
    anchor2.x(),
    anchor2.y(),
  ]
  line.points(points);
  layer.batchDraw();
}

anchor1.on('dragmove', updateLine);
anchor2.on('dragmove', updateLine);

Demo: https://jsbin.com/wahetunepa/edit?html,js,输出 https://jsbin.com/wahetunepa/edit?html,js,output

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Konva.js 中使用相同的锚点调整线的大小和旋转 的相关文章

  • Tensorboard(PyTorch)add_graph 中的错误

    我正在关注这个 Pytorch 的张量板 https pytorch org docs stable tensorboard html文档 我有以下代码 model torchvision models resnet50 False wri
  • 使用 SSIS 2008 将 Excel 导入 SQL 时跳过行

    我需要导入如下所示的工作表 March Orders Empty Row Week Order Date Cust 3 1 271356 3 3 10 010572 3 1 280353 3 5 10 022114 3 1 290822 3
  • 检测 Windows 进程和应用程序是否正在运行

    我正在调查是否有一种方法可以以编程方式检查某个进程是否作为进程运行 在运行的 exe 列表中 AND作为打开的应用程序 即在任务栏上 并根据结果采取行动 另外 有没有办法以编程方式终止进程OR正在运行的应用程序 我们正在该服务器上运行 WA
  • WordPress URL 不返回 404 页面

    在遭受黑客攻击后 我需要一些有关 WordPress 的帮助 我已经彻底清除了黑客攻击 谷歌也删除了 该网站可能被黑客入侵 flag 黑客向 Google 提交了大量 URL 其中每个有效 URL 的末尾都包含一个随机字符串 这些在谷歌搜索
  • 使用通用约束时如何使用继承

    当我尝试实现一个允许继承的库并希望有人可以提供帮助时 我正在努力解决一些通用约束问题 我正在尝试构建一个具有 3 种风格的类库 每种风格都构建在另一种之上 对我来说 这似乎是使用泛型的绝佳机会 因为我无法通过纯继承来做我想做的事情 代码如下
  • Linq & String.ToLower() 奇怪的行为

    我在服务器端有一个查询 它从邮政编码表中返回不同城市的列表 我正在使用 WCF RIA 服务 以下查询成功返回 228 个城市provincename public IQueryable

随机推荐

  • OS X 中的 GNU 链接器等效命令

    我正在阅读下面的书 http www cs bham ac uk exr lectures opsys 10 11 lectures os dev pdf关于操作系统 在第 43 页中 他们使用以下命令将带注释的机器代码转换为原始机器代码文
  • 如何将 3 个 DIV 彼此对齐?

    我需要在页脚容器 DIV 中创建 3 个 DIV 分别左对齐 中对齐和右对齐 我见过的所有 CSS 示例都像我一样使用了浮动 但是 由于某种原因 DotNetNuke 无法正确解析 CSS 我发现左侧窗格正确浮动 但右侧和中间窗格位于其正下
  • 验证可执行文件的 Authenticode 签名时内存泄漏?

    我在用Win验证信任 http msdn microsoft com en us library aa388208 v VS 85 aspx使用以下函数验证某些 Windows 可执行文件的有效性 该函数在循环中调用 tmain int s
  • Vue JS 将数据从父级传递给子级的子级

    在Vue js中 如何正确地将数据从父组件传递到多级子组件链 您有几个选择 Props https v2 vuejs org v2 guide components props html 活动总线 https css tricks com
  • 在 Python 中停止 Lambda 函数

    在某个函数内 我想停止整个 Lambda 进程 但不触发错误 我尝试查看上下文变量来阻止它或只是调用exit 但每次它都被视为我不想跟踪的错误 如何在 Python 中成功结束 Lambda 进程 在 AWS Lambda 中 您定义一个h
  • Vim 缓冲区已被修改[重复]

    这个问题在这里已经有答案了 我正在尝试实施一个AutoCmd在 Vim 中 需要在当前缓冲区被修改时执行 我已阅读所有可用的事件AutoCmd在文档中 但找不到有助于确定缓冲区何时被修改的内容 这并不一定意味着 写入缓冲区时 因为我需要触发
  • 分配器感知的容器分配是如何实现的?

    例如 从std deque 运算符 在 C 参考中 1 复制分配 const std deque 及其他 将内容替换为其他内容的副本 如果 std allocator traits propagate on container copy a
  • 如何创建接口的匿名实现?

    我有一个界面 interface TileSet fun contains x Int y Int Boolean 我希望能够创建瓦片集的并集 瓦片是一对 x 和 y 整数坐标 fun TileSet union another TileS
  • .pyc 文件何时刷新?

    据我所知 pyc 文件是纯文本 py 文件的编译版本 在运行时创建以使程序运行得更快 然而我观察到了一些事情 修改 py 文件后 程序行为会发生变化 这表明 py 文件已编译 或者至少经过某种哈希处理或比较时间戳 以便判断是否应该重新编译它
  • 雪球词干:定义区域

    我试图理解雪球词干算法 该算法使用两个区域 R1 和 R2 定义如下 R1 是元音后面的第一个非元音之后的区域 或者是 如果没有这样的非元音 则为单词末尾的空区域 R2 是 R1 中元音后面的第一个非元音之后的区域 或者 是单词末尾的空区域
  • 如何在 BigQuery 上以与 CSV 相同的顺序加载数据

    是否可以按照与原始输入 CSV 文件相同的行顺序加载数据 这些文件不按任何特定顺序或任何特定列排序 看起来 BigQuery 加载是分布式的 顺序是不可预测的 但往往首先对 null 进行分组 不 这是不可能的 此外 一旦数据加载到 Big
  • StoryBoard 处理继承的视图控制器

    我是故事板的新手 我曾经使用代码来表达我的观点 我有个问题 我创建了一个视图控制器 interface FunctionViewController UIViewController 我已经使用我的代码添加 全屏按钮 alpha 0 5 中
  • 如何解释 read_until 的签名以及 Tokio 中的 AsyncRead + BufRead 是什么?

    我试图理解 Rust 中的异步 I O 以下代码基于 Katharina Fey 的片段这对我有用 use futures future Future use std io BufReader use tokio io fn main le
  • 单元渲染器是一个自定义组件,不断收到“无法在‘节点’上执行‘appendChild’:参数 1 不是‘节点’类型。”

    当我尝试使用单元格渲染来渲染自定义元素时 这是我的组件 Action jsx import React from react export default props gt div div
  • Android-在列表视图中保存复选框状态

    我有带有复选框和 保存 按钮的列表视图 无论我选中哪个复选框并单击 保存 按钮 我都想将与这些选中的行相关的数据保存到数据库中 这是我的代码 public class CardDetailsAdapter extends BaseAdapt
  • 如何在 TensorFlow Eager 中分析图函数?

    在 TensorFlow Eager 中 我可以使用 Python 的分析器来分析纯粹以 eager 模式运行的代码 但是 如果我使用以下命令将 python 函数 编译 为图形函数tf function or tf contrib eag
  • 查找条件为真的第一个列表元素[重复]

    这个问题在这里已经有答案了 我正在寻找一种优雅 简短 的方法来返回列表中与特定条件匹配的第一个元素 而不必评估列表中每个元素的条件 最终我想出了 e for e in mylist if my criteria e next 有更好的方法吗
  • “Sys.WebForms.PageRequestManager”为 null 或不是对象

    您好 我有一个 aspx 页面 其中有以下代码
  • 了解 Node/Mongo 中的查找

    我正在尝试学习节点 考虑这段代码 基于官方 MongoDB Node js 驱动程序 Retrieve all the documents in the collection collection find toArray function
  • 在 Konva.js 中使用相同的锚点调整线的大小和旋转

    我正在使用 Konva js 在浏览器中对数据可视化进行注释 一个常见的用例是在形状 矩形 椭圆形 及其描述 文本节点 之间绘制线条 用户需要拖动 旋转线条并调整其大小 调整大小仅限于线宽 目前正在添加线路及其变压器 如下 var line