跳到主要内容

图形工具提示

使用 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);

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