You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Konva.Transformer的transform事件中检测锚点类型

在Konva.Transformer的transform事件中获取锚点类型的方法

可以直接通过Konva.Transformer提供的getActiveAnchor()方法获取触发transform操作的锚点,再通过锚点节点的name()方法拿到对应的锚点类型(如"middle-right"、"bottom-right"等)。

具体实现步骤

  1. 监听Transformer的transform事件
  2. 在事件回调中调用transformer.getActiveAnchor()获取当前激活的锚点节点
  3. 通过锚点节点的name()方法获取锚点类型,判断是否为目标锚点后执行对应操作

代码示例

// 创建舞台、层和目标元素
const stage = new Konva.Stage({
  container: 'container',
  width: 500,
  height: 500
});
const layer = new Konva.Layer();
stage.add(layer);

const rect = new Konva.Rect({
  x: 100,
  y: 100,
  width: 200,
  height: 150,
  fill: 'lightblue',
  draggable: true
});
layer.add(rect);

// 创建Transformer并绑定目标元素
const transformer = new Konva.Transformer();
layer.add(transformer);
transformer.nodes([rect]);

// 监听transform事件
transformer.on('transform', () => {
  const activeAnchor = transformer.getActiveAnchor();
  // 无激活锚点时直接返回
  if (!activeAnchor) return;

  const anchorType = activeAnchor.name();
  // 判断是否为目标锚点
  if (anchorType === 'middle-right' || anchorType === 'bottom-right') {
    // 执行Konva.Text相关操作,示例为创建或更新文本节点
    let textNode = layer.findOne('.anchor-triggered-text');
    if (!textNode) {
      textNode = new Konva.Text({
        x: rect.x() + rect.width(),
        y: rect.y(),
        text: '锚点触发操作',
        fontSize: 16,
        fill: '#ff4444',
        name: 'anchor-triggered-text'
      });
      layer.add(textNode);
    } else {
      // 更新文本位置以跟随元素变换
      textNode.x(rect.x() + rect.width());
      textNode.y(rect.y());
    }
    layer.draw();
  }
});

关键说明

  • getActiveAnchor():返回当前正在被拖拽操作的锚点节点,若没有激活的锚点则返回null
  • 锚点节点的name()返回值与官方定义的锚点类型完全一致,包括"middle-left"、"middle-right"、"bottom-right"等所有预设锚点标识

内容的提问来源于stack exchange,提问作者Passion

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 12:57:37