跳到主要内容

图形工具提示

使用 Konva 创建 HTML5 Canvas 图形工具提示

此示例展示如何创建工具提示,使其在鼠标悬停在图形上时跟随鼠标指针。它演示以下内容:

  1. 使用 sceneFunc 创建自定义图形
  2. 处理鼠标事件(mousemove、mouseout)
  3. 使用多个图层更好地组织内容
  4. 创建跟随指针的动态工具提示
import Konva from 'konva';

const stage = new Konva.Stage({
  container: 'container',
  width: window.innerWidth,
  height: window.innerHeight,
});

const shapesLayer = new Konva.Layer();
const tooltipLayer = new Konva.Layer();

// Create custom triangle shape
const triangle = new Konva.Shape({
  stroke: 'black',
  fill: '#00D2FF',
  strokeWidth: 1,
  sceneFunc: function (context) {
    context.beginPath();
    context.moveTo(120, 50);
    context.lineTo(250, 80);
    context.lineTo(150, 170);
    context.closePath();
    context.fillStrokeShape(this);
  },
});

// Create circle
const circle = new Konva.Circle({
  x: 250,
  y: stage.height() / 2,
  fill: 'red',
  stroke: 'black',
  strokeWidth: 4,
  radius: 70,
});

// Create tooltip
const tooltip = new Konva.Text({
  text: '',
  fontFamily: 'Calibri',
  fontSize: 12,
  padding: 5,
  textFill: 'white',
  fill: 'black',
  alpha: 0.75,
  visible: false,
});

// Add event listeners for triangle
triangle.on('mousemove', () => {
  const mousePos = stage.getPointerPosition();
  tooltip.position({
    x: mousePos.x + 5,
    y: mousePos.y + 5,
  });
  tooltip.text('Cyan Triangle');
  tooltip.show();
});

triangle.on('mouseout', () => {
  tooltip.hide();
});

// Add event listeners for circle
circle.on('mousemove', () => {
  const mousePos = stage.getPointerPosition();
  tooltip.position({
    x: mousePos.x + 5,
    y: mousePos.y + 5,
  });
  tooltip.text('Red Circle');
  tooltip.show();
});

circle.on('mouseout', () => {
  tooltip.hide();
});

// Add shapes and tooltip to layers
shapesLayer.add(triangle);
shapesLayer.add(circle);
tooltipLayer.add(tooltip);

// Add layers to stage
stage.add(shapesLayer);
stage.add(tooltipLayer);

操作说明:将鼠标移到图形上以显示工具提示。工具提示会跟随指针,并显示每个图形的信息。